summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/gsm/protocol/gsm_08_58.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/include/osmocom/gsm/protocol/gsm_08_58.h b/include/osmocom/gsm/protocol/gsm_08_58.h
index e5ff4646..c7a7d8aa 100644
--- a/include/osmocom/gsm/protocol/gsm_08_58.h
+++ b/include/osmocom/gsm/protocol/gsm_08_58.h
@@ -25,10 +25,30 @@
#include <stdint.h>
+#include <osmocom/core/endian.h>
+
/*! \addtogroup rsl
* @{
* \file gsm_08_58.h */
+/* Link Identifier 9.3.2 */
+union abis_rsl_link_id {
+#if OSMO_IS_BIG_ENDIAN
+ uint8_t cbits:2,
+ na:1,
+ reserved:2;
+ sapi:3;
+#elif OSMO_IS_LITTLE_ENDIAN
+ uint8_t sapi:3,
+ reserved:2,
+ na:1,
+ cbits:2;
+#endif
+ uint8_t link_id;
+} __attribute__ ((packed));
+#define ABIS_RSL_LINK_ID_CBITS_FACCH_SDCCH 0x00
+#define ABIS_RSL_LINK_ID_CBITS_SACCH 0x01
+
/*! RSL common header */
struct abis_rsl_common_hdr {
uint8_t msg_discr; /*!< message discriminator (ABIS_RSL_MDISC_*) */
@@ -42,7 +62,10 @@ struct abis_rsl_rll_hdr {
uint8_t ie_chan; /*!< \ref RSL_IE_CHAN_NR (tag) */
uint8_t chan_nr; /*!< RSL channel number (value) */
uint8_t ie_link_id; /*!< \ref RSL_IE_LINK_IDENT (tag) */
- uint8_t link_id; /*!< RSL link identifier (value) */
+ union {
+ uint8_t link_id; /* API backward compat */
+ union abis_rsl_link_id link_id_fields; /*!< RSL link identifier (value) */
+ };
uint8_t data[0]; /*!< message payload data */
} __attribute__ ((packed));