pub enum UnicastOrMulticastIpv6Addr {
Unicast(UnicastAddr<Ipv6Addr>),
Multicast(MulticastAddr<Ipv6Addr>),
}
Expand description
An IPv6 address stored as a unicast or multicast witness type.
UnicastOrMulticastIpv6Addr
is either a UnicastAddr
or a
MulticastAddr
. It allows the user to match on the unicast-ness or
multicast-ness of an IPv6 address and obtain a statically-typed witness in
each case. This is useful if the user needs to call different functions
which each take a witness type.
Variants§
Unicast(UnicastAddr<Ipv6Addr>)
Multicast(MulticastAddr<Ipv6Addr>)
Implementations§
Source§impl UnicastOrMulticastIpv6Addr
impl UnicastOrMulticastIpv6Addr
Sourcepub fn new(addr: Ipv6Addr) -> Option<UnicastOrMulticastIpv6Addr>
pub fn new(addr: Ipv6Addr) -> Option<UnicastOrMulticastIpv6Addr>
Constructs a new UnicastOrMulticastIpv6Addr
.
Returns None
if addr
is the unspecified address.
Sourcepub fn from_specified(
addr: SpecifiedAddr<Ipv6Addr>,
) -> UnicastOrMulticastIpv6Addr
pub fn from_specified( addr: SpecifiedAddr<Ipv6Addr>, ) -> UnicastOrMulticastIpv6Addr
Constructs a new UnicastOrMulticastIpv6Addr
from a specified address.
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 UnicastOrMulticastIpv6Addr
impl AsRef<Ipv6Addr> for UnicastOrMulticastIpv6Addr
Source§impl Clone for UnicastOrMulticastIpv6Addr
impl Clone for UnicastOrMulticastIpv6Addr
Source§fn clone(&self) -> UnicastOrMulticastIpv6Addr
fn clone(&self) -> UnicastOrMulticastIpv6Addr
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for UnicastOrMulticastIpv6Addr
impl Debug for UnicastOrMulticastIpv6Addr
Source§impl Deref for UnicastOrMulticastIpv6Addr
impl Deref for UnicastOrMulticastIpv6Addr
Source§impl Display for UnicastOrMulticastIpv6Addr
impl Display for UnicastOrMulticastIpv6Addr
Source§impl From<&UnicastOrMulticastIpv6Addr> for Ipv6Addr
impl From<&UnicastOrMulticastIpv6Addr> for Ipv6Addr
Source§fn from(addr: &UnicastOrMulticastIpv6Addr) -> Ipv6Addr
fn from(addr: &UnicastOrMulticastIpv6Addr) -> Ipv6Addr
Source§impl From<MulticastAddr<Ipv6Addr>> for UnicastOrMulticastIpv6Addr
impl From<MulticastAddr<Ipv6Addr>> for UnicastOrMulticastIpv6Addr
Source§fn from(addr: MulticastAddr<Ipv6Addr>) -> UnicastOrMulticastIpv6Addr
fn from(addr: MulticastAddr<Ipv6Addr>) -> UnicastOrMulticastIpv6Addr
Source§impl From<UnicastAddr<Ipv6Addr>> for UnicastOrMulticastIpv6Addr
impl From<UnicastAddr<Ipv6Addr>> for UnicastOrMulticastIpv6Addr
Source§fn from(addr: UnicastAddr<Ipv6Addr>) -> UnicastOrMulticastIpv6Addr
fn from(addr: UnicastAddr<Ipv6Addr>) -> UnicastOrMulticastIpv6Addr
Source§impl From<UnicastOrMulticastIpv6Addr> for Ipv6Addr
impl From<UnicastOrMulticastIpv6Addr> for Ipv6Addr
Source§fn from(addr: UnicastOrMulticastIpv6Addr) -> Ipv6Addr
fn from(addr: UnicastOrMulticastIpv6Addr) -> Ipv6Addr
Source§impl LinkLocalAddress for UnicastOrMulticastIpv6Addr
impl LinkLocalAddress for UnicastOrMulticastIpv6Addr
Source§fn is_link_local(&self) -> bool
fn is_link_local(&self) -> bool
Source§impl MappedAddress for UnicastOrMulticastIpv6Addr
impl MappedAddress for UnicastOrMulticastIpv6Addr
Source§fn is_non_mapped(&self) -> bool
fn is_non_mapped(&self) -> bool
Source§impl MulticastAddress for UnicastOrMulticastIpv6Addr
impl MulticastAddress for UnicastOrMulticastIpv6Addr
Source§fn is_multicast(&self) -> bool
fn is_multicast(&self) -> bool
Source§fn is_non_multicast(&self) -> bool
fn is_non_multicast(&self) -> bool
is_multicast()
.Source§impl TryFrom<Ipv6Addr> for UnicastOrMulticastIpv6Addr
impl TryFrom<Ipv6Addr> for UnicastOrMulticastIpv6Addr
Source§impl UnicastAddress for UnicastOrMulticastIpv6Addr
impl UnicastAddress for UnicastOrMulticastIpv6Addr
Source§fn is_unicast(&self) -> bool
fn is_unicast(&self) -> bool
Source§impl Witness<Ipv6Addr> for UnicastOrMulticastIpv6Addr
impl Witness<Ipv6Addr> for UnicastOrMulticastIpv6Addr
Source§fn new(addr: Ipv6Addr) -> Option<UnicastOrMulticastIpv6Addr>
fn new(addr: Ipv6Addr) -> Option<UnicastOrMulticastIpv6Addr>
Source§unsafe fn new_unchecked(addr: Ipv6Addr) -> UnicastOrMulticastIpv6Addr
unsafe fn new_unchecked(addr: Ipv6Addr) -> UnicastOrMulticastIpv6Addr
addr
actually
satisfies the required property. Read moreimpl Copy for UnicastOrMulticastIpv6Addr
impl Eq for UnicastOrMulticastIpv6Addr
impl StructuralPartialEq for UnicastOrMulticastIpv6Addr
Auto Trait Implementations§
impl Freeze for UnicastOrMulticastIpv6Addr
impl RefUnwindSafe for UnicastOrMulticastIpv6Addr
impl Send for UnicastOrMulticastIpv6Addr
impl Sync for UnicastOrMulticastIpv6Addr
impl Unpin for UnicastOrMulticastIpv6Addr
impl UnwindSafe for UnicastOrMulticastIpv6Addr
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
)