mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-16 08:48:51 +00:00
Fix for 0::/0 network (#205)
This commit is contained in:
20
src/ipv6.rs
20
src/ipv6.rs
@ -203,6 +203,9 @@ impl Ipv6Network {
|
|||||||
pub fn mask(&self) -> Ipv6Addr {
|
pub fn mask(&self) -> Ipv6Addr {
|
||||||
debug_assert!(self.prefix <= IPV6_BITS);
|
debug_assert!(self.prefix <= IPV6_BITS);
|
||||||
|
|
||||||
|
if self.prefix == 0 {
|
||||||
|
return Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
let mask = u128::MAX << (IPV6_BITS - self.prefix);
|
let mask = u128::MAX << (IPV6_BITS - self.prefix);
|
||||||
Ipv6Addr::from(mask)
|
Ipv6Addr::from(mask)
|
||||||
}
|
}
|
||||||
@ -279,6 +282,10 @@ impl Ipv6Network {
|
|||||||
/// ```
|
/// ```
|
||||||
pub fn size(&self) -> u128 {
|
pub fn size(&self) -> u128 {
|
||||||
debug_assert!(self.prefix <= IPV6_BITS);
|
debug_assert!(self.prefix <= IPV6_BITS);
|
||||||
|
|
||||||
|
if self.prefix == 0 {
|
||||||
|
return u128::MAX;
|
||||||
|
}
|
||||||
1 << (IPV6_BITS - self.prefix)
|
1 << (IPV6_BITS - self.prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -757,4 +764,17 @@ mod test {
|
|||||||
);
|
);
|
||||||
assert_eq!(net.nth(net.size()), None);
|
assert_eq!(net.nth(net.size()), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_mask_with_prefix_0() {
|
||||||
|
let network: Ipv6Network = "0::/0".parse().unwrap();
|
||||||
|
let mask = network.mask();
|
||||||
|
assert_eq!(mask, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_size_with_prefix_0() {
|
||||||
|
let network: Ipv6Network = "0::/0".parse().unwrap();
|
||||||
|
assert_eq!(network.size(), u128::MAX);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user