<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/22679">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Fix struct bitfields on big endian systems<br><br>Changes done by contrib/struct_endianess.py.<br><br>Change-Id: Ia9cb1ef2ba2bfff9ef713c7d1cf388931dae1c46<br>---<br>M include/osmocom/gprs/protocol/gsm_08_18.h<br>M include/osmocom/gsm/protocol/gsm_23_032.h<br>M src/gb/frame_relay.c<br>3 files changed, 88 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gprs/protocol/gsm_08_18.h b/include/osmocom/gprs/protocol/gsm_08_18.h</span><br><span>index c10c244..0d002b5 100644</span><br><span>--- a/include/osmocom/gprs/protocol/gsm_08_18.h</span><br><span>+++ b/include/osmocom/gprs/protocol/gsm_08_18.h</span><br><span>@@ -4,6 +4,7 @@</span><br><span> #pragma once</span><br><span> </span><br><span> #include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/endian.h></span><br><span> </span><br><span> /*! Fixed BVCI definitions (Section 5.4.1) */</span><br><span> #define BVCI_SIGNALLING       0x0000</span><br><span>diff --git a/include/osmocom/gsm/protocol/gsm_23_032.h b/include/osmocom/gsm/protocol/gsm_23_032.h</span><br><span>index 5be98a2..a4c0506 100644</span><br><span>--- a/include/osmocom/gsm/protocol/gsm_23_032.h</span><br><span>+++ b/include/osmocom/gsm/protocol/gsm_23_032.h</span><br><span>@@ -50,8 +50,13 @@</span><br><span> };</span><br><span> </span><br><span> struct gad_raw_head {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>   uint8_t spare:4,</span><br><span>             type:4;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t type:4, spare:4;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ell_point {</span><br><span>@@ -61,14 +66,23 @@</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ell_point_unc_circle {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>       struct gad_raw_head h; /*!< type = GAD_TYPE_ELL_POINT_UNC_CIRCLE */</span><br><span>       uint8_t lat[3];</span><br><span>      uint8_t lon[3];</span><br><span>      uint8_t unc:7,</span><br><span>               spare2:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gad_raw_head h;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t lat[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t lon[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t spare2:1, unc:7;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ell_point_unc_ellipse {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>     struct gad_raw_head h; /*!< type = GAD_TYPE_ELL_POINT_UNC_ELLIPSE */</span><br><span>      uint8_t lat[3];</span><br><span>      uint8_t lon[3];</span><br><span>@@ -79,12 +93,27 @@</span><br><span>        uint8_t major_ori;</span><br><span>   uint8_t confidence:7,</span><br><span>                spare3:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gad_raw_head h;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t lat[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t lon[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t spare1:1, unc_semi_major:7;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t spare2:1, unc_semi_minor:7;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t major_ori;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t spare3:1, confidence:7;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_polygon {</span><br><span>       struct {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>          uint8_t num_points:4;</span><br><span>                uint8_t type:4; /*!< type = GAD_TYPE_POLYGON */</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t type:4, num_points:4;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>        } h;</span><br><span>         struct {</span><br><span>             uint8_t lat[3];</span><br><span>@@ -100,6 +129,7 @@</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ell_point_alt_unc_ell {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>        struct gad_raw_head h; /*!< type = GAD_TYPE_ELL_POINT_ALT_UNC_ELL */</span><br><span>      uint8_t lat[3];</span><br><span>      uint8_t lon[3];</span><br><span>@@ -113,9 +143,22 @@</span><br><span>               spare3:1;</span><br><span>    uint8_t confidence:7,</span><br><span>                spare4:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gad_raw_head h;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t lat[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t lon[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t alt[2];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t spare1:1, unc_semi_major:7;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t spare2:1, unc_semi_minor:7;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t major_ori;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t spare3:1, unc_alt:7;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t spare4:1, confidence:7;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ell_arc {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>    struct gad_raw_head h; /*!< type = GAD_TYPE_ELL_ARC */</span><br><span>    uint8_t lat[3];</span><br><span>      uint8_t lon[3];</span><br><span>@@ -126,9 +169,21 @@</span><br><span>       uint8_t incl_angle;</span><br><span>  uint8_t confidence:7,</span><br><span>                spare2:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gad_raw_head h;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t lat[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t lon[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t inner_r[2];</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t spare1:1, unc_r:7;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t ofs_angle;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t incl_angle;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t spare2:1, confidence:7;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ha_ell_point_unc_ell {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>       struct gad_raw_head h; /*!< type = GAD_TYPE_HA_ELL_POINT_UNC_ELLIPSE */</span><br><span>   uint8_t lat[4];</span><br><span>      uint8_t lon[4];</span><br><span>@@ -138,9 +193,21 @@</span><br><span>       uint8_t major_ori;</span><br><span>   uint8_t confidence:7,</span><br><span>                spare1:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gad_raw_head h;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t lat[4];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t lon[4];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t alt[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t unc_semi_major;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t unc_semi_minor;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t major_ori;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t spare1:1, confidence:7;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> struct gad_raw_ha_ell_point_alt_unc_ell {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>   struct gad_raw_head h; /*!< type = GAD_TYPE_HA_ELL_POINT_ALT_UNC_ELL */</span><br><span>   uint8_t lat[4];</span><br><span>      uint8_t lon[4];</span><br><span>@@ -153,6 +220,19 @@</span><br><span>       uint8_t unc_alt;</span><br><span>     uint8_t v_confidence:7,</span><br><span>              spare2:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gad_raw_head h;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t lat[4];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t lon[4];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t alt[3];</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t unc_semi_major;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t unc_semi_minor;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t major_ori;</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t spare1:1, h_confidence:7;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t unc_alt;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t spare2:1, v_confidence:7;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__ ((packed));</span><br><span> </span><br><span> /*! GAD PDU in network-byte-order according to 3GPP TS 23.032 GAD: Universal Geographical Area Description. */</span><br><span>diff --git a/src/gb/frame_relay.c b/src/gb/frame_relay.c</span><br><span>index c54384e..84cd17f 100644</span><br><span>--- a/src/gb/frame_relay.c</span><br><span>+++ b/src/gb/frame_relay.c</span><br><span>@@ -123,6 +123,7 @@</span><br><span> </span><br><span> /* Value part of the Q.933 Annex A.3.3 IE */</span><br><span> struct q933_a_pvc_sts {</span><br><span style="color: hsl(120, 100%, 40%);">+#if OSMO_IS_LITTLE_ENDIAN</span><br><span>  uint8_t dlci_msb:6,</span><br><span>          spare:1,</span><br><span>             ext0:1;</span><br><span>@@ -136,6 +137,12 @@</span><br><span>               spare2:3,</span><br><span>            ext2:1;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#elif OSMO_IS_BIG_ENDIAN</span><br><span style="color: hsl(120, 100%, 40%);">+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t ext0:1, spare:1, dlci_msb:6;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t ext1:1, dlci_lsb:4, space1:3;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t ext2:1, spare2:3, new:1, delete:1, active:1, reserved:1;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> } __attribute__((packed));</span><br><span> </span><br><span> /* RX Message: 14 [ 00 01 03 08 00 75  95 01 01 00 03 02 01 00 ] */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/22679">change 22679</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/22679"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia9cb1ef2ba2bfff9ef713c7d1cf388931dae1c46 </div>
<div style="display:none"> Gerrit-Change-Number: 22679 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Assignee: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-CC: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>