aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2023-05-11 09:30:47 +0200
committerHarald Welte <laforge@osmocom.org>2023-05-11 16:14:50 +0200
commit7d7b0afae88bc4f385119eae415164eb5ac301df (patch)
tree62897be465ee396227b9ed354c5f339e9aa5c1fe
parentb32ed5373d21c7588369410f907eee8c99c48b0f (diff)
Store "Channel rate and type" from RSL Channel Mode IE in BTS
The RSL "Channel rate and type" field from the RSL Channel Mode IE in RSL_CHAN_ACTIV and RSL_MODE_MODIFY_REQ messages is the only place where the BSC differentiates between a normal TCH and the special TCH modes used in VGCS or VBS. Let's copy this field from the RSL message into the lchan state, so that BTS models can actually (in subsequent patches) reflect it when activating the L1. Change-Id: I6d531bf528bcb81f44d91336471a46ef790d7646 Related: OS#4851
-rw-r--r--include/osmo-bts/lchan.h2
-rw-r--r--src/common/rsl.c5
2 files changed, 7 insertions, 0 deletions
diff --git a/include/osmo-bts/lchan.h b/include/osmo-bts/lchan.h
index d89aa1fd..2f6a86d4 100644
--- a/include/osmo-bts/lchan.h
+++ b/include/osmo-bts/lchan.h
@@ -140,6 +140,8 @@ struct gsm_lchan {
uint8_t nr;
/* The logical channel type */
enum gsm_chan_t type;
+ /* RSL channel rate and type */
+ enum rsl_cmod_crt rsl_chan_rt;
/* RSL channel mode */
enum rsl_cmod_spd rsl_cmode;
/* If TCH, traffic channel mode */
diff --git a/src/common/rsl.c b/src/common/rsl.c
index 0fd98a91..e67cba96 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -113,6 +113,7 @@ static int rsl_handle_chan_mod_ie(struct gsm_lchan *lchan,
cm = (const struct rsl_ie_chan_mode *) TLVP_VAL(tp, RSL_IE_CHAN_MODE);
lchan->rsl_cmode = cm->spd_ind;
+ lchan->rsl_chan_rt = cm->chan_rt;
lchan->ts->trx->bts->dtxd = (cm->dtx_dtu & RSL_CMOD_DTXd) ? true : false;
/* Octet 5: Channel rate and type */
@@ -120,6 +121,10 @@ static int rsl_handle_chan_mod_ie(struct gsm_lchan *lchan,
case RSL_CMOD_CRT_SDCCH:
case RSL_CMOD_CRT_TCH_Bm:
case RSL_CMOD_CRT_TCH_Lm:
+ case RSL_CMOD_CRT_TCH_GROUP_Bm:
+ case RSL_CMOD_CRT_TCH_GROUP_Lm:
+ case RSL_CMOD_CRT_TCH_BCAST_Bm:
+ case RSL_CMOD_CRT_TCH_BCAST_Lm:
break;
case RSL_CMOD_CRT_OSMO_TCH_VAMOS_Bm:
case RSL_CMOD_CRT_OSMO_TCH_VAMOS_Lm: