module Data.IP.Mask where import Data.Bits import Data.IP.Addr import Data.Word import Data.IntMap hiding (map) ---------------------------------------------------------------- maskIPv4 :: Int -> IPv4 maskIPv4 len = IP4 (masksIPv4 ! len) maskIPv6 :: Int -> IPv6 maskIPv6 len = IP6 (masksIPv6 ! len) masksWord32 :: [Word32] masksWord32 = take 33 $ iterate (`shift` 1) 0xffffffff masksIPv4 :: IntMap IPv4Addr masksIPv4 = fromList $ zip [32,31..0] masksWord32 masksIPv6 :: IntMap IPv6Addr masksIPv6 = fromList $ zip [128,127..0] ms where ms = m0 ++ m1 ++ m2 ++ m3 ++ m4 m0 = [(all1,all1,all1,all1)] m1 = map (\vmsk -> (all1,all1,all1,vmsk)) masks m2 = map (\vmsk -> (all1,all1,vmsk,all0)) masks m3 = map (\vmsk -> (all1,vmsk,all0,all0)) masks m4 = map (\vmsk -> (vmsk,all0,all0,all0)) masks masks = tail masksWord32 all1 = 0xffffffff all0 = 0x00000000