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@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to