diff options
author | guy <guy> | 2002-12-11 07:13:49 +0000 |
---|---|---|
committer | guy <guy> | 2002-12-11 07:13:49 +0000 |
commit | fcc82f451d3e51fdf636abbf927edb287bada0e0 (patch) | |
tree | 938119171c0d1eb45c66c2f576b95293f04f468b /appletalk.h | |
parent | 3a4254f5c662637cf669ff66b941240d7e456d6d (diff) | |
download | tcpdump-fcc82f451d3e51fdf636abbf927edb287bada0e0.tar.gz |
The "__attribute__((packed))" tag on structures causes some files not to
compile with Sun C, as "interface.h" isn't being included before the
structures are being declared.
Furthermore, in the files that Sun C *can* compile, it doesn't cause Sun
C to generate code that's safe with unaligned accesses, as
"__attribute__" is defined as a do-nothing macro with compilers that
don't support it.
Therefore, we get rid of that tag on the structures to which it was
added, and instead use "EXTRACT_16BIT()" and "EXTRACT_32BIT()" to fetch
16-bit and 32-bit big-endian quantities from packets. We also fix some
other references to multi-byte quantities to get rid of code that tries
to do unaligned loads on platforms that don't support them.
We also throw in a hack that makes those macros use
"__attribute__((packed))" on structures containing only one 16-bit or
32-bit integer to get the compiler to generate unaligned-safe code
rather than doing it by hand. (GCC on SPARC produces the same code that
doing it by hand does; I don't know if GCC on any other big-endian
strict-alignment processor generates better code for that case. On
little-endian processors, as "ntohs()" and "ntohl()" might be functions,
that might actually produce worse code.)
Fix some places to use "%u" rather than "%d" to print unsigned
quantities.
Diffstat (limited to 'appletalk.h')
-rw-r--r-- | appletalk.h | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/appletalk.h b/appletalk.h index 056be22f..552f3d13 100644 --- a/appletalk.h +++ b/appletalk.h @@ -20,14 +20,14 @@ * * AppleTalk protocol formats (courtesy Bill Croft of Stanford/SUMEX). * - * @(#) $Header: /tcpdump/master/tcpdump/appletalk.h,v 1.14 2002-11-09 17:19:17 itojun Exp $ (LBL) + * @(#) $Header: /tcpdump/master/tcpdump/appletalk.h,v 1.15 2002-12-11 07:13:49 guy Exp $ (LBL) */ struct LAP { u_int8_t dst; u_int8_t src; u_int8_t type; -} __attribute__((packed)); +}; #define lapShortDDP 1 /* short DDP type */ #define lapDDP 2 /* DDP type */ #define lapKLAP 'K' /* Kinetics KLAP type */ @@ -44,14 +44,14 @@ struct atDDP { u_int8_t dstSkt; u_int8_t srcSkt; u_int8_t type; -} __attribute__((packed)); +}; struct atShortDDP { u_int16_t length; u_int8_t dstSkt; u_int8_t srcSkt; u_int8_t type; -} __attribute__((packed)); +}; #define ddpMaxWKS 0x7F #define ddpMaxData 586 @@ -77,7 +77,7 @@ struct atATP { u_int8_t bitmap; u_int16_t transID; int32_t userData; -} __attribute__((packed)); +}; #define atpReqCode 0x40 #define atpRspCode 0x80 @@ -96,7 +96,7 @@ struct atATP { struct atEcho { u_int8_t echoFunction; u_int8_t *echoData; -} __attribute__((packed)); +}; #define echoSkt 4 /* the echoer socket */ #define echoSize 1 /* size of echo header */ @@ -109,14 +109,14 @@ struct atEcho { struct atNBP { u_int8_t control; u_int8_t id; -} __attribute__((packed)); +}; struct atNBPtuple { u_int16_t net; u_int8_t node; u_int8_t skt; u_int8_t enumerator; -} __attribute__((packed)); +}; #define nbpBrRq 0x10 #define nbpLkUp 0x20 @@ -143,7 +143,7 @@ struct atNBPtuple { struct zipHeader { u_int8_t command; u_int8_t netcount; -} __attribute__((packed)); +}; #define zipHeaderSize 2 #define zipQuery 1 |