iproute-1.2.11: IP Routing Table

Safe Haskell | None

Data.IP.RouteTable

Contents

- Documentation
  - Routable class
  - Type for IP routing table
  - Functions to manipulate an IP routing table

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/

Synopsis

- class Addr a => Routable a where
  - intToTBit :: Int -> a
  - isZero :: a -> a -> Bool
- 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

class Addr a => Routable a where Source

A class to contain IPv4 and IPv6.

Methods

intToTBit :: Int -> aSource

The `intToTBit` function takes `Int` and returns an `Routable` address whose only n-th bit is set.

isZero :: a -> a -> Bool Source

The `isZero` function takes an `Routable` address and an test bit `Routable` address and returns `True` is the bit is unset, otherwise returns `False`.

Instances

Routable IPv6 |
Routable IPv4 |

## Type for IP routing table

data IPRTable k a 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

(Eq k, Eq a) => Eq (IPRTable k a) |
(Show k, Show a) => Show (IPRTable k a) |

## Functions to manipulate an IP routing table

empty :: Routable k => IPRTable k aSource

The `empty` function returns an empty IP routing table.

    >>> (empty :: IPRTable IPv4 ()) == fromList []
    True

insert :: Routable k => AddrRange k -> a -> IPRTable k a -> IPRTable k aSource

The `insert` function inserts a value with a key of `AddrRange` to `IPRTable` and returns a new `IPRTable`.

    >>> (insert ("127.0.0.1" :: AddrRange IPv4) () empty) == fromList [("127.0.0.1",())]
    True

delete :: Routable k => AddrRange k -> IPRTable k a -> IPRTable k aSource

The `delete` function deletes a value by a key of `AddrRange` from `IPRTable` and returns a new `IPRTable`.

    >>> delete "127.0.0.1" (insert "127.0.0.1" () empty) == (empty :: IPRTable IPv4 ())
    True

lookup :: Routable k => AddrRange k -> IPRTable k a -> Maybe aSource

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" rt
    Nothing
    >>> lookup "133.3.0.1" rt
    Nothing
    >>> lookup "133.4.0.0" rt
    Just 133.4.0.0/16
    >>> lookup "133.4.0.1" rt
    Just 133.4.0.0/16
    >>> lookup "133.5.16.0" rt
    Just 133.5.16.0/24
    >>> lookup "133.5.16.1" rt
    Just 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,())]

fromList :: Routable k => [(AddrRange k, a)] -> IPRTable k aSource

The `fromList` function creates a new IP routing table from a list of a pair of `IPrange` and value.

toList :: Routable k => IPRTable k a -> [(AddrRange k, a)]Source

The `toList` function creates a list of a pair of `AddrRange` and value from an IP routing table.