mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-17 01:08:53 +00:00
Add a broadcast method for Ipv6Network
This commit is contained in:
28
src/ipv6.rs
28
src/ipv6.rs
@ -71,6 +71,25 @@ impl Ipv6Network {
|
|||||||
Ipv6Addr::from(ip)
|
Ipv6Addr::from(ip)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the broadcast address of this `Ipv6Network`.
|
||||||
|
/// This means the highest possible IPv4 address inside of the network.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// use std::net::Ipv6Addr;
|
||||||
|
/// use ipnetwork::Ipv6Network;
|
||||||
|
///
|
||||||
|
/// let net: Ipv6Network = "2001:db8::/96".parse().unwrap();
|
||||||
|
/// assert_eq!(net.broadcast(), Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0xffff, 0xffff));
|
||||||
|
/// ```
|
||||||
|
#[cfg(feature = "ipv6-methods")]
|
||||||
|
pub fn broadcast(&self) -> Ipv6Addr {
|
||||||
|
let mask = u128::from(self.mask());
|
||||||
|
let broadcast = u128::from(self.addr) | !mask;
|
||||||
|
Ipv6Addr::from(broadcast)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn ip(&self) -> Ipv6Addr {
|
pub fn ip(&self) -> Ipv6Addr {
|
||||||
self.addr
|
self.addr
|
||||||
}
|
}
|
||||||
@ -317,4 +336,13 @@ mod test {
|
|||||||
let expected: Ipv6Addr = "2001:db8::".parse().unwrap();
|
let expected: Ipv6Addr = "2001:db8::".parse().unwrap();
|
||||||
assert_eq!(net, expected);
|
assert_eq!(net, expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg(feature = "ipv6-methods")]
|
||||||
|
fn broadcast_v6() {
|
||||||
|
let cidr: Ipv6Network = "2001:db8::0/96".parse().unwrap();
|
||||||
|
let net = cidr.broadcast();
|
||||||
|
let expected: Ipv6Addr = "2001:db8::ffff:ffff".parse().unwrap();
|
||||||
|
assert_eq!(net, expected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user