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]"