From 2ee819a438dae5319393d274ffc2be932e0d3663 Mon Sep 17 00:00:00 2001 From: Abhishek Chanda Date: Tue, 11 Jul 2017 21:11:39 +0100 Subject: [PATCH] Add a broadcast method for Ipv6Network --- src/ipv6.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/ipv6.rs b/src/ipv6.rs index f421f5e..807b300 100644 --- a/src/ipv6.rs +++ b/src/ipv6.rs @@ -71,6 +71,25 @@ impl Ipv6Network { 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 { self.addr } @@ -317,4 +336,13 @@ mod test { let expected: Ipv6Addr = "2001:db8::".parse().unwrap(); 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); + } }