| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.IP.RouteTable
Contents
Description
IP routing table is a tree of IPRange
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.
For more information, see: http://www.mew.org/~kazu/proj/iproute/
- class Addr a => Routable a where
- data IPRTable k a
- empty :: Routable k => IPRTable k a
- insert :: Routable k => AddrRange k -> a -> IPRTable k a -> IPRTable k a
- delete :: Routable k => AddrRange k -> IPRTable k a -> IPRTable k a
- lookup :: Routable k => AddrRange k -> IPRTable k a -> Maybe a
- findMatch :: MonadPlus 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)]
Documentation
Routable class
Type for IP routing table
Functions to manipulate an IP routing table
empty :: Routable k => IPRTable k a Source
The empty function returns an empty IP routing table.
>>>(empty :: IPRTable IPv4 ()) == fromList []True
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
findMatch :: MonadPlus 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,())]