Hi ML, I'm working on a mips target and I used qemu_mips target to simulate my target (that I hope to have in the next week...)
Following my activities I noticed that IP_t structure is no defined with attribute "packed". I noticed this issue because using a self-made toolchain (gcc4.2.4+binutils2.8+uclibc0.9.30) the compiler has aligned all bytes to 32bit boundary. This is not ok, because the packets IP_t can be non aligned (see the /net/net.c PingSend function, for an example). The dirty solution is to define the structure with the __attribute__((__packed__))... but, from my point of view, a better packet forging mechanism should be implemented into the net.c stack. I attached a trivial patch that solved the issue on my target. Any comments is welcome. best regards, luigi -- Luigi Mantellini R&D - Software Industrie Dial Face S.p.A. Via Canzo, 4 20068 Peschiera Borromeo (MI), Italy Tel.: +39 02 5167 2813 Fax: +39 02 5167 2459 Email: luigi.mantell...@idf-hit.com
diff --git a/include/net.h b/include/net.h index d2d394f..c04f84c 100644 --- a/include/net.h +++ b/include/net.h @@ -198,7 +198,7 @@ typedef struct { ushort udp_dst; /* UDP destination port */ ushort udp_len; /* Length of UDP packet */ ushort udp_xsum; /* Checksum */ -} IP_t; +} __attribute__((__packed__)) IP_t; #define IP_OFFS 0x1fff /* ip offset *= 8 */ #define IP_FLAGS 0xe000 /* first 3 bits */
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot