diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-02-14 17:17:28 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-02-14 19:27:16 +0100 |
commit | b2abbe8a9384e1a873f8cfb135569dbcc5061d41 (patch) | |
tree | b9c31c1f73ec078efd242dd32e91a1869114c9fd /openbsc/include | |
parent | 8fabf514efcfd2dc3ced496655f31ba9a53fea24 (diff) |
[sccp] Make the bitfields work on big endian machines too
* Use the endian.h to fogure out for which endianess we are
building and then use the bitfields in reverse order
Diffstat (limited to 'openbsc/include')
-rw-r--r-- | openbsc/include/sccp/sccp_types.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/openbsc/include/sccp/sccp_types.h b/openbsc/include/sccp/sccp_types.h index 9310a6bf0..42fda96ae 100644 --- a/openbsc/include/sccp/sccp_types.h +++ b/openbsc/include/sccp/sccp_types.h @@ -24,6 +24,8 @@ #ifndef SCCP_TYPES_H #define SCCP_TYPES_H +#include <endian.h> + /* Table 1/Q.713 - SCCP message types */ enum sccp_message_types { SCCP_MSG_TYPE_CR = 1, @@ -87,11 +89,19 @@ enum { }; struct sccp_called_party_address { +#if __BYTE_ORDER == __LITTLE_ENDIAN u_int8_t point_code_indicator : 1, ssn_indicator : 1, global_title_indicator : 4, routing_indicator : 1, reserved : 1; +#elif __BYTE_ORDER == __BIG_ENDIAN + u_int8_t reserved : 1, + routing_indicator : 1, + global_title_indicator : 4, + ssn_indicator : 1, + point_code_indicator : 1; +#endif u_int8_t data[0]; } __attribute__((packed)); @@ -100,8 +110,13 @@ struct sccp_called_party_address { /* Figure 6/Q.713 */ struct sccp_signalling_point_code { u_int8_t lsb; +#if __BYTE_ORDER == __LITTLE_ENDIAN u_int8_t msb : 6, reserved : 2; +#elif __BYTE_ORDER == __BIG_ENDIAN + u_int8_t reserved : 2, + msb : 6; +#endif } __attribute__((packed)); /* SSN == subsystem number */ @@ -137,8 +152,13 @@ enum { }; struct sccp_global_title { +#if __BYTE_ORDER == __LITTLE_ENDIAN u_int8_t nature_of_addr_ind : 7, odd_even : 1; +#elif __BYTE_ORDER == __BIG_ENDIAN + u_int8_t odd_even : 1, + nature_of_addr_ind : 7; +#endif u_int8_t data[0]; } __attribute__((packed)); |