Struct ip_network::Ipv6Network
source · [−]pub struct Ipv6Network { /* private fields */ }
Expand description
IPv6 Network.
Implementations
sourceimpl Ipv6Network
impl Ipv6Network
sourcepub fn new(
network_address: Ipv6Addr,
netmask: u8
) -> Result<Self, IpNetworkError>
pub fn new(
network_address: Ipv6Addr,
netmask: u8
) -> Result<Self, IpNetworkError>
Constructs new Ipv6Network
based on Ipv6Addr
and netmask
.
Returns error if netmask is bigger than 128 or if host bits are set in network_address
.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip = Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0);
let ip_network = Ipv6Network::new(ip, 32)?;
assert_eq!(ip_network.network_address(), ip);
assert_eq!(ip_network.netmask(), 32);
sourcepub fn new_truncate(
network_address: Ipv6Addr,
netmask: u8
) -> Result<Self, IpNetworkError>
pub fn new_truncate(
network_address: Ipv6Addr,
netmask: u8
) -> Result<Self, IpNetworkError>
Constructs new Ipv6Network
based on Ipv6Addr
and netmask
with truncating host bits
from given network_address
.
Returns error if netmask is bigger than 128.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip = Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 1, 0, 0);
let ip_network = Ipv6Network::new_truncate(ip, 32)?;
assert_eq!(ip_network.network_address(), Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0));
assert_eq!(ip_network.netmask(), 32);
sourcepub fn network_address(&self) -> Ipv6Addr
pub fn network_address(&self) -> Ipv6Addr
Returns network IP address (first address in range).
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip = Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0);
let ip_network = Ipv6Network::new(ip, 32)?;
assert_eq!(ip_network.network_address(), ip);
sourcepub fn netmask(&self) -> u8
pub fn netmask(&self) -> u8
Returns network mask.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip = Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0);
let ip_network = Ipv6Network::new(ip, 32)?;
assert_eq!(ip_network.netmask(), 32);
sourcepub fn contains(&self, ip: Ipv6Addr) -> bool
pub fn contains(&self, ip: Ipv6Addr) -> bool
Returns true
if given IPv6Addr
is inside this network.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip_network = Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 64)?;
assert!(ip_network.contains(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 1)));
assert!(!ip_network.contains(Ipv6Addr::new(0x2001, 0xdb9, 0, 0, 0, 0, 0, 0)));
sourcepub fn supernet(&self) -> Option<Self>
pub fn supernet(&self) -> Option<Self>
Returns network with smaller netmask by one. If netmask is already zero, None
will be returned.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let network = Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 32)?;
assert_eq!(network.supernet(), Some(Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 31)?));
sourcepub fn subnets(&self) -> Ipv6NetworkIteratorⓘNotable traits for Ipv6NetworkIteratorimpl Iterator for Ipv6NetworkIterator type Item = Ipv6Network;
pub fn subnets(&self) -> Ipv6NetworkIteratorⓘNotable traits for Ipv6NetworkIteratorimpl Iterator for Ipv6NetworkIterator type Item = Ipv6Network;
Returns Ipv6NetworkIterator
over networks with netmask bigger one.
If netmask is already 128, empty iterator will be returned.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip_network = Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 32)?;
let mut iterator = ip_network.subnets();
assert_eq!(iterator.next().unwrap(), Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 33)?);
assert_eq!(iterator.last().unwrap(), Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0x8000, 0, 0, 0, 0, 0), 33)?);
sourcepub fn subnets_with_prefix(&self, prefix: u8) -> Ipv6NetworkIteratorⓘNotable traits for Ipv6NetworkIteratorimpl Iterator for Ipv6NetworkIterator type Item = Ipv6Network;
pub fn subnets_with_prefix(&self, prefix: u8) -> Ipv6NetworkIteratorⓘNotable traits for Ipv6NetworkIteratorimpl Iterator for Ipv6NetworkIterator type Item = Ipv6Network;
Returns Ipv6NetworkIterator
over networks with defined netmask. Because len()
method
returns usize
and number of networks can be bigger than usize
, you can use real_len()
method
to get exact number of networks.
Panics
This method panics when prefix is bigger than 128 or when prefix is lower or equal than netmask.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let network = Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 32)?;
let mut iterator = network.subnets_with_prefix(33);
assert_eq!(2, iterator.real_len());
assert_eq!(iterator.next().unwrap(), Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 33)?);
assert_eq!(iterator.last().unwrap(), Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0x8000, 0, 0, 0, 0, 0), 33)?);
sourcepub fn is_default_route(&self) -> bool
pub fn is_default_route(&self) -> bool
sourcepub fn is_unspecified(&self) -> bool
pub fn is_unspecified(&self) -> bool
Returns true
for the special ‘unspecified’ network (::/128).
This property is defined in IETF RFC 4291.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_unspecified());
assert!(Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0), 128)?.is_unspecified());
sourcepub fn is_loopback(&self) -> bool
pub fn is_loopback(&self) -> bool
Returns true
if this is a loopback network (::1/128).
This property is defined in IETF RFC 4291.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1), 128)?.is_loopback());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_loopback());
sourcepub fn is_global(&self) -> bool
pub fn is_global(&self) -> bool
Returns true
if the address appears to be globally routable.
The following return false
:
- the loopback network
- link-local, site-local, and unique local unicast networks
- interface-, link-, realm-, admin- and site-local multicast networks
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_global());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1), 128)?.is_global());
assert!(Ipv6Network::new(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1), 128)?.is_global());
sourcepub fn is_unique_local(&self) -> bool
pub fn is_unique_local(&self) -> bool
Returns true
if this is a part of unique local network (fc00::/7).
This property is defined in IETF RFC 4193.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0xfc02, 0, 0, 0, 0, 0, 0, 0), 16)?.is_unique_local());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_unique_local());
sourcepub fn is_unicast_link_local(&self) -> bool
pub fn is_unicast_link_local(&self) -> bool
Returns true
if the network is part of unicast and link-local (fe80::/10).
This property is defined in IETF RFC 4291.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0xfe8a, 0, 0, 0, 0, 0, 0, 0), 16)?.is_unicast_link_local());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_unicast_link_local());
sourcepub fn is_unicast_site_local(&self) -> bool
pub fn is_unicast_site_local(&self) -> bool
Returns true
if this is a deprecated unicast site-local network (fec0::/10).
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0xfec2, 0, 0, 0, 0, 0, 0, 0), 16)?.is_unicast_site_local());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_unicast_site_local());
sourcepub fn is_documentation(&self) -> bool
pub fn is_documentation(&self) -> bool
Returns true
if this is a part of network reserved for documentation (2001:db8::/32).
This property is defined in IETF RFC 3849.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 32)?.is_documentation());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_documentation());
sourcepub fn is_unicast_global(&self) -> bool
pub fn is_unicast_global(&self) -> bool
Returns true
if the network is a globally routable unicast network.
The following return false
:
- the loopback network
- the link-local network
- the (deprecated) site-local network
- unique local network
- the unspecified network
- the network range reserved for documentation
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(!Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 32)?.is_unicast_global());
assert!(Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_unicast_global());
sourcepub fn is_multicast(&self) -> bool
pub fn is_multicast(&self) -> bool
Returns true
if this is a part of multicast network (ff00::/8).
This property is defined by IETF RFC 4291.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
assert!(Ipv6Network::new(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0), 8)?.is_multicast());
assert!(!Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.is_multicast());
sourcepub fn multicast_scope(&self) -> Option<Ipv6MulticastScope>
pub fn multicast_scope(&self) -> Option<Ipv6MulticastScope>
Returns the network’s multicast scope if the network is multicast.
These scopes are defined in IETF RFC 7346.
Examples
use std::net::Ipv6Addr;
use ip_network::{Ipv6Network, Ipv6MulticastScope};
assert_eq!(Ipv6Network::new(Ipv6Addr::new(0xff0e, 0, 0, 0, 0, 0, 0, 0), 32)?.multicast_scope(),
Some(Ipv6MulticastScope::Global));
assert_eq!(Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff), 128)?.multicast_scope(), None);
Trait Implementations
sourceimpl Clone for Ipv6Network
impl Clone for Ipv6Network
sourcefn clone(&self) -> Ipv6Network
fn clone(&self) -> Ipv6Network
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for Ipv6Network
impl Debug for Ipv6Network
sourceimpl Display for Ipv6Network
impl Display for Ipv6Network
sourcefn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Converts Ipv6Network
to string in format X:X::X/Y (CIDR notation).
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip_network = Ipv6Network::new(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0), 32)?;
assert_eq!(ip_network.to_string(), "2001:db8::/32");
sourceimpl From<Ipv6Addr> for Ipv6Network
impl From<Ipv6Addr> for Ipv6Network
sourceimpl From<Ipv6Network> for IpNetwork
impl From<Ipv6Network> for IpNetwork
sourcefn from(network: Ipv6Network) -> Self
fn from(network: Ipv6Network) -> Self
Performs the conversion.
sourceimpl FromStr for Ipv6Network
impl FromStr for Ipv6Network
sourcefn from_str(s: &str) -> Result<Ipv6Network, IpNetworkParseError>
fn from_str(s: &str) -> Result<Ipv6Network, IpNetworkParseError>
Converts string in format X:X::X/Y (CIDR notation) to Ipv6Network
.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
use std::str::FromStr;
let ip_network = Ipv6Network::from_str("2001:db8::/32")?;
assert_eq!(ip_network.network_address(), Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0));
assert_eq!(ip_network.netmask(), 32);
type Err = IpNetworkParseError
type Err = IpNetworkParseError
The associated error which can be returned from parsing.
sourceimpl Hash for Ipv6Network
impl Hash for Ipv6Network
sourceimpl Ord for Ipv6Network
impl Ord for Ipv6Network
sourceimpl PartialEq<IpNetwork> for Ipv6Network
impl PartialEq<IpNetwork> for Ipv6Network
sourceimpl PartialEq<Ipv6Network> for IpNetwork
impl PartialEq<Ipv6Network> for IpNetwork
sourceimpl PartialEq<Ipv6Network> for Ipv6Network
impl PartialEq<Ipv6Network> for Ipv6Network
sourceimpl PartialOrd<IpNetwork> for Ipv6Network
impl PartialOrd<IpNetwork> for Ipv6Network
sourcefn partial_cmp(&self, other: &IpNetwork) -> Option<Ordering>
fn partial_cmp(&self, other: &IpNetwork) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl PartialOrd<Ipv6Network> for IpNetwork
impl PartialOrd<Ipv6Network> for IpNetwork
sourcefn partial_cmp(&self, other: &Ipv6Network) -> Option<Ordering>
fn partial_cmp(&self, other: &Ipv6Network) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
sourceimpl PartialOrd<Ipv6Network> for Ipv6Network
impl PartialOrd<Ipv6Network> for Ipv6Network
sourcefn partial_cmp(&self, other: &Ipv6Network) -> Option<Ordering>
fn partial_cmp(&self, other: &Ipv6Network) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl Copy for Ipv6Network
impl Eq for Ipv6Network
impl StructuralEq for Ipv6Network
Auto Trait Implementations
impl RefUnwindSafe for Ipv6Network
impl Send for Ipv6Network
impl Sync for Ipv6Network
impl Unpin for Ipv6Network
impl UnwindSafe for Ipv6Network
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more