diff options
author | Guy Harris <guy@alum.mit.edu> | 2014-02-15 20:37:28 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2014-02-15 20:37:28 -0800 |
commit | f5e2e1a4a523dde5afbcd73ec3999c0093605d36 (patch) | |
tree | 17898a478270e4e1eaa53f60972206433534230c /extract.h | |
parent | 2c2d923201145ab633c8492126c2844b0e131730 (diff) | |
download | tcpdump-f5e2e1a4a523dde5afbcd73ec3999c0093605d36.tar.gz |
Add {40,48,56}-bit big-endian extract macros and use them for DCCP ACKs.
Add macros to, given an octet pointer, extract 40-bit, 48-bit, and
56-bit big-endian numbers from the location pointed to by that pointer,
and use them when extracting ACK numbers from DCCP packets. This fixes
problems on big-endian(!) machines.
Diffstat (limited to 'extract.h')
-rw-r--r-- | extract.h | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -165,6 +165,30 @@ EXTRACT_64BITS(const void *p) (u_int32_t)*((const u_int8_t *)(p) + 1) << 8 | \ (u_int32_t)*((const u_int8_t *)(p) + 2))) +#define EXTRACT_40BITS(p) \ + ((u_int64_t)((u_int64_t)*((const u_int8_t *)(p) + 0) << 32 | \ + (u_int64_t)*((const u_int8_t *)(p) + 1) << 24 | \ + (u_int64_t)*((const u_int8_t *)(p) + 2) << 16 | \ + (u_int64_t)*((const u_int8_t *)(p) + 3) << 8 | \ + (u_int64_t)*((const u_int8_t *)(p) + 4))) + +#define EXTRACT_48BITS(p) \ + ((u_int64_t)((u_int64_t)*((const u_int8_t *)(p) + 0) << 40 | \ + (u_int64_t)*((const u_int8_t *)(p) + 1) << 32 | \ + (u_int64_t)*((const u_int8_t *)(p) + 2) << 24 | \ + (u_int64_t)*((const u_int8_t *)(p) + 3) << 16 | \ + (u_int64_t)*((const u_int8_t *)(p) + 4) << 8 | \ + (u_int64_t)*((const u_int8_t *)(p) + 5))) + +#define EXTRACT_56BITS(p) \ + ((u_int64_t)((u_int64_t)*((const u_int8_t *)(p) + 0) << 48 | \ + (u_int64_t)*((const u_int8_t *)(p) + 1) << 40 | \ + (u_int64_t)*((const u_int8_t *)(p) + 2) << 32 | \ + (u_int64_t)*((const u_int8_t *)(p) + 3) << 24 | \ + (u_int64_t)*((const u_int8_t *)(p) + 4) << 16 | \ + (u_int64_t)*((const u_int8_t *)(p) + 5) << 8 | \ + (u_int64_t)*((const u_int8_t *)(p) + 6))) + /* * Macros to extract possibly-unaligned little-endian integral values. * XXX - do loads on little-endian machines that support unaligned loads? |