[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Probable Bug in tcp.h



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
_______________________________________________
freebsd-net_(_at_)_freebsd_(_dot_)_org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscribe_(_at_)_freebsd_(_dot_)_org"


Visit your host, monkey.org