pub struct CidrTree<'a> { /* private fields */ }Implementations§
Methods from Deref<Target = IpNet>§
Sourcepub fn trunc(&self) -> IpNet
pub fn trunc(&self) -> IpNet
Returns a copy of the network with the address truncated to the prefix length.
§Examples
assert_eq!(
"192.168.12.34/16".parse::<IpNet>().unwrap().trunc(),
"192.168.0.0/16".parse().unwrap()
);
assert_eq!(
"fd00::1:2:3:4/16".parse::<IpNet>().unwrap().trunc(),
"fd00::/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) -> IpAddr
pub fn netmask(&self) -> IpAddr
Returns the network mask.
§Examples
let net: IpNet = "10.1.0.0/20".parse().unwrap();
assert_eq!(Ok(net.netmask()), "255.255.240.0".parse());
let net: IpNet = "fd00::/24".parse().unwrap();
assert_eq!(Ok(net.netmask()), "ffff:ff00::".parse());Sourcepub fn hostmask(&self) -> IpAddr
pub fn hostmask(&self) -> IpAddr
Returns the host mask.
§Examples
let net: IpNet = "10.1.0.0/20".parse().unwrap();
assert_eq!(Ok(net.hostmask()), "0.0.15.255".parse());
let net: IpNet = "fd00::/24".parse().unwrap();
assert_eq!(Ok(net.hostmask()), "::ff:ffff:ffff:ffff:ffff:ffff:ffff".parse());Sourcepub fn network(&self) -> IpAddr
pub fn network(&self) -> IpAddr
Returns the network address.
§Examples
let net: IpNet = "172.16.123.123/16".parse().unwrap();
assert_eq!(Ok(net.network()), "172.16.0.0".parse());
let net: IpNet = "fd00:1234:5678::/24".parse().unwrap();
assert_eq!(Ok(net.network()), "fd00:1200::".parse());Sourcepub fn broadcast(&self) -> IpAddr
pub fn broadcast(&self) -> IpAddr
Returns the broadcast address.
§Examples
let net: IpNet = "172.16.0.0/22".parse().unwrap();
assert_eq!(Ok(net.broadcast()), "172.16.3.255".parse());
let net: IpNet = "fd00:1234:5678::/24".parse().unwrap();
assert_eq!(Ok(net.broadcast()), "fd00:12ff:ffff:ffff:ffff:ffff:ffff:ffff".parse());Sourcepub fn supernet(&self) -> Option<IpNet>
pub fn supernet(&self) -> Option<IpNet>
Returns the IpNet that contains this one.
§Examples
let n1: IpNet = "172.16.1.0/24".parse().unwrap();
let n2: IpNet = "172.16.0.0/23".parse().unwrap();
let n3: IpNet = "172.16.0.0/0".parse().unwrap();
assert_eq!(n1.supernet().unwrap(), n2);
assert_eq!(n3.supernet(), None);
let n1: IpNet = "fd00:ff00::/24".parse().unwrap();
let n2: IpNet = "fd00:fe00::/23".parse().unwrap();
let n3: IpNet = "fd00:fe00::/0".parse().unwrap();
assert_eq!(n1.supernet().unwrap(), n2);
assert_eq!(n3.supernet(), None);Sourcepub fn is_sibling(&self, other: &IpNet) -> bool
pub fn is_sibling(&self, other: &IpNet) -> bool
Returns true if this network and the given network are
children of the same supernet.
§Examples
let n4_1: IpNet = "10.1.0.0/24".parse().unwrap();
let n4_2: IpNet = "10.1.1.0/24".parse().unwrap();
let n4_3: IpNet = "10.1.2.0/24".parse().unwrap();
let n6_1: IpNet = "fd00::/18".parse().unwrap();
let n6_2: IpNet = "fd00:4000::/18".parse().unwrap();
let n6_3: IpNet = "fd00:8000::/18".parse().unwrap();
assert!( n4_1.is_sibling(&n4_2));
assert!(!n4_2.is_sibling(&n4_3));
assert!( n6_1.is_sibling(&n6_2));
assert!(!n6_2.is_sibling(&n6_3));
assert!(!n4_1.is_sibling(&n6_2));Sourcepub fn hosts(&self) -> IpAddrRange
pub fn hosts(&self) -> IpAddrRange
Return an Iterator over the host addresses in this network.
§Examples
let net: IpNet = "10.0.0.0/30".parse().unwrap();
assert_eq!(net.hosts().collect::<Vec<IpAddr>>(), vec![
"10.0.0.1".parse::<IpAddr>().unwrap(),
"10.0.0.2".parse().unwrap(),
]);
let net: IpNet = "10.0.0.0/31".parse().unwrap();
assert_eq!(net.hosts().collect::<Vec<IpAddr>>(), vec![
"10.0.0.0".parse::<IpAddr>().unwrap(),
"10.0.0.1".parse().unwrap(),
]);
let net: IpNet = "fd00::/126".parse().unwrap();
assert_eq!(net.hosts().collect::<Vec<IpAddr>>(), vec![
"fd00::".parse::<IpAddr>().unwrap(),
"fd00::1".parse().unwrap(),
"fd00::2".parse().unwrap(),
"fd00::3".parse().unwrap(),
]);Sourcepub fn subnets(&self, new_prefix_len: u8) -> Result<IpSubnets, PrefixLenError>
pub fn subnets(&self, new_prefix_len: u8) -> Result<IpSubnets, PrefixLenError>
Returns an Iterator over the subnets of this network with the
given prefix length.
§Examples
let net: IpNet = "10.0.0.0/24".parse().unwrap();
assert_eq!(net.subnets(26).unwrap().collect::<Vec<IpNet>>(), vec![
"10.0.0.0/26".parse::<IpNet>().unwrap(),
"10.0.0.64/26".parse().unwrap(),
"10.0.0.128/26".parse().unwrap(),
"10.0.0.192/26".parse().unwrap(),
]);
let net: IpNet = "fd00::/16".parse().unwrap();
assert_eq!(net.subnets(18).unwrap().collect::<Vec<IpNet>>(), vec![
"fd00::/18".parse::<IpNet>().unwrap(),
"fd00:4000::/18".parse().unwrap(),
"fd00:8000::/18".parse().unwrap(),
"fd00:c000::/18".parse().unwrap(),
]);
let net: IpNet = "10.0.0.0/24".parse().unwrap();
assert_eq!(net.subnets(23), Err(PrefixLenError));
let net: IpNet = "10.0.0.0/24".parse().unwrap();
assert_eq!(net.subnets(33), Err(PrefixLenError));
let net: IpNet = "fd00::/16".parse().unwrap();
assert_eq!(net.subnets(15), Err(PrefixLenError));
let net: IpNet = "fd00::/16".parse().unwrap();
assert_eq!(net.subnets(129), Err(PrefixLenError));Sourcepub fn contains<T>(&self, other: T) -> boolwhere
IpNet: Contains<T>,
pub fn contains<T>(&self, other: T) -> boolwhere
IpNet: Contains<T>,
Test if a network address contains either another network address or an IP address.
§Examples
let net4: IpNet = "192.168.0.0/24".parse().unwrap();
let net4_yes: IpNet = "192.168.0.0/25".parse().unwrap();
let net4_no: IpNet = "192.168.0.0/23".parse().unwrap();
let ip4_yes: IpAddr = "192.168.0.1".parse().unwrap();
let ip4_no: IpAddr = "192.168.1.0".parse().unwrap();
assert!(net4.contains(&net4));
assert!(net4.contains(&net4_yes));
assert!(!net4.contains(&net4_no));
assert!(net4.contains(&ip4_yes));
assert!(!net4.contains(&ip4_no));
let net6: IpNet = "fd00::/16".parse().unwrap();
let net6_yes: IpNet = "fd00::/17".parse().unwrap();
let net6_no: IpNet = "fd00::/15".parse().unwrap();
let ip6_yes: IpAddr = "fd00::1".parse().unwrap();
let ip6_no: IpAddr = "fd01::".parse().unwrap();
assert!(net6.contains(&net6));
assert!(net6.contains(&net6_yes));
assert!(!net6.contains(&net6_no));
assert!(net6.contains(&ip6_yes));
assert!(!net6.contains(&ip6_no));
assert!(!net4.contains(&net6));
assert!(!net6.contains(&net4));
assert!(!net4.contains(&ip6_no));
assert!(!net6.contains(&ip4_no));Trait Implementations§
Source§impl<'a> Ord for CidrTree<'a>
impl<'a> Ord for CidrTree<'a>
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl<'a> PartialOrd for CidrTree<'a>
impl<'a> PartialOrd for CidrTree<'a>
impl<'a> Eq for CidrTree<'a>
impl<'a> StructuralPartialEq for CidrTree<'a>
Auto Trait Implementations§
impl<'a> Freeze for CidrTree<'a>
impl<'a> RefUnwindSafe for CidrTree<'a>
impl<'a> Send for CidrTree<'a>
impl<'a> Sync for CidrTree<'a>
impl<'a> Unpin for CidrTree<'a>
impl<'a> UnwindSafe for CidrTree<'a>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.