Ifv4Net

Struct Ifv4Net 

Source
pub struct Ifv4Net { /* private fields */ }
Expand description

An interface IPv4 network.

Implementations§

Source§

impl Ifv4Net

Source

pub const fn new(index: u32, addr: Ipv4Net) -> Self

Creates a new Ifv4Net from an Ipv4Net.

Source

pub const fn with_prefix_len( index: u32, addr: Ipv4Addr, prefix_len: u8, ) -> Result<Self, PrefixLenError>

Creates a new IPv4interface address from an index, Ipv4Addr and prefix length.

Source

pub const fn with_prefix_len_assert( index: u32, addr: Ipv4Addr, prefix_len: u8, ) -> Self

Creates a new IPv4 interface address from an index, Ipv4Addr and prefix length. If called from a const context it will verify prefix length at compile time. Otherwise it will panic at runtime if prefix length is not less then or equal to 32.

Source

pub const fn index(&self) -> u32

Returns the index of the interface.

Source

pub fn name(&self) -> Result<SmolStr>

Returns the name of the interface.

This method will invoke the if_indextoname function to get the name of the interface internally.

Source

pub const fn addr(&self) -> Ipv4Addr

Returns the address of the interface.

Source

pub const fn net(&self) -> &Ipv4Net

Returns the net of the interface.

Source

pub const fn prefix_len(&self) -> u8

Returns the prefix length of the interface address.

Source

pub const fn max_prefix_len(&self) -> u8

Returns the maximum prefix length of the interface address.

Methods from Deref<Target = Ipv4Net>§

Source

pub fn trunc(&self) -> Ipv4Net

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()
);
Source

pub fn addr(&self) -> Ipv4Addr

Returns the address.

Source

pub fn prefix_len(&self) -> u8

Returns the prefix length.

Source

pub fn max_prefix_len(&self) -> u8

Returns the maximum valid prefix length.

Source

pub fn netmask(&self) -> Ipv4Addr

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());
Source

pub fn hostmask(&self) -> Ipv4Addr

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());
Source

pub fn network(&self) -> Ipv4Addr

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());
Source

pub fn broadcast(&self) -> Ipv4Addr

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());
Source

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

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);
Source

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

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));
Source

pub fn hosts(&self) -> Ipv4AddrRange

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(),
]);
Source

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

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));
Source

pub fn contains<T>(&self, other: T) -> bool
where Ipv4Net: Contains<T>,

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));

Trait Implementations§

Source§

impl Clone for Ifv4Net

Source§

fn clone(&self) -> Ifv4Net

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Ifv4Net

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for Ifv4Net

Source§

type Target = Ipv4Net

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Display for Ifv4Net

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<Ifv4Net> for IfNet

Source§

fn from(value: Ifv4Net) -> Self

Converts to this type from the input type.
Source§

impl Hash for Ifv4Net

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Ifv4Net

Source§

fn cmp(&self, other: &Ifv4Net) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Ifv4Net

Source§

fn eq(&self, other: &Ifv4Net) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Ifv4Net

Source§

fn partial_cmp(&self, other: &Ifv4Net) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Copy for Ifv4Net

Source§

impl Eq for Ifv4Net

Source§

impl StructuralPartialEq for Ifv4Net

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.