summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2019-05-27 16:51:23 +0200
committerHarald Welte <laforge@gnumonks.org>2019-05-27 17:20:38 +0200
commita8d7ebb6fb147292e862921ce09bbe6b6b30ee51 (patch)
treee62e58b6601598dbc801aa5a87fdee588f099213
parent1d32b7fecd7802f19918c4617174140b0408dfb2 (diff)
rsl: Add osmocom-specific extensions to RSL channel numbers for CBCH
We don't really *need* it in libosmocore as such, but the lack of having all osmocom extensions listed here lead to using overlapping definitions: 0x18 was used for dynamic PDCH on the Abis side, but also for CBCH on the L1SAP side. Let's list them all here to increase visibility in case anyone wants to extend this further... Related: OS#4027 Change-Id: I93e557358cf1c1b622f77f906959df7ca6d5cb12
-rw-r--r--include/osmocom/gsm/protocol/gsm_08_58.h4
-rw-r--r--src/gsm/rsl.c10
2 files changed, 14 insertions, 0 deletions
diff --git a/include/osmocom/gsm/protocol/gsm_08_58.h b/include/osmocom/gsm/protocol/gsm_08_58.h
index 3ea4e638..1d4530d1 100644
--- a/include/osmocom/gsm/protocol/gsm_08_58.h
+++ b/include/osmocom/gsm/protocol/gsm_08_58.h
@@ -50,6 +50,8 @@ union abis_rsl_chan_nr {
#define ABIS_RSL_CHAN_NR_CBITS_RACH 0x11
#define ABIS_RSL_CHAN_NR_CBITS_PCH_AGCH 0x12
#define ABIS_RSL_CHAN_NR_CBITS_OSMO_PDCH 0x18 /*< non-standard, for dyn TS */
+#define ABIS_RSL_CHAN_NR_CBITS_OSMO_CBCH4 0x19 /*< non-standard, for CBCH/SDCCH4 */
+#define ABIS_RSL_CHAN_NR_CBITS_OSMO_CBCH8 0x1a /*< non-standard, for CBCH/SDCCH8 */
/* Link Identifier 9.3.2 */
union abis_rsl_link_id {
@@ -424,6 +426,8 @@ enum {
#define RSL_CHAN_RACH 0x88
#define RSL_CHAN_PCH_AGCH 0x90
#define RSL_CHAN_OSMO_PDCH 0xc0 /*< non-standard, for dyn TS */
+#define RSL_CHAN_OSMO_CBCH4 0xc8 /*< non-standard, for CBCH/SDCCH4 */
+#define RSL_CHAN_OSMO_CBCH8 0xd0 /*< non-standard, for CBCH/SDCCH8 */
/* Chapter 9.3.3 */
#define RSL_ACT_TYPE_INITIAL 0x00
diff --git a/src/gsm/rsl.c b/src/gsm/rsl.c
index 17774799..0409734e 100644
--- a/src/gsm/rsl.c
+++ b/src/gsm/rsl.c
@@ -209,6 +209,12 @@ int rsl_dec_chan_nr(uint8_t chan_nr, uint8_t *type, uint8_t *subch, uint8_t *tim
} else if ((chan_nr & 0xf8) == RSL_CHAN_OSMO_PDCH) {
*type = RSL_CHAN_OSMO_PDCH;
*subch = 0;
+ } else if ((chan_nr & 0xf8) == RSL_CHAN_OSMO_CBCH4) {
+ *type = RSL_CHAN_OSMO_CBCH4;
+ *subch = 0;
+ } else if ((chan_nr & 0xf8) == RSL_CHAN_OSMO_CBCH8) {
+ *type = RSL_CHAN_OSMO_CBCH8;
+ *subch = 0;
} else
return -EINVAL;
@@ -242,6 +248,10 @@ char *rsl_chan_nr_str_buf(char *buf, size_t buf_len, uint8_t chan_nr)
snprintf(buf, buf_len, "PCH/AGCH on TS%d", ts);
else if (cbits == 0x18)
snprintf(buf, buf_len, "PDCH on TS%d", ts);
+ else if (cbits == 0x19)
+ snprintf(buf, buf_len, "CBCH(SDCCH/4) on TS%d", ts);
+ else if (cbits == 0x1a)
+ snprintf(buf, buf_len, "CBCH(SDCCH/8) on TS%d", ts);
else
snprintf(buf, buf_len, "UNKNOWN on TS%d", ts);