iproute-0.1: test/IPv4Search.hs
module Main where
import Control.Exception
import Data.IP
import Data.IP.RouteTable
import Prelude hiding (lookup, catch)
import System.Environment
main :: IO ()
main = flip catch handler $ do
as <- getArgs
let file = as !! 0
ip = as !! 1
range = ip ++ "/32"
target = readIPv4Range range
rt <- loadRoutes file
let res = lookup target rt
putStrLn $ show res
where
handler :: ErrorCall -> IO ()
handler _ = help
loadRoutes :: FilePath -> IO (IPRTable IPv4 (IPRange IPv4))
loadRoutes file = do
cs <- readFile file
let ls = lines cs
rs = map readIPv4Range ls
kvs = zip rs rs -- value is IPRange itself in this test
radish = fromList kvs
return radish
readIPv4Range :: String -> IPRange IPv4
readIPv4Range = read
help :: IO ()
help = do
putStrLn "Usage:"
putStrLn " ipv4_search file IPv4"