Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Jun 2008 16:56:46 +0100
From:      Rui Paulo <rpaulo@FreeBSD.org>
To:        marc.loerner@hob.de
Cc:        freebsd-net@freebsd.org
Subject:   Re: Probable Bug in tcp.h
Message-ID:  <20080605155646.GC6864@epsilon.local>
In-Reply-To: <200806051712.47048.marc.loerner@hob.de>
References:  <200806051712.47048.marc.loerner@hob.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jun 05, 2008 at 05:12:47PM +0200, =?ISO-8859-1?Q?Marc_L=F6rner_ wrote:
> Hello,
> I probably found a bug in declaration of "struct tcphdr"!
> 
> struct tcphdr {
> 	u_short	th_sport;		/* source port */
> 	u_short	th_dport;		/* destination port */
> 	tcp_seq	th_seq;			/* sequence number */
> 	tcp_seq	th_ack;			/* acknowledgement number */
> #if BYTE_ORDER == LITTLE_ENDIAN
> 	u_int	th_x2:4,		/* (unused) */						<---here
> 		th_off:4;		/* data offset */						<---
> #endif
> #if BYTE_ORDER == BIG_ENDIAN
> 	u_int	th_off:4,		/* data offset */
> 		th_x2:4;		/* (unused) */
> #endif
> 	u_char	th_flags;
> 
> First of all I have the problam of misalignment of th_off. Because in this way 
> always 4 bytes are read and the the bits of th_off are replaced. Then the 4 
> bytes are written back. 
> 
> But should (th_x and th_off) not only be 1 byte in whole -> only read and 
> write 1 byte?
> 
> I think if this was changed, my misalignment problems would go away!

I'm not sure what you mean.

Please supply more information, like:
1) Are you running on little endian? Or big endian?
2) th_x2 + th_off are 1 byte in size. What do you mean?
3) What is exactly the effect? I don't understand the "replaced", "written
back" etc. sentence.

Regards,
-- 
Rui Paulo



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080605155646.GC6864>