12 data Cidr = None | Cidr { ipv4address :: IPv4Address,
13 maskbits :: Maskbits }
17 -- Returns the mask portion of a CIDR address. That is, everything
18 -- after the trailing slash.
19 maskbits_from_cidr_string :: String -> Maskbits
20 maskbits_from_cidr_string s =
21 maskbits_from_string ((splitWith (`elem` "/") s) !! 1)
24 -- Takes an IP address String in CIDR notation, and returns a list of
25 -- its octets (as Ints).
26 octets_from_cidr_string :: String -> [Octet]
27 octets_from_cidr_string s =
28 map octet_from_string (take 4 (splitWith (`elem` "./") s))
31 cidr_from_string :: String -> Cidr
33 | addr == IPv4Address.None = Cidr.None
34 | mbits == Maskbits.None = Cidr.None
35 | otherwise = Cidr addr mbits
37 addr = ipv4address_from_octets (oct1) (oct2) (oct3) (oct4)
42 octs = octets_from_cidr_string s
43 mbits = maskbits_from_cidr_string s