From 7b6d8b54cd7f985c2eda067684aa4d54b3e83e2b Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 19 Dec 2014 12:17:46 -0600 Subject: [PATCH] mpdu: Fix bitfield use on big endian --- src/mpdu.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mpdu.h b/src/mpdu.h index d6672cca..a4dfe2c7 100644 --- a/src/mpdu.h +++ b/src/mpdu.h @@ -80,17 +80,21 @@ struct mpdu_mgmt_header { unsigned char address_2[6]; unsigned char address_3[6]; #if defined(__LITTLE_ENDIAN_BITFIELD) - __le16 fragment_number:4; - __le16 sequence_number:12; + uint8_t fragment_number:4; + uint8_t sequence_number_low:4; #elif defined (__BIG_ENDIAN_BITFIELD) - __le16 sequence_number:12; - __le16 fragment_number:4; + uint8_t sequence_number_low:4; + uint8_t fragment_number:4; #else #error "Please fix " #endif + uint8_t sequence_number_high; __le32 ht_control; /* ToDo? */ } __attribute__ ((packed)); +#define MPDU_MGMT_SEQUENCE_NUMBER(v) \ + (((v).sequence_number_high << 4) + ((v).sequence_number_low)) + /* 802.11, Section 8.3.3.11 */ struct mpdu_authentication { __le16 algorithm;