-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Library for network data structures and their serialization. -- -- This library includes definitions for common headers such as Ethernet, -- IPv4, IPv6, UDP, TCP, etc. This code is untested for any serious work -- - use at your own risk. @package network-data @version 0.5 module Data.Header -- | A class of network headers that assumes a checksum is present. class (Eq c, Num c, Serialize h) => L3Header h a c | h -> a, a -> h, h -> c where zeroChecksum h = setChecksum h 0 fillChecksum h = setChecksum h (computeChecksum h) valid h = computeChecksum h == getChecksum h getChecksum :: L3Header h a c => h -> c setChecksum :: L3Header h a c => h -> c -> h src :: L3Header h a c => h -> a dst :: L3Header h a c => h -> a zeroChecksum :: L3Header h a c => h -> h computeChecksum :: L3Header h a c => h -> c fillChecksum :: L3Header h a c => h -> h pseudoHeader :: L3Header h a c => h -> ByteString valid :: L3Header h a c => h -> Bool -- | A class of network addresses that assumes there is a -- broadcast concept. class Serialize a => L3Address a h | a -> h, h -> a localBroadcast :: L3Address a h => a -> a globalBroadcast :: L3Address a h => a module Data.IPv6 data IPv6 IPv6 :: ByteString -> IPv6 data IPv6Header instance Typeable IPv6 instance Typeable IPv6Ext instance Typeable IPv6Header instance Eq IPv6 instance Ord IPv6 instance Show IPv6 instance Read IPv6 instance Data IPv6 instance Eq IPv6Ext instance Ord IPv6Ext instance Show IPv6Ext instance Read IPv6Ext instance Data IPv6Ext instance Eq IPv6Header instance Ord IPv6Header instance Show IPv6Header instance Read IPv6Header instance Data IPv6Header instance Pretty IPv6 instance Serialize IPv6Ext instance Serialize IPv6Header instance Serialize IPv6 module Data.CSum csum16 :: ByteString -> CSum data CSum zeroCSum :: CSum instance Typeable CSum instance Eq CSum instance Ord CSum instance Show CSum instance Read CSum instance Bounded CSum instance Num CSum instance Data CSum instance Serialize CSum -- | The Data.IP library exports IPv4 address and header structures. -- -- FIXME: There is currently no support for options fields of the IP -- header. module Data.IP -- | For IPv4 addresses. data IPv4 IPv4 :: Word32 -> IPv4 -- | This IPv4 header structure lacks support for options. Ints are used -- for most integral data types and the binary instance hands the bit -- packing. -- -- No warning is provided if a value is trunkated when packed! data IPv4Header IPv4Hdr :: Int -> Int -> Int -> Int -> Int -> [IPv4Flag] -> Int -> Int -> Int -> CSum -> IPv4 -> IPv4 -> IPv4Header hdrLength :: IPv4Header -> Int version :: IPv4Header -> Int tos :: IPv4Header -> Int totalLength :: IPv4Header -> Int ipID :: IPv4Header -> Int flags :: IPv4Header -> [IPv4Flag] fragmentOffset :: IPv4Header -> Int ttl :: IPv4Header -> Int protocol :: IPv4Header -> Int checksum :: IPv4Header -> CSum source :: IPv4Header -> IPv4 destination :: IPv4Header -> IPv4 -- | Don't fragment, more fragment and reserved flags data IPv4Flag DF :: IPv4Flag MF :: IPv4Flag Res :: IPv4Flag type IP = Either IPv4 IPv6 type IPHeader = Either IPv4Header IPv6Header -- | A dummy header with zeroed fields except version, header length and -- TTL (255). dummyIPv4Header :: IPv4Header instance Typeable IPv4 instance Typeable IPv4Flag instance Typeable IPv4Header instance Eq IPv4 instance Ord IPv4 instance Show IPv4 instance Read IPv4 instance Data IPv4 instance Eq IPv4Flag instance Ord IPv4Flag instance Show IPv4Flag instance Read IPv4Flag instance Data IPv4Flag instance Eq IPv4Header instance Ord IPv4Header instance Show IPv4Header instance Read IPv4Header instance Data IPv4Header instance Pretty IPv4 instance L3Address IPv4 IPv4Header instance L3Header IPv4Header IPv4 CSum instance Serialize IPv4Header instance Enum [IPv4Flag] instance Serialize IPv4 module Data.TCP newtype TCPPort TCPPort :: Word16 -> TCPPort data TCPHeader TCPHdr :: TCPPort -> TCPPort -> SeqNumber -> AckNumber -> Int -> Int -> [TCPFlag] -> Int -> CSum -> Int -> TCPHeader srcPort :: TCPHeader -> TCPPort dstPort :: TCPHeader -> TCPPort seqNumber :: TCPHeader -> SeqNumber ackNumber :: TCPHeader -> AckNumber dataOffset :: TCPHeader -> Int res :: TCPHeader -> Int flags :: TCPHeader -> [TCPFlag] windowSize :: TCPHeader -> Int checksum :: TCPHeader -> CSum urgentPtr :: TCPHeader -> Int data TCPFlag FIN :: TCPFlag SYN :: TCPFlag RST :: TCPFlag PSH :: TCPFlag ACK :: TCPFlag URG :: TCPFlag ECE :: TCPFlag CWR :: TCPFlag instance Typeable TCPPort instance Typeable SeqNumber instance Typeable AckNumber instance Typeable TCPFlag instance Typeable TCPHeader instance Eq TCPPort instance Ord TCPPort instance Show TCPPort instance Read TCPPort instance Num TCPPort instance Bounded TCPPort instance Data TCPPort instance Eq SeqNumber instance Ord SeqNumber instance Show SeqNumber instance Read SeqNumber instance Num SeqNumber instance Bounded SeqNumber instance Data SeqNumber instance Eq AckNumber instance Ord AckNumber instance Show AckNumber instance Read AckNumber instance Num AckNumber instance Bounded AckNumber instance Data AckNumber instance Eq TCPFlag instance Ord TCPFlag instance Show TCPFlag instance Read TCPFlag instance Enum TCPFlag instance Data TCPFlag instance Eq TCPHeader instance Ord TCPHeader instance Show TCPHeader instance Read TCPHeader instance Data TCPHeader instance Serialize TCPHeader instance Enum [TCPFlag] instance Serialize AckNumber instance Serialize SeqNumber instance Serialize TCPPort module Data.UDP newtype UDPPort UDPPort :: Word16 -> UDPPort data UDPHeader UDPHdr :: UDPPort -> UDPPort -> Int -> CSum -> UDPHeader srcPort :: UDPHeader -> UDPPort dstPort :: UDPHeader -> UDPPort payloadLength :: UDPHeader -> Int checksum :: UDPHeader -> CSum instance Typeable UDPPort instance Typeable UDPHeader instance Eq UDPPort instance Ord UDPPort instance Show UDPPort instance Read UDPPort instance Num UDPPort instance Bounded UDPPort instance Data UDPPort instance Eq UDPHeader instance Ord UDPHeader instance Show UDPHeader instance Read UDPHeader instance Data UDPHeader instance Serialize UDPHeader instance Serialize UDPPort instance Pretty UDPPort -- | The Data.Ethernet module exports Ethernet header structures. module Data.Ethernet -- | An Ethernet hardware address or MAC address. data Ethernet Ethernet :: !Word8 -> !Word8 -> !Word8 -> !Word8 -> !Word8 -> !Word8 -> Ethernet data EthernetHeader EthernetHdr :: !Ethernet -> !Ethernet -> !(Maybe Word16) -> !Word16 -> EthernetHeader destination :: EthernetHeader -> !Ethernet source :: EthernetHeader -> !Ethernet vlanTag :: EthernetHeader -> !(Maybe Word16) etherType :: EthernetHeader -> !Word16 -- | Two bytes of ethertype if 802.1Q tag is present. vlanEthertype :: Word16 instance Typeable Ethernet instance Typeable EthernetHeader instance Eq Ethernet instance Ord Ethernet instance Show Ethernet instance Read Ethernet instance Data Ethernet instance Eq EthernetHeader instance Ord EthernetHeader instance Show EthernetHeader instance Read EthernetHeader instance Data EthernetHeader instance Pretty Ethernet instance Serialize EthernetHeader instance Serialize Ethernet