h$9F6      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX None38piprouteThe abstract data type to express an IPv6 address. To create this, use   . Or use Y  "2001:DB8::1" :: , for example. Also,  "2001:DB8::1"/ can be used as literal with OverloadedStrings.)read "2001:db8:00:00:00:00:00:01" :: IPv6 2001:db8::1$read "2001:db8:11e:c00::101" :: IPv62001:db8:11e:c00::101/read "2001:db8:11e:c00:aa:bb:192.0.2.1" :: IPv62001:db8:11e:c00:aa:bb:c000:201"read "2001:db8::192.0.2.1" :: IPv62001:db8::c000:201 read "0::ffff:192.0.2.1" :: IPv6::ffff:192.0.2.1read "0::0:c000:201" :: IPv6 ::192.0.2.1read "::0.0.0.1" :: IPv6::1iprouteThe abstract data type to express an IPv4 address. To create this, use   . Or use Y  "192.0.2.1" :: , for example. Also,  "192.0.2.1"/ can be used as literal with OverloadedStrings.read "192.0.2.1" :: IPv4 192.0.2.1iprouteA unified IP data for  and 6. To create this, use the data constructors. Or use Y  "192.0.2.1" :: , for example. Also,  "192.0.2.1"/ can be used as literal with OverloadedStrings.;(read "192.0.2.1" :: IP) == IPv4 (read "192.0.2.1" :: IPv4)True(read "2001:db8:00:00:00:00:00:01" :: IP) == IPv6 (read "2001:db8:00:00:00:00:00:01" :: IPv6)TrueZiproute1Show an IPv4 address in the dot-decimal notation.[iprouteShow an IPv6 address in the most appropriate notation, based on recommended representation proposed by  "http://tools.ietf.org/html/rfc5952RFC 5952./The implementation is completely compatible with the current implementation of the  inet_ntop function in glibc./ iprouteThe   function returns the . address corresponding to the given list of \ octets. The function is strict in the four elements of the list. An error is returned if the list has a differnet length. The input elements are silently truncated to their 8 least-significant bits before they are combined to form the IPv4 address.toIPv4 [192,0,2,1] 192.0.2.1  iprouteThe   function constructs the & address corresponding to the given ] value. Unlike the  function, it is strict in the input value, which here is in host byte order.toIPv4w 0xc0000201 192.0.2.1 iprouteThe   function returns the ; address corresponding to the given list of eight 16-bit \s. The function is strict in the eight elements of the list. An error is returned if the list has a differnet length. The input elements are in host byte order and are silently truncated to their 16 least-signicant bits before they are combined to form the IPv6 address.!toIPv6 [0x2001,0xDB8,0,0,0,0,0,1] 2001:db8::1iprouteThe  function returns the IPv6 address corresponding to the given list of sixteen \ octets. The function is strict in the sixteen elements of the list. An error is returned if the list has a differnet length. The input elements are silently truncated to their 8 least-signicant bits before they are combined to form the IPv6 address.4toIPv6b [0x20,0x01,0xD,0xB8,0,0,0,0,0,0,0,0,0,0,0,1] 2001:db8::1 iprouteThe  function constructs the  address corresponding to the given four-tuple of host byte order ]+ values. This function differs from the  function only in the fact that it is strict in the elements of the tuple. toIPv6w (0x20010DB8,0x0,0x0,0x1) 2001:db8::1iprouteThe # function returns the list of four \% octets corresponding to the given  address.fromIPv4 (toIPv4 [192,0,2,1]) [192,0,2,1] iprouteThe  function returns a single ]( value corresponding to the given the  address. Unlike the  function, the returned value is strictly evaluated, and is not converted to network byte order.-fromIPv4w (toIPv4 [0xc0,0,2,1]) == 0xc0000201TrueiprouteThe  function returns a list eight \s in host byte order corresponding to the eight 16-bit fragments of the given IPv6 address.,fromIPv6 (toIPv6 [0x2001,0xDB8,0,0,0,0,0,1])[8193,3512,0,0,0,0,0,1]iprouteThe  function returns the 16 \ octets corresponding to the 16 bytes of the given IPv6 address.fromIPv6b (toIPv6b [0x20,0x01,0xD,0xB8,0,0,0,0,0,0,0,0,0,0,0,1])%[32,1,13,184,0,0,0,0,0,0,0,0,0,0,0,1] iprouteThe " function returns a four-tuple of ]8 values in host byte order corresponding to the given & address. This is identical to the  function, except that the elements of four-tuple are first strictly evaluated.fromIPv6w (toIPv6 [0x2001,0xDB8,0,0,0,0,0,1]) == (0x20010DB8, 0, 0, 1)TrueiprouteThe  function converts ^ to .iprouteThe  function converts  to ^.iprouteThe  function converts _ to .iprouteThe  function converts  to _.iproute-Convert IPv4 address to IPv4-embedded-in-IPv6iprouteConvert ` to . Since: 1.7.4.iprouteConvert  to `. Since: 1.7.8.aiprouteEquality over IP addresses. Correctly compare IPv4 and IPv4-embedded-in-IPv6 addresses.(read "2001:db8:00:00:00:00:00:01" :: IP) == (read "2001:db8:00:00:00:00:00:01" :: IP)True(read "2001:db8:00:00:00:00:00:01" :: IP) == (read "2001:db8:00:00:00:00:00:05" :: IP)False4(read "127.0.0.1" :: IP) == (read "127.0.0.1" :: IP)True3(read "127.0.0.1" :: IP) == (read "10.0.0.1" :: IP)False;(read "::ffff:127.0.0.1" :: IP) == (read "127.0.0.1" :: IP)True;(read "::ffff:127.0.0.1" :: IP) == (read "127.0.0.9" :: IP)False;(read "::ffff:127.0.0.1" :: IP) >= (read "127.0.0.1" :: IP)True;(read "::ffff:127.0.0.1" :: IP) <= (read "127.0.0.1" :: IP)True. bcZ[ defghijklmnopqNoneiprouter bytestring s for general  addresses.iprouter bytestring s for  addresses.iprouter bytestring s for  addresses.NonetuvwxyzNone38>XiprouteThe Addr range consists of an address, a contiguous mask, and mask length. The contiguous mask and the mask length are essentially same information but contained for pre calculation.To create this, use  makeAddrRange or Y "192.0.2.0/24" ::   . Also, "192.0.2.0/24"/ can be used as literal with OverloadedStrings.%read "192.0.2.1/24" :: AddrRange IPv4 192.0.2.0/246read "2001:db8:00:00:00:00:00:01/48" :: AddrRange IPv6 2001:db8::/48!iprouteThe !" function returns an address from ."iprouteThe " function returns a contiguous  mask from .#iprouteThe #% function returns a mask length from .$iprouteA unified data for   and  . To create this, use Y "192.0.2.0/24" :: $ . Also, "192.0.2.0/24"/ can be used as literal with OverloadedStrings.(read "192.0.2.1/24" :: IPRange) == IPv4Range (read "192.0.2.0/24" :: AddrRange IPv4)True(read "2001:db8:00:00:00:00:00:01/48" :: IPRange) == IPv6Range (read "2001:db8:00:00:00:00:00:01/48" :: AddrRange IPv6)True #!"$&%('{|}~None&)iproute'toIPv4 [127,0,2,1] `masked` intToMask 7 126.0.0.0*iprouteThe * function takes an )3 and a contiguous mask and returned a masked ).+iprouteThe + function takes an \ representing the number of bits to be set in the returned contiguous mask. When this integer is positive the bits will be starting from the MSB and from the LSB otherwise.intToMask 16 :: IPv4 255.255.0.0intToMask (-16) :: IPv4 0.0.255.255intToMask 16 :: IPv6ffff::intToMask (-16) :: IPv6::ffff,iprouteThe >:> operator takes two  . It returns  if the first  contains the second . Otherwise, it returns .makeAddrRange ("127.0.2.1" :: IPv4) 8 >:> makeAddrRange "127.0.2.1" 24TruemakeAddrRange ("127.0.2.1" :: IPv4) 24 >:> makeAddrRange "127.0.2.1" 8FalsemakeAddrRange ("2001:DB8::1" :: IPv6) 16 >:> makeAddrRange "2001:DB8::1" 32TruemakeAddrRange ("2001:DB8::1" :: IPv6) 32 >:> makeAddrRange "2001:DB8::1" 16False-iprouteThe - function take an ) address and an , and returns # if the range contains the address.("127.0.2.0" :: IPv4) `isMatchedTo` makeAddrRange "127.0.2.1" 24True("127.0.2.0" :: IPv4) `isMatchedTo` makeAddrRange "127.0.2.1" 32False("2001:DB8::1" :: IPv6) `isMatchedTo` makeAddrRange "2001:DB8::1" 32True("2001:DB8::" :: IPv6) `isMatchedTo` makeAddrRange "2001:DB8::1" 128False.iprouteThe . functions takes an ) address and a mask length. It creates a bit mask from the mask length and masks the ) address, then returns  made of them.$makeAddrRange (toIPv4 [127,0,2,1]) 8 127.0.0.0/83makeAddrRange (toIPv6 [0x2001,0xDB8,0,0,0,0,0,1]) 82000::/8/iproute1Convert IPv4 range to IPV4-embedded-in-IPV6 range0iprouteThe unmakeAddrRange functions take a 5 and returns the network address and a mask length./addrRangePair ("127.0.0.0/8" :: AddrRange IPv4) (127.0.0.0,8),addrRangePair ("2000::/8" :: AddrRange IPv6) (2000::,8))+*,-./0None&  "!#  "!#None') !"#$%&'()*+,-./0)   $%&'(!"#)*+.,-0/None861iprouteThe 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 = or D , instead.4iproute!A class to contain IPv4 and IPv6.5iprouteThe 5 function takes \ and returns an 4* address whose only n-th bit is set.6iprouteThe 6 function takes an 4 address and an test bit 4 address and returns . is the bit is unset, otherwise returns .<iprouteThe <, function returns an empty IP routing table.*(empty :: IPRTable IPv4 ()) == fromList []True=iprouteThe =( function inserts a value with a key of  to 1 and returns a new 1.(insert ("127.0.0.1" :: AddrRange IPv4) () empty) == fromList [("127.0.0.1",())]TrueBiprouteThe B& function deletes a value by a key of  from 1 and returns a new 1.delete "127.0.0.1" (insert "127.0.0.1" () empty) == (empty :: IPRTable IPv4 ())TrueDiprouteThe D function looks up 1 with a key of  . If a routing information in 1* 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 v4lookup "127.0.0.1" rtNothinglookup "133.3.0.1" rtNothinglookup "133.4.0.0" rtJust 133.4.0.0/16lookup "133.4.0.1" rtJust 133.4.0.0/16lookup "133.5.16.0" rtJust 133.5.16.0/24lookup "133.5.16.1" rtJust 133.5.16.0/24EiprouteThe E function looks up 1 with a key of  . If a routing information in 14 matches the key, both key and value are returned.:set -XOverloadedStringslet rt = fromList ([("192.168.0.0/24", 1), ("10.10.0.0/16", 2)] :: [(AddrRange IPv4, Int)])lookupKeyValue "127.0.0.1" rtNothinglookupKeyValue "192.168.0.1" rtJust (192.168.0.0/24,1)lookupKeyValue "10.10.0.1" rtJust (10.10.0.0/16,2)GiprouteG is a version of D that returns all entries matching the given key, not just the longest match.:set -XOverloadedStringslet 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)]HiprouteThe H function looks up 1 with a key of /. If the key matches routing informations in 1, 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 ()4findMatch "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,())]IiprouteThe I function creates a new IP routing table from a list of a pair of IPrange and value.JiprouteThe J& function creates a list of a pair of & and value from an IP routing table.LiprouteO(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.5MiprouteO(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.5Piproute Since: 1.7.5QiprouteNote that Semigroup and Monoid instances are right-biased. That is, if both arguments have the same key, the value from the right argument will be used. Since: 1.7.5123465789:;<=>?@ABCDEFGHIJKLM465789:;123<=>?@ABCDEFGHIJKLM None6x1456<=BDEGHIJLM4561<=BDEGHIJLM       !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg`hijkljkmjknopqrstuvwxyz{|}~efef%iproute-1.7.11-9tpcmEjTBCb1FcG9YesExNData.IP.InternalData.IPData.IP.BuilderData.IP.RouteTable.Internal Data.IP.Addr Data.IP.Mask Data.IP.Range Data.IP.OpData.IP.RouteTableIPv6IP6IPv4IP4IPv6AddrIPv4AddrIPipv4ipv6toIPv4toIPv4wtoIPv6toIPv6btoIPv6wfromIPv4 fromIPv4wfromIPv6 fromIPv6b fromIPv6wfromHostAddress toHostAddressfromHostAddress6toHostAddress6 ipv4ToIPv6 fromSockAddr toSockAddr ipBuilder ipv4Builder ipv6Builder AddrRangeaddrmaskmlenIPRange IPv4Range IPv6Range ipv4range ipv6rangeAddrmasked intToMask>:> isMatchedTo makeAddrRangeipv4RangeToIPv6 addrRangePairIPRTableNilNodeRoutable intToTBitisZero intToTBitIPv4 intToTBitIPv6intToTBitsWord32intToTBitsIPv4intToTBitsIPv6emptyinsertlinkglue keyToTestBitisLeftdeletenodelookuplookupKeyValuesearch lookupAll findMatchfromListtoListfoldt foldlWithKey foldrWithKey$fRoutableIPv6$fRoutableIPv4$fMonoidIPRTable$fSemigroupIPRTable$fTraversableIPRTable$fFoldableIPRTable$fFunctorIPRTable $fEqIPRTable$fGenericIPRTable$fGeneric1TYPEIPRTable$fShowIPRTablebase Text.ReadreadshowIPv4showIPv6ghc-prim GHC.TypesIntGHC.WordWord32&network-3.1.2.1-I09Sy6M5CNJIMsILXCwpAoNetwork.Socket.Types HostAddress HostAddress6SockAddr$fEqIP ip6ToInteger integerToIP6parseIP parseIPv4 parseIPv6digip4ip4' skipSpaceshexcolon2formatip6ip6' ip4Embedded fixByteOrderbytestring-0.10.10.0%Data.ByteString.Builder.Prim.Internal BoundedPrim Data.ByteString.Builder.InternalBuildermaskIPv4maskIPv6shift128 shiftL128 shiftR128 fromIP6Addr toIP6Addr parseIPRangeparseIPv4RangeparseIPv6Rangeip4range maskedIPv4ip6range maskedIPv6TrueFalse