[][src]Struct ipnet::Ipv6Net

pub struct Ipv6Net { /* fields omitted */ }

An IPv6 network address.

See IpNet for a type encompassing both IPv4 and IPv6 network addresses.

Textual representation

Ipv6Net provides a FromStr implementation for parsing network addresses represented in CIDR notation. See IETF RFC 4632 for the CIDR notation.

Examples

use std::net::Ipv6Addr;
use ipnet::Ipv6Net;

let net: Ipv6Net = "fd00::/32".parse().unwrap();
assert_eq!(Ok(net.network()), "fd00::".parse());

Methods

impl Ipv6Net[src]

pub fn new(ip: Ipv6Addr, prefix_len: u8) -> Result<Ipv6Net, PrefixLenError>[src]

Creates a new IPv6 network address from an Ipv6Addr and prefix length.

Examples

use std::net::Ipv6Addr;
use ipnet::{Ipv6Net, PrefixLenError};

let net = Ipv6Net::new(Ipv6Addr::new(0xfd, 0, 0, 0, 0, 0, 0, 0), 24);
assert!(net.is_ok());

let bad_prefix_len = Ipv6Net::new(Ipv6Addr::new(0xfd, 0, 0, 0, 0, 0, 0, 0), 129);
assert_eq!(bad_prefix_len, Err(PrefixLenError));

pub fn trunc(&self) -> Ipv6Net[src]

Returns a copy of the network with the address truncated to the prefix length.

Examples

assert_eq!(
    "fd00::1:2:3:4/16".parse::<Ipv6Net>().unwrap().trunc(),
    "fd00::/16".parse().unwrap()
);

pub fn addr(&self) -> Ipv6Addr[src]

Returns the address.

pub fn prefix_len(&self) -> u8[src]

Returns the prefix length.

pub fn max_prefix_len(&self) -> u8[src]

Returns the maximum valid prefix length.

pub fn netmask(&self) -> Ipv6Addr[src]

Returns the network mask.

Examples

let net: Ipv6Net = "fd00::/24".parse().unwrap();
assert_eq!(Ok(net.netmask()), "ffff:ff00::".parse());

pub fn hostmask(&self) -> Ipv6Addr[src]

Returns the host mask.

Examples

let net: Ipv6Net = "fd00::/24".parse().unwrap();
assert_eq!(Ok(net.hostmask()), "::ff:ffff:ffff:ffff:ffff:ffff:ffff".parse());

pub fn network(&self) -> Ipv6Addr[src]

Returns the network address.

Examples

let net: Ipv6Net = "fd00:1234:5678::/24".parse().unwrap();
assert_eq!(Ok(net.network()), "fd00:1200::".parse());

pub fn broadcast(&self) -> Ipv6Addr[src]

Returns the last address.

Technically there is no such thing as a broadcast address for IPv6. The name is used for consistency with colloquial usage.

Examples

let net: Ipv6Net = "fd00:1234:5678::/24".parse().unwrap();
assert_eq!(Ok(net.broadcast()), "fd00:12ff:ffff:ffff:ffff:ffff:ffff:ffff".parse());

pub fn supernet(&self) -> Option<Ipv6Net>[src]

Returns the Ipv6Net that contains this one.

Examples

let n1: Ipv6Net = "fd00:ff00::/24".parse().unwrap();
let n2: Ipv6Net = "fd00:fe00::/23".parse().unwrap();
let n3: Ipv6Net = "fd00:fe00::/0".parse().unwrap();

assert_eq!(n1.supernet().unwrap(), n2);
assert_eq!(n3.supernet(), None);

pub fn is_sibling(&self, other: &Ipv6Net) -> bool[src]

Returns true if this network and the given network are children of the same supernet.

Examples

let n1: Ipv6Net = "fd00::/18".parse().unwrap();
let n2: Ipv6Net = "fd00:4000::/18".parse().unwrap();
let n3: Ipv6Net = "fd00:8000::/18".parse().unwrap();

assert!(n1.is_sibling(&n2));
assert!(!n2.is_sibling(&n3));

pub fn hosts(&self) -> Ipv6AddrRange[src]

Return an Iterator over the host addresses in this network.

Examples

let net: Ipv6Net = "fd00::/126".parse().unwrap();
assert_eq!(net.hosts().collect::<Vec<Ipv6Addr>>(), vec![
    "fd00::".parse::<Ipv6Addr>().unwrap(),
    "fd00::1".parse().unwrap(),
    "fd00::2".parse().unwrap(),
    "fd00::3".parse().unwrap(),
]);

pub fn subnets(&self, new_prefix_len: u8) -> Result<Ipv6Subnets, PrefixLenError>[src]

Returns an Iterator over the subnets of this network with the given prefix length.

Examples

let net: Ipv6Net = "fd00::/16".parse().unwrap();
assert_eq!(net.subnets(18).unwrap().collect::<Vec<Ipv6Net>>(), vec![
    "fd00::/18".parse::<Ipv6Net>().unwrap(),
    "fd00:4000::/18".parse().unwrap(),
    "fd00:8000::/18".parse().unwrap(),
    "fd00:c000::/18".parse().unwrap(),
]);

let net: Ipv6Net = "fd00::/126".parse().unwrap();
assert_eq!(net.subnets(128).unwrap().collect::<Vec<Ipv6Net>>(), vec![
    "fd00::/128".parse::<Ipv6Net>().unwrap(),
    "fd00::1/128".parse().unwrap(),
    "fd00::2/128".parse().unwrap(),
    "fd00::3/128".parse().unwrap(),
]);

let net: Ipv6Net = "fd00::/16".parse().unwrap();
assert_eq!(net.subnets(15), Err(PrefixLenError));

let net: Ipv6Net = "fd00::/16".parse().unwrap();
assert_eq!(net.subnets(129), Err(PrefixLenError));

pub fn contains<T>(&self, other: T) -> bool where
    Self: Contains<T>, 
[src]

Test if a network address contains either another network address or an IP address.

Examples

let net: Ipv6Net = "fd00::/16".parse().unwrap();
let net_yes: Ipv6Net = "fd00::/17".parse().unwrap();
let net_no: Ipv6Net = "fd00::/15".parse().unwrap();
let ip_yes: Ipv6Addr = "fd00::1".parse().unwrap();
let ip_no: Ipv6Addr = "fd01::".parse().unwrap();

assert!(net.contains(&net));
assert!(net.contains(&net_yes));
assert!(!net.contains(&net_no));
assert!(net.contains(&ip_yes));
assert!(!net.contains(&ip_no));

pub fn aggregate(networks: &Vec<Ipv6Net>) -> Vec<Ipv6Net>[src]

Aggregate a Vec of Ipv6Nets and return the result as a new Vec.

Examples

let nets = vec![
    "fd00::/18".parse::<Ipv6Net>().unwrap(),
    "fd00:4000::/18".parse().unwrap(),
    "fd00:8000::/18".parse().unwrap(),
];
assert_eq!(Ipv6Net::aggregate(&nets), vec![
    "fd00::/17".parse::<Ipv6Net>().unwrap(),
    "fd00:8000::/18".parse().unwrap(),
]);

Trait Implementations

impl Clone for Ipv6Net[src]

impl Copy for Ipv6Net[src]

impl Debug for Ipv6Net[src]

impl Default for Ipv6Net[src]

impl Display for Ipv6Net[src]

impl Eq for Ipv6Net[src]

impl From<Ipv6Addr> for Ipv6Net[src]

impl From<Ipv6Net> for IpNet[src]

impl FromStr for Ipv6Net[src]

type Err = AddrParseError

The associated error which can be returned from parsing.

impl Hash for Ipv6Net[src]

impl Ord for Ipv6Net[src]

impl PartialEq<Ipv6Net> for Ipv6Net[src]

impl PartialOrd<Ipv6Net> for Ipv6Net[src]

impl StructuralEq for Ipv6Net[src]

impl StructuralPartialEq for Ipv6Net[src]

Auto Trait Implementations

impl RefUnwindSafe for Ipv6Net

impl Send for Ipv6Net

impl Sync for Ipv6Net

impl Unpin for Ipv6Net

impl UnwindSafe for Ipv6Net

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.