From a8d7ebb6fb147292e862921ce09bbe6b6b30ee51 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 27 May 2019 16:51:23 +0200 Subject: 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 --- include/osmocom/gsm/protocol/gsm_08_58.h | 4 ++++ src/gsm/rsl.c | 10 ++++++++++ 2 files changed, 14 insertions(+) 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); -- cgit v1.2.3