[Haskell-cafe] Possible bug in Data.IP (network-data package)

Mads Lindstrøm mads_lindstroem at yahoo.dk
Sat Aug 1 13:06:05 EDT 2009


The network-data (version 0.0.2) [1] contains the module Data.IP. This
modules encapsulates IPv4 headers. The Data.IP modules contains the type

data IPv4Header =
	IPv4Hdr { hdrLength		:: Int
		, version		:: Int
		, tos			:: Int
		, payloadLength		:: Int

The code to turn IPv4 packages into IPv4Heder looks like [2]:

instance Binary IPv4Header where
  put (IPv4Hdr ihl ver tos len id flags off ttl prot csum src dst) = do
	pW8 $ (ihl .&. 0xF) .|. (ver `shiftL` 4 .&. 0xF0)
	pW8 tos
	pW16 len
	pW16 id
	let offFlags = (off .&. 0x1FFF) .|. fromIntegral (fromEnum flags `shiftL` 13)
	pW16 offFlags
	pW8 ttl
	pW8 prot
	put csum
	put src
	put dst

That is, the payload length is the 16-31'th bit of the IPv4 header. This
field is according to [3] and [4] referred to as "total length" - not
"payload length". The total length include both the length of the data
and the header. When I read the term "payload length" I first thought it
referred to the length of the package excluding the header.

So I am right to see this as a bug in network-data ?


Mads Lindstrøm

[1] http://hackage.haskell.org/package/network-data


[3] http://tools.ietf.org/html/rfc791

[4] http://en.wikipedia.org/wiki/IPv4#Header
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090801/3b2e1207/attachment.bin

More information about the Haskell-Cafe mailing list