pub struct Ifv4Net { /* private fields */ }Expand description
An interface IPv4 network.
Implementations§
Source§impl Ifv4Net
impl Ifv4Net
Sourcepub const fn with_prefix_len(
index: u32,
addr: Ipv4Addr,
prefix_len: u8,
) -> Result<Self, PrefixLenError>
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.
Sourcepub const fn with_prefix_len_assert(
index: u32,
addr: Ipv4Addr,
prefix_len: u8,
) -> Self
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.
Sourcepub fn name(&self) -> Result<SmolStr>
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.
Sourcepub const fn prefix_len(&self) -> u8
pub const fn prefix_len(&self) -> u8
Returns the prefix length of the interface address.
Sourcepub const fn max_prefix_len(&self) -> u8
pub const fn max_prefix_len(&self) -> u8
Returns the maximum prefix length of the interface address.
Methods from Deref<Target = Ipv4Net>§
Sourcepub fn trunc(&self) -> Ipv4Net
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()
);Sourcepub fn prefix_len(&self) -> u8
pub fn prefix_len(&self) -> u8
Returns the prefix length.
Sourcepub fn max_prefix_len(&self) -> u8
pub fn max_prefix_len(&self) -> u8
Returns the maximum valid prefix length.
Sourcepub fn netmask(&self) -> Ipv4Addr
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());Sourcepub fn hostmask(&self) -> Ipv4Addr
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());Sourcepub fn network(&self) -> Ipv4Addr
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());Sourcepub fn broadcast(&self) -> Ipv4Addr
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());Sourcepub fn supernet(&self) -> Option<Ipv4Net>
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);Sourcepub fn is_sibling(&self, other: &Ipv4Net) -> bool
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));Sourcepub fn hosts(&self) -> Ipv4AddrRange
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(),
]);Sourcepub fn subnets(&self, new_prefix_len: u8) -> Result<Ipv4Subnets, PrefixLenError>
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));Sourcepub fn contains<T>(&self, other: T) -> boolwhere
Ipv4Net: Contains<T>,
pub fn contains<T>(&self, other: T) -> boolwhere
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 Ord for Ifv4Net
impl Ord for Ifv4Net
Source§impl PartialOrd for Ifv4Net
impl PartialOrd for Ifv4Net
impl Copy for Ifv4Net
impl Eq for Ifv4Net
impl StructuralPartialEq for Ifv4Net
Auto Trait Implementations§
impl Freeze for Ifv4Net
impl RefUnwindSafe for Ifv4Net
impl Send for Ifv4Net
impl Sync for Ifv4Net
impl Unpin for Ifv4Net
impl UnwindSafe for Ifv4Net
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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