import Data.Maybe (catMaybes, fromJust)
import Test.HUnit (assertEqual)
import Data.Maybe (catMaybes, fromJust)
import Test.HUnit (assertEqual)
--- Two CIDR ranges are equivalent if they have the same network bits
--- and the masks are the same.
+-- | Two CIDR ranges are equivalent if they have the same network bits
+-- and the masks are the same.
equivalent :: Cidr -> Cidr -> Bool
equivalent (Cidr addr1 mbits1) (Cidr addr2 mbits2) =
(mbits1 == mbits2) && ((apply_mask addr1 mbits1 B.Zero) == (apply_mask addr2 mbits2 B.Zero))
equivalent :: Cidr -> Cidr -> Bool
equivalent (Cidr addr1 mbits1) (Cidr addr2 mbits2) =
(mbits1 == mbits2) && ((apply_mask addr1 mbits1 B.Zero) == (apply_mask addr2 mbits2 B.Zero))
--- Returns the mask portion of a CIDR address. That is, everything
--- after the trailing slash.
+-- | Returns the mask portion of a CIDR address. That is, everything
+-- after the trailing slash.
maskbits_from_cidr_string :: String -> Maybe Maskbits
maskbits_from_cidr_string s
| length partlist == 2 = maskbits_from_string (partlist !! 1)
| otherwise = Nothing
where
maskbits_from_cidr_string :: String -> Maybe Maskbits
maskbits_from_cidr_string s
| length partlist == 2 = maskbits_from_string (partlist !! 1)
| otherwise = Nothing
where
-- | Takes an IP address String in CIDR notation, and returns a list
-- of its octets (as Ints).
octets_from_cidr_string :: String -> [Octet]
octets_from_cidr_string s =
-- | Takes an IP address String in CIDR notation, and returns a list
-- of its octets (as Ints).
octets_from_cidr_string :: String -> [Octet]
octets_from_cidr_string s =
contains_proper :: Cidr -> Cidr -> Bool
contains_proper cidr1 cidr2 =
(cidr1 `contains` cidr2) && (not (cidr2 `contains` cidr1))
contains_proper :: Cidr -> Cidr -> Bool
contains_proper cidr1 cidr2 =
(cidr1 `contains` cidr2) && (not (cidr2 `contains` cidr1))