diff --git a/src/lib.rs b/src/lib.rs index 698dbd6..b685a35 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,6 +56,13 @@ impl Ipv4Network { (Ipv4Addr::from(ip), ip) } + pub fn broadcast(&self) -> (Ipv4Addr, u32) { + let (_, network) = self.network(); + let (_, mask) = self.mask(); + let broadcast = network | !mask; + (Ipv4Addr::from(broadcast), broadcast) + } + pub fn contains(&self, ip: Ipv4Addr) -> bool { let (_, net) = self.network(); (u32::from(ip) & net) == net @@ -147,6 +154,14 @@ mod test { assert_eq!(int, 168427520); } + #[test] + fn broadcast_v4() { + let cidr = Ipv4Network::new(Ipv4Addr::new(10, 10, 1, 97), 23); + let (ip, int) = cidr.broadcast(); + assert_eq!(ip, Ipv4Addr::new(10, 10, 1, 255)); + assert_eq!(int, 168428031); + } + #[test] fn contains_v4() { let cidr = Ipv4Network::new(Ipv4Addr::new(74, 125, 227, 0), 25);