| Safe Haskell | Safe-Inferred | 
|---|---|
| Language | Haskell2010 | 
Data.IP.RouteTable.Internal
Description
IP routing table is a tree of AddrRange
   to search one of them on the longest
   match base. It is a kind of TRIE with one
   way branching removed. Both IPv4 and IPv6
   are supported.
Synopsis
- class Addr a => Routable a where
- intToTBitIPv4 :: Int -> IPv4
- intToTBitIPv6 :: Int -> IPv6
- intToTBitsWord32 :: [Word32]
- intToTBitsIPv4 :: IntMap IPv4Addr
- intToTBitsIPv6 :: IntMap IPv6Addr
- data IPRTable k a
- empty :: Routable k => IPRTable k a
- insert :: Routable k => AddrRange k -> a -> IPRTable k a -> IPRTable k a
- link :: Routable k => IPRTable k a -> IPRTable k a -> IPRTable k a
- glue :: Routable k => Int -> AddrRange k -> AddrRange k -> AddrRange k
- keyToTestBit :: Routable k => AddrRange k -> k
- isLeft :: Routable k => AddrRange k -> k -> Bool
- delete :: Routable k => AddrRange k -> IPRTable k a -> IPRTable k a
- node :: Routable k => AddrRange k -> k -> Maybe a -> IPRTable k a -> IPRTable k a -> IPRTable k a
- lookup :: Routable k => AddrRange k -> IPRTable k a -> Maybe a
- lookupKeyValue :: Routable k => AddrRange k -> IPRTable k a -> Maybe (AddrRange k, a)
- search :: Routable k => AddrRange k -> IPRTable k a -> Maybe (AddrRange k, a) -> Maybe (AddrRange k, a)
- lookupAll :: Routable k => AddrRange k -> IPRTable k a -> [(AddrRange k, a)]
- findMatch :: Alternative m => Routable k => AddrRange k -> IPRTable k a -> m (AddrRange k, a)
- fromList :: Routable k => [(AddrRange k, a)] -> IPRTable k a
- toList :: Routable k => IPRTable k a -> [(AddrRange k, a)]
- foldt :: (IPRTable k a -> b -> b) -> b -> IPRTable k a -> b
- foldlWithKey :: (b -> AddrRange k -> a -> b) -> b -> IPRTable k a -> b
- foldrWithKey :: (AddrRange k -> a -> b -> b) -> b -> IPRTable k a -> b
Documentation
>>>:set -XOverloadedStrings
class Addr a => Routable a where Source #
A class to contain IPv4 and IPv6.
intToTBitIPv4 :: Int -> IPv4 Source #
intToTBitIPv6 :: Int -> IPv6 Source #
intToTBitsWord32 :: [Word32] Source #
The Tree structure for IP routing table based on TRIE with
   one way branching removed. This is an abstract data type,
   so you cannot touch its inside. Please use insert or lookup, instead.
Instances
empty :: Routable k => IPRTable k a Source #
The empty function returns an empty IP routing table.
>>>(empty :: IPRTable IPv4 ()) == fromList []True
keyToTestBit :: Routable k => AddrRange k -> k Source #
node :: Routable k => AddrRange k -> k -> Maybe a -> IPRTable k a -> IPRTable k a -> IPRTable k a Source #
lookup :: Routable k => AddrRange k -> IPRTable k a -> Maybe a Source #
The lookup function looks up IPRTable with a key of AddrRange.
   If a routing information in IPRTable matches the key, its value
   is returned.
>>>let v4 = ["133.4.0.0/16","133.5.0.0/16","133.5.16.0/24","133.5.23.0/24"] :: [AddrRange IPv4]>>>let rt = fromList $ zip v4 v4>>>lookup "127.0.0.1" rtNothing>>>lookup "133.3.0.1" rtNothing>>>lookup "133.4.0.0" rtJust 133.4.0.0/16>>>lookup "133.4.0.1" rtJust 133.4.0.0/16>>>lookup "133.5.16.0" rtJust 133.5.16.0/24>>>lookup "133.5.16.1" rtJust 133.5.16.0/24
lookupKeyValue :: Routable k => AddrRange k -> IPRTable k a -> Maybe (AddrRange k, a) Source #
The lookupKeyValue function looks up IPRTable with a key of AddrRange.
   If a routing information in IPRTable matches the key, both key and value
   are returned.
>>>:set -XOverloadedStrings>>>let rt = fromList ([("192.168.0.0/24", 1), ("10.10.0.0/16", 2)] :: [(AddrRange IPv4, Int)])>>>lookupKeyValue "127.0.0.1" rtNothing>>>lookupKeyValue "192.168.0.1" rtJust (192.168.0.0/24,1)>>>lookupKeyValue "10.10.0.1" rtJust (10.10.0.0/16,2)
search :: Routable k => AddrRange k -> IPRTable k a -> Maybe (AddrRange k, a) -> Maybe (AddrRange k, a) Source #
lookupAll :: Routable k => AddrRange k -> IPRTable k a -> [(AddrRange k, a)] Source #
lookupAll is a version of lookup that returns all entries matching the
    given key, not just the longest match.
>>>:set -XOverloadedStrings>>>let rt = fromList ([("192.168.0.0/24", 1), ("10.10.0.0/16", 2), ("10.0.0.0/8", 3)] :: [(AddrRange IPv4, Int)])>>>lookupAll "127.0.0.1" rt[]>>>lookupAll "192.168.0.1" rt[(192.168.0.0/24,1)]>>>lookupAll "10.10.0.1" rt[(10.10.0.0/16,2),(10.0.0.0/8,3)]
findMatch :: Alternative m => Routable k => AddrRange k -> IPRTable k a -> m (AddrRange k, a) Source #
The findMatch function looks up IPRTable with a key of AddrRange.
   If the key matches routing informations in IPRTable, they are
   returned.
>>>let v4 = ["133.4.0.0/16","133.5.0.0/16","133.5.16.0/24","133.5.23.0/24"] :: [AddrRange IPv4]>>>let rt = fromList $ zip v4 $ repeat ()>>>findMatch "133.4.0.0/15" rt :: [(AddrRange IPv4,())][(133.4.0.0/16,()),(133.5.0.0/16,()),(133.5.16.0/24,()),(133.5.23.0/24,())]
fromList :: Routable k => [(AddrRange k, a)] -> IPRTable k a Source #
The fromList function creates a new IP routing table from
   a list of a pair of IPrange and value.
foldlWithKey :: (b -> AddrRange k -> a -> b) -> b -> IPRTable k a -> b Source #
O(n). Fold the keys and values in the IPRTable using the given left-associative binary operator. This function is equivalent to Data.Map.foldlWithKey with necessary to IPRTable changes. Since: 1.7.5
foldrWithKey :: (AddrRange k -> a -> b -> b) -> b -> IPRTable k a -> b Source #
O(n). Fold the keys and values in the IPRTable using the given right-associative binary operator. This function is equivalent to Data.Map.foldrWithKey with necessary to IPRTable changes. Since: 1.7.5