Enum net_types::ip::Ipv6SourceAddr
source · pub enum Ipv6SourceAddr {
Unicast(NonMappedAddr<UnicastAddr<Ipv6Addr>>),
Unspecified,
}
Expand description
The source address from an IPv6 packet.
An Ipv6SourceAddr
represents the source address from an IPv6 packet, which
may only be either:
- unicast and non-mapped (e.g. not an ipv4-mapped-ipv6 address), or
- unspecified.
Variants§
Unicast(NonMappedAddr<UnicastAddr<Ipv6Addr>>)
Unspecified
Implementations§
source§impl Ipv6SourceAddr
impl Ipv6SourceAddr
sourcepub fn new(addr: Ipv6Addr) -> Option<Ipv6SourceAddr>
pub fn new(addr: Ipv6Addr) -> Option<Ipv6SourceAddr>
Constructs a new Ipv6SourceAddr
.
Returns None
if addr
does not satisfy the properties required of an
Ipv6SourceAddr
.
Methods from Deref<Target = Ipv6Addr>§
sourcepub fn ipv6_bytes(&self) -> [u8; 16]
pub fn ipv6_bytes(&self) -> [u8; 16]
Gets the bytes of the IPv6 address.
sourcepub fn to_solicited_node_address(&self) -> MulticastAddr<Ipv6Addr>
pub fn to_solicited_node_address(&self) -> MulticastAddr<Ipv6Addr>
Converts this Ipv6Addr
to the IPv6 Solicited-Node Address, used in
Neighbor Discovery, defined in RFC 4291 Section 2.7.1.
sourcepub fn is_valid_unicast(&self) -> bool
pub fn is_valid_unicast(&self) -> bool
Is this a valid unicast address?
A valid unicast address is any unicast address that can be bound to an
interface (not the unspecified or loopback addresses).
addr.is_valid_unicast()
is equivalent to !(addr.is_loopback() || !addr.is_specified() || addr.is_multicast())
.
sourcepub fn is_site_local(&self) -> bool
pub fn is_site_local(&self) -> bool
Is this address in the (deprecated) site-local unicast subnet?
is_site_local
returns true if self
is in the (deprecated)
Ipv6::SITE_LOCAL_UNICAST_SUBNET
. See that constant’s documentation
for more details on deprecation and how the subnet should be used in
light of deprecation.
sourcepub fn is_unicast_link_local(&self) -> bool
pub fn is_unicast_link_local(&self) -> bool
Is this a unicast link-local address?
addr.is_unicast_link_local()
is equivalent to
addr.is_unicast_in_subnet(&Ipv6::LINK_LOCAL_UNICAST_SUBNET)
.
sourcepub fn to_ipv4_compatible(&self) -> Option<Ipv4Addr>
pub fn to_ipv4_compatible(&self) -> Option<Ipv4Addr>
Tries to extract the IPv4 address from an IPv4-compatible IPv6 address.
IPv4-compatible IPv6 addresses were defined to assist in the IPv6 transition, and are now specified in RFC 4291 Section 2.5.5.1. The lowest-order 32 bits carry an IPv4 address, while the highest-order 96 bits are all set to 0 as in this diagram from the RFC:
| 80 bits | 16 | 32 bits |
+--------------------------------------+--------------------------+
|0000..............................0000|0000| IPv4 address |
+--------------------------------------+----+---------------------+
to_ipv4_compatible
checks to see if self
is an IPv4-compatible
IPv6 address. If it is, the IPv4 address is extracted and returned.
Per RFC 4291:
The ‘IPv4-Compatible IPv6 address’ is now deprecated because the current IPv6 transition mechanisms no longer use these addresses. New or updated implementations are not required to support this address type.
The more modern embedding format is IPv4-mapped IPv6 addressing - see
to_ipv4_mapped
.
sourcepub fn to_ipv4_mapped(&self) -> Option<Ipv4Addr>
pub fn to_ipv4_mapped(&self) -> Option<Ipv4Addr>
Tries to extract the IPv4 address from an IPv4-mapped IPv6 address.
IPv4-mapped IPv6 addresses are used to represent the addresses of IPv4 nodes as IPv6 addresses, and are defined in RFC 4291 Section 2.5.5.2. The lowest-order 32 bits carry an IPv4 address, the middle order 16 bits carry the literal 0xFFFF, and the highest order 80 bits are set to 0 as in this diagram from the RFC:
| 80 bits | 16 | 32 bits |
+--------------------------------------+--------------------------+
|0000..............................0000|FFFF| IPv4 address |
+--------------------------------------+----+---------------------+
to_ipv4_mapped
checks to see if self
is an IPv4-mapped
IPv6 address. If it is, the IPv4 address is extracted and returned.
Trait Implementations§
source§impl AsRef<Ipv6Addr> for Ipv6SourceAddr
impl AsRef<Ipv6Addr> for Ipv6SourceAddr
source§impl Clone for Ipv6SourceAddr
impl Clone for Ipv6SourceAddr
source§fn clone(&self) -> Ipv6SourceAddr
fn clone(&self) -> Ipv6SourceAddr
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for Ipv6SourceAddr
impl Debug for Ipv6SourceAddr
source§impl Deref for Ipv6SourceAddr
impl Deref for Ipv6SourceAddr
source§impl Display for Ipv6SourceAddr
impl Display for Ipv6SourceAddr
source§impl From<&Ipv6SourceAddr> for Ipv6Addr
impl From<&Ipv6SourceAddr> for Ipv6Addr
source§fn from(addr: &Ipv6SourceAddr) -> Ipv6Addr
fn from(addr: &Ipv6SourceAddr) -> Ipv6Addr
source§impl From<Ipv6SourceAddr> for Ipv6Addr
impl From<Ipv6SourceAddr> for Ipv6Addr
source§fn from(addr: Ipv6SourceAddr) -> Ipv6Addr
fn from(addr: Ipv6SourceAddr) -> Ipv6Addr
source§impl LinkLocalAddress for Ipv6SourceAddr
impl LinkLocalAddress for Ipv6SourceAddr
source§fn is_link_local(&self) -> bool
fn is_link_local(&self) -> bool
source§impl MappedAddress for Ipv6SourceAddr
impl MappedAddress for Ipv6SourceAddr
source§fn is_non_mapped(&self) -> bool
fn is_non_mapped(&self) -> bool
source§impl PartialEq for Ipv6SourceAddr
impl PartialEq for Ipv6SourceAddr
source§fn eq(&self, other: &Ipv6SourceAddr) -> bool
fn eq(&self, other: &Ipv6SourceAddr) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl SpecifiedAddress for Ipv6SourceAddr
impl SpecifiedAddress for Ipv6SourceAddr
source§fn is_specified(&self) -> bool
fn is_specified(&self) -> bool
source§impl TryFrom<Ipv6Addr> for Ipv6SourceAddr
impl TryFrom<Ipv6Addr> for Ipv6SourceAddr
source§impl UnicastAddress for Ipv6SourceAddr
impl UnicastAddress for Ipv6SourceAddr
source§fn is_unicast(&self) -> bool
fn is_unicast(&self) -> bool
source§impl Witness<Ipv6Addr> for Ipv6SourceAddr
impl Witness<Ipv6Addr> for Ipv6SourceAddr
source§unsafe fn new_unchecked(addr: Ipv6Addr) -> Ipv6SourceAddr
unsafe fn new_unchecked(addr: Ipv6Addr) -> Ipv6SourceAddr
addr
actually
satisfies the required property. Read moreimpl Copy for Ipv6SourceAddr
impl Eq for Ipv6SourceAddr
impl StructuralPartialEq for Ipv6SourceAddr
Auto Trait Implementations§
impl Freeze for Ipv6SourceAddr
impl RefUnwindSafe for Ipv6SourceAddr
impl Send for Ipv6SourceAddr
impl Sync for Ipv6SourceAddr
impl Unpin for Ipv6SourceAddr
impl UnwindSafe for Ipv6SourceAddr
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§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)