Struct ip_network::Ipv6Network [−][src]
pub struct Ipv6Network { /* fields omitted */ }
Expand description
IPv6 Network.
Implementations
Default route that contains all IP addresses, IP network ::/0
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);
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);
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);
Returns last IP address in range. Similar as broadcast_address
for IPv4.
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.last_address(), Ipv6Addr::new(0x2001, 0xdb8, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff));
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);
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)));
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)?));
pub 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;
impl 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)?);
pub 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;
impl 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)?);
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());
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());
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());
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());
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());
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());
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());
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());
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());
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);
Converts string in format X:X::X/Y (CIDR notation) to Ipv6Network
, but truncating host bits.
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
let ip_network = Ipv6Network::from_str_truncate("2001:db8::1/32")?;
assert_eq!(ip_network.network_address(), Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0));
assert_eq!(ip_network.netmask(), 32);
Return an iterator of the collapsed Ipv6Networks.
Implementation of this method was inspired by Python ipaddress.collapse_addresses
Examples
use std::net::Ipv6Addr;
use ip_network::Ipv6Network;
use std::str::FromStr;
let collapsed = Ipv6Network::collapse_addresses(&[
Ipv6Network::from_str("2001::/120")?,
Ipv6Network::from_str("2001::/96")?,
]);
assert_eq!(Ipv6Network::from_str("2001::/96")?, collapsed[0]);
Trait Implementations
type Expression = Bound<Cidr, Self>
type Expression = Bound<Cidr, Self>
The expression being returned
Perform the conversion
type Expression = Bound<Cidr, Self>
type Expression = Bound<Cidr, Self>
The expression being returned
Perform the conversion
type Expression = Bound<Nullable<Cidr>, Self>
type Expression = Bound<Nullable<Cidr>, Self>
The expression being returned
Perform the conversion
type Expression = Bound<Nullable<Cidr>, Self>
type Expression = Bound<Nullable<Cidr>, Self>
The expression being returned
Perform the conversion
Deserialize this value from the given Serde deserializer. Read more
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");
Performs the conversion.
impl<__ST, __DB> FromSqlRow<__ST, __DB> for Ipv6Network where
__DB: Backend,
Self: FromSql<__ST, __DB>,
impl<__ST, __DB> FromSqlRow<__ST, __DB> for Ipv6Network where
__DB: Backend,
Self: FromSql<__ST, __DB>,
See the trait documentation.
The number of fields that this type will consume. Must be equal to
the number of times you would call row.take()
in build_from_row
Read more
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.
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
impl<__ST, __DB> Queryable<__ST, __DB> for Ipv6Network where
__DB: Backend,
Self: FromSql<__ST, __DB>,
impl<__ST, __DB> Queryable<__ST, __DB> for Ipv6Network where
__DB: Backend,
Self: FromSql<__ST, __DB>,
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
Mutably borrows from an owned value. Read more
Returns a reference to self
as a ToSql
trait object.
Convert self
to an expression for Diesel’s query builder. Read more
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression where
&'a Self: AsExpression<T>,
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression where
&'a Self: AsExpression<T>,
Convert &self
to an expression for Diesel’s query builder. Read more