On Jun 7, 2005, at 5:29 PM, Julian Elischer wrote:
I agree with your suggestion, but how can you have an ip_vhl of 0x42? Doesn't a valid IP packet need to have a header length of at least 5 (5 << 2 == 20 bytes)?

huh?
the first byte of an IP packet is not the length.. the first byte you see on a packet trace will be the 4 bit version followed by a 4 bit HEADER length, followed by 8 bits of TOS (type of Service) and 16 bits of total packet length.

Agreed, but note that I said "header length" above, too. The smallest possible IP packet, without any IP options set, has an IP header length of 20, yes?

http://www.ietf.org/rfc/rfc0791.txt, page 10, says:

" IHL:  4 bits

    Internet Header Length is the length of the internet header in 32
    bit words, and thus points to the beginning of the data.  Note that
    the minimum value for a correct header is 5."

...and from <netinet/ip.h>:

#define IPVERSION       4
/*
 * Structure of an internet header, naked of options.
 */
struct ip {
#ifdef _IP_VHL
u_char ip_vhl; /* version << 4 | header length >> 2 */
#else
#if BYTE_ORDER == LITTLE_ENDIAN
        u_int   ip_hl:4,                /* header length */
                ip_v:4;                 /* version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
        u_int   ip_v:4,                 /* version */
                ip_hl:4;                /* header length */
#endif
[ ... ]

#define IP_VHL_BORING           0x45

0x45 means ip_v == 4 (IPv4) and ip_hl == 5 (five 32-bit words, or 20 bytes >> 2).

(it's in big-endian format.. beware)

Sure.  Network wire order is always big endian.  :-)

--
-Chuck

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to