revision 0.2 -- 07/21/2001
From TCP/IP Illustrated, Vol 1, W. Richard Stevens, pp226
"The TCP header length field gives the length of the header in
32-bit words. This is required because the length of the
options field is variable. With a 4-bit field, TCP is limited
to a 60-byte header. Without options, however, the normal size
is 20 bytes."
So after massaging the 4-bit header length into a short, the options
length is determined by subtracting "5" -- five 32-bit words -- which
is the static 20 byte TCP header.
In the following unpack, we must then multiply the object length times
4 to grab the full 32-bit word ( 4 bytes ).
Previously, $self->{options} would get only a 1/4th of the option
data and the resulting $self->{data} payload variable would contain
several bytes of leading garbage (option) data.
So *THAT'S* why that sniffer never did quite work right. ;)
These are really great modules everyone. Hope this small but somewhat
obscure bug fix helps someone out there put these modules to good use.
Many thanks, Tim!
Benjamin R. Ginter
<bginter@asicommunications.com>