Stability | provisional |
---|---|
Maintainer | michel.boucey@gmail.com |
Dealing with IPv6 address's text representation. Main features are validation against RFC 4291 and canonization in conformation with RFC 5952.
- type IPv6Addr = Text
- data IPv6AddrToken
- = SixteenBits Text
- | AllZeros
- | Colon
- | DoubleColon
- | IPv4Addr Text
- isIPv6Addr :: [IPv6AddrToken] -> Bool
- maybeIPv6Addr :: Text -> Maybe IPv6Addr
- maybeTokIPv6Addr :: Text -> Maybe [IPv6AddrToken]
- maybeExpIPv6Addr :: Text -> Maybe IPv6Addr
- getIPv6AddrOf :: String -> IO (Maybe IPv6Addr)
- maybeIPv6AddrTokens :: Text -> Maybe [IPv6AddrToken]
- macAddrToIPv6AddrTokens :: Text -> [IPv6AddrToken]
- getTokIPv6AddrOf :: String -> IO (Maybe [IPv6AddrToken])
- getTokMacAddrOf :: String -> IO (Maybe [IPv6AddrToken])
- sixteenBitsRand :: String -> IO IPv6AddrToken
- ipv4AddrToIPv6AddrTokens :: IPv6AddrToken -> [IPv6AddrToken]
- ipv6TokensToText :: [IPv6AddrToken] -> Text
Documentation
data IPv6AddrToken Source
SixteenBits Text | A four hexadecimal digits group representing a 16-Bit chunk |
AllZeros | An all zeros 16-Bit chunk |
Colon | A separator between 16-Bit chunks |
DoubleColon | A double-colon stands for a unique compression of many consecutive 16-Bit chunks |
IPv4Addr Text | An embedded IPv4 address as representation of the last 32-Bit |
Validating and canonizing an IPv6 Address
isIPv6Addr :: [IPv6AddrToken] -> BoolSource
Returns True if a list of IPv6AddrToken
constitutes a valid IPv6 Address.
maybeIPv6Addr :: Text -> Maybe IPv6AddrSource
Returns Just an IPv6Addr
, or Nothing.
maybeIPv6Addr "D045::00Da:0fA9:0:0:230.34.110.80" == Just "d045:0:da:fa9::e622:6e50"
maybeTokIPv6Addr :: Text -> Maybe [IPv6AddrToken]Source
This is the main function which returns Just the list of a tokenized IPv6 address's text representation validated against RFC 4291 and canonized (rewritten) in conformation with RFC 5952, or Nothing.
maybeExpIPv6Addr :: Text -> Maybe IPv6AddrSource
Returns Just an expanded IPv6 address, or Nothing.
getIPv6AddrOf :: String -> IO (Maybe IPv6Addr)Source
Given a valid name of a local network interface, e.g. getIPv6AddrOf "eth0", return Just the interface's IPv6 address.
Manipulating IPv6 address tokens
To IPv6 Address token(s)
maybeIPv6AddrTokens :: Text -> Maybe [IPv6AddrToken]Source
Returns Just a list of IPv6AddrToken
, or Nothing.
macAddrToIPv6AddrTokens :: Text -> [IPv6AddrToken]Source
Given a MAC address, returns the corresponding IPv6AddrToken
list, or an empty list.
macAddrToIPv6AddrTokens "fa:1d:58:cc:95:16" == [SixteenBits "fa1d",Colon,SixteenBits "58cc",Colon,SixteenBits "9516"]
getTokIPv6AddrOf :: String -> IO (Maybe [IPv6AddrToken])Source
Given a valid name of a local network interface, returns Just the list of tokens of the interface's IPv6 address.
getTokMacAddrOf :: String -> IO (Maybe [IPv6AddrToken])Source
Given the valid name of a local network interface, returns the corresponding list of IPv6AddrToken
of the interface's MAC Address.
sixteenBitsRand :: String -> IO IPv6AddrTokenSource
Returns a random SixteenBits
token. E.g. sixteenBitsRand "d" may produce SixteenBits
"d7b5".
ipv4AddrToIPv6AddrTokens :: IPv6AddrToken -> [IPv6AddrToken]Source
Rewrites Just an embedded IPv4Addr
into the corresponding list of pure IPv6Addr tokens, or returns an empty list.
ipv4AddrToIPv6AddrTokens (IPv4Addr "127.0.0.1") == [SixteenBits "7f0",Colon,SixteenBits "1"]
Back to Text
ipv6TokensToText :: [IPv6AddrToken] -> TextSource
Given an arbitrary list of IPv6AddrToken
, returns the corresponding Text
.