X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCidr.hs;h=8fc014f6cf5b062f8ae019d3b990c22a9604e9b8;hb=a3c4fbd855c182390f39cdf88de36d7cb0ea69d5;hp=98c42c7e6bdab38a0f2d1da47c142aba445c7182;hpb=c5ea6135a25e8c9e108c34ebb0d0cbb4b4af1e6d;p=hath.git diff --git a/src/Cidr.hs b/src/Cidr.hs index 98c42c7..8fc014f 100644 --- a/src/Cidr.hs +++ b/src/Cidr.hs @@ -5,6 +5,14 @@ module Cidr combine_all, contains, contains_proper, + max_octet1, + max_octet2, + max_octet3, + max_octet4, + min_octet1, + min_octet2, + min_octet3, + min_octet4, prop_all_cidrs_contain_themselves, prop_contains_proper_intransitive ) where @@ -13,6 +21,7 @@ import Data.List (nubBy) import Test.HUnit import Test.QuickCheck +import qualified Bit as B import IPv4Address import ListUtils import Maskable @@ -46,7 +55,7 @@ equivalent Cidr.None Cidr.None = True equivalent Cidr.None _ = False equivalent _ Cidr.None = False equivalent (Cidr addr1 mbits1) (Cidr addr2 mbits2) = - (mbits1 == mbits2) && ((apply_mask addr1 mbits1) == (apply_mask 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. @@ -78,6 +87,46 @@ cidr_from_string s +min_host :: Cidr -> IPv4Address +min_host Cidr.None = IPv4Address.None +min_host (Cidr IPv4Address.None _) = IPv4Address.None +min_host (Cidr _ Maskbits.None) = IPv4Address.None +min_host (Cidr addr mask) = apply_mask addr mask B.Zero + + +max_host :: Cidr -> IPv4Address +max_host Cidr.None = IPv4Address.None +max_host (Cidr IPv4Address.None _) = IPv4Address.None +max_host (Cidr _ Maskbits.None) = IPv4Address.None +max_host (Cidr addr mask) = apply_mask addr mask B.One + + +min_octet1 :: Cidr -> Octet +min_octet1 cidr = octet1 (min_host cidr) + +min_octet2 :: Cidr -> Octet +min_octet2 cidr = octet2 (min_host cidr) + +min_octet3 :: Cidr -> Octet +min_octet3 cidr = octet3 (min_host cidr) + +min_octet4 :: Cidr -> Octet +min_octet4 cidr = octet4 (min_host cidr) + +max_octet1 :: Cidr -> Octet +max_octet1 cidr = octet1 (max_host cidr) + +max_octet2 :: Cidr -> Octet +max_octet2 cidr = octet2 (max_host cidr) + +max_octet3 :: Cidr -> Octet +max_octet3 cidr = octet3 (max_host cidr) + +max_octet4 :: Cidr -> Octet +max_octet4 cidr = octet4 (max_host cidr) + + + -- Return true if the first argument (a CIDR range) contains the -- second (another CIDR range). There are a lot of ways we can be fed -- junk here. For lack of a better alternative, just return False when @@ -121,8 +170,8 @@ contains (Cidr addr1 mbits1) (Cidr addr2 mbits2) | mbits1 > mbits2 = False | otherwise = addr1masked == addr2masked where - addr1masked = apply_mask addr1 mbits1 - addr2masked = apply_mask addr2 mbits1 + addr1masked = apply_mask addr1 mbits1 B.Zero + addr2masked = apply_mask addr2 mbits1 B.Zero contains_proper :: Cidr -> Cidr -> Bool