On Thursday 05 June 2008 17:56, Rui Paulo wrote:
> 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?

I'm on itanium-architecture, therefore I can run big and little endian. But 
for now it is little endian.

> 2) th_x2 + th_off are 1 byte in size. What do you mean?

th_x2 and th_off are created as a bitfield. But C-Standard says that bitfields 
are accessed as integers => 4-bytes

On itanium integers are read with ld4-command but the address of th_x2/th_off 
may not be aligned to 4-bytes => we get an unaligned reference fault.

If we'd change to 1 byte-accesses => I won't get any misaligned faults 
anymore.


Hope this makes my dilemma a bit clearer,
Marc
_______________________________________________
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