[][src]Struct ipnet::Ipv4Net

pub struct Ipv4Net { /* fields omitted */ }

An IPv4 network address.

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

Textual representation

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

Examples

use std::net::Ipv4Addr;
use ipnet::Ipv4Net;

let net: Ipv4Net = "10.1.1.0/24".parse().unwrap();
assert_eq!(Ok(net.network()), "10.1.1.0".parse());

Methods

impl Ipv4Net[src]

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

Creates a new IPv4 network address from an Ipv4Addr and prefix length.

Examples

use std::net::Ipv4Addr;
use ipnet::{Ipv4Net, PrefixLenError};

let net = Ipv4Net::new(Ipv4Addr::new(10, 1, 1, 0), 24);
assert!(net.is_ok());

let bad_prefix_len = Ipv4Net::new(Ipv4Addr::new(10, 1, 1, 0), 33);
assert_eq!(bad_prefix_len, Err(PrefixLenError));

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

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

Examples

assert_eq!(
    "192.168.12.34/16".parse::<Ipv4Net>().unwrap().trunc(),
    "192.168.0.0/16".parse().unwrap()
);

pub fn addr(&self) -> Ipv4Addr[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) -> Ipv4Addr[src]

Returns the network mask.

Examples

let net: Ipv4Net = "10.1.0.0/20".parse().unwrap();
assert_eq!(Ok(net.netmask()), "255.255.240.0".parse());

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

Returns the host mask.

Examples

let net: Ipv4Net = "10.1.0.0/20".parse().unwrap();
assert_eq!(Ok(net.hostmask()), "0.0.15.255".parse());

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

Returns the network address.

Examples

let net: Ipv4Net = "172.16.123.123/16".parse().unwrap();
assert_eq!(Ok(net.network()), "172.16.0.0".parse());

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

Returns the broadcast address.

Examples

let net: Ipv4Net = "172.16.0.0/22".parse().unwrap();
assert_eq!(Ok(net.broadcast()), "172.16.3.255".parse());

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

Returns the Ipv4Net that contains this one.

Examples

let n1: Ipv4Net = "172.16.1.0/24".parse().unwrap();
let n2: Ipv4Net = "172.16.0.0/23".parse().unwrap();
let n3: Ipv4Net = "172.16.0.0/0".parse().unwrap();

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

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

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

Examples

let n1: Ipv4Net = "10.1.0.0/24".parse().unwrap();
let n2: Ipv4Net = "10.1.1.0/24".parse().unwrap();
let n3: Ipv4Net = "10.1.2.0/24".parse().unwrap();

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

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

Return an Iterator over the host addresses in this network.

If the prefix length is less than 31 both the network address and broadcast address are excluded. These are only valid host addresses when the prefix length is 31.

Examples

let net: Ipv4Net = "10.0.0.0/30".parse().unwrap();
assert_eq!(net.hosts().collect::<Vec<Ipv4Addr>>(), vec![
    "10.0.0.1".parse::<Ipv4Addr>().unwrap(),
    "10.0.0.2".parse().unwrap(),
]);

let net: Ipv4Net = "10.0.0.0/31".parse().unwrap();
assert_eq!(net.hosts().collect::<Vec<Ipv4Addr>>(), vec![
    "10.0.0.0".parse::<Ipv4Addr>().unwrap(),
    "10.0.0.1".parse().unwrap(),
]);

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

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

Examples

let net: Ipv4Net = "10.0.0.0/24".parse().unwrap();
assert_eq!(net.subnets(26).unwrap().collect::<Vec<Ipv4Net>>(), vec![
    "10.0.0.0/26".parse::<Ipv4Net>().unwrap(),
    "10.0.0.64/26".parse().unwrap(),
    "10.0.0.128/26".parse().unwrap(),
    "10.0.0.192/26".parse().unwrap(),
]);

let net: Ipv4Net = "10.0.0.0/30".parse().unwrap();
assert_eq!(net.subnets(32).unwrap().collect::<Vec<Ipv4Net>>(), vec![
    "10.0.0.0/32".parse::<Ipv4Net>().unwrap(),
    "10.0.0.1/32".parse().unwrap(),
    "10.0.0.2/32".parse().unwrap(),
    "10.0.0.3/32".parse().unwrap(),
]);

let net: Ipv4Net = "10.0.0.0/24".parse().unwrap();
assert_eq!(net.subnets(23), Err(PrefixLenError));

let net: Ipv4Net = "10.0.0.0/24".parse().unwrap();
assert_eq!(net.subnets(33), 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: Ipv4Net = "192.168.0.0/24".parse().unwrap();
let net_yes: Ipv4Net = "192.168.0.0/25".parse().unwrap();
let net_no: Ipv4Net = "192.168.0.0/23".parse().unwrap();
let ip_yes: Ipv4Addr = "192.168.0.1".parse().unwrap();
let ip_no: Ipv4Addr = "192.168.1.0".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<Ipv4Net>) -> Vec<Ipv4Net>[src]

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

Examples

let nets = vec![
    "10.0.0.0/24".parse::<Ipv4Net>().unwrap(),
    "10.0.1.0/24".parse().unwrap(),
    "10.0.2.0/24".parse().unwrap(),
];

assert_eq!(Ipv4Net::aggregate(&nets), vec![
    "10.0.0.0/23".parse::<Ipv4Net>().unwrap(),
    "10.0.2.0/24".parse().unwrap(),
]);

Trait Implementations

impl Clone for Ipv4Net[src]

impl Copy for Ipv4Net[src]

impl Debug for Ipv4Net[src]

impl Default for Ipv4Net[src]

impl Display for Ipv4Net[src]

impl Eq for Ipv4Net[src]

impl From<Ipv4Addr> for Ipv4Net[src]

impl From<Ipv4Net> for IpNet[src]

impl FromStr for Ipv4Net[src]

type Err = AddrParseError

The associated error which can be returned from parsing.

impl Hash for Ipv4Net[src]

impl Ord for Ipv4Net[src]

impl PartialEq<Ipv4Net> for Ipv4Net[src]

impl PartialOrd<Ipv4Net> for Ipv4Net[src]

impl StructuralEq for Ipv4Net[src]

impl StructuralPartialEq for Ipv4Net[src]

Auto Trait Implementations

impl RefUnwindSafe for Ipv4Net

impl Send for Ipv4Net

impl Sync for Ipv4Net

impl Unpin for Ipv4Net

impl UnwindSafe for Ipv4Net

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.