aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-04-05 21:39:21 +0200
committerHarald Welte <laforge@gnumonks.org>2018-04-05 21:44:21 +0200
commit6496edd2e906a1e45c76aafa076cdab3bc82e202 (patch)
tree4ea3cc817fbd9d0e24b7d3cbcc761d14a9922adb
parent254326de3dd238d6a26989f141ff3c7eaf1da56a (diff)
fix activation of osmocom-style dynamic PDCH as TCH/F or TCH/H
in change-id Iebd2571726d1284a7431b3f9b23ad3185e832ed1 we introduced tighter validation on whether the requested channel number matches the underlying physical channel configuration. Unfortunately this broke activation of an osmocom-style dynamic PDCH as TCH/F or TCH/H rsl_lchan_lookup already permitted a chan_nr if the dynamic PDCH was already switched to the given TCH mode, or at least the related switching had already been initiated. However, in the case of the bug, the current type is NONE, which means that the compatibility check of rsl_lchan_lookup will fail Let's relax the checks of rsl_lchan_lookup() slightly to permit matching for "ts->dyn.pchan_is == GSM_PCHAN_NONE" cases. This fixes BTS_Tests.TC_dyn_osmo_pdch_tchh_act and BTS_Tests.TC_dyn_osmo_pdch_tchf_act Change-Id: I14ae4c4ed2aae0966e5cb5116cf024d6bd890237 Related: OS#3134
-rw-r--r--src/common/gsm_data_shared.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/common/gsm_data_shared.c b/src/common/gsm_data_shared.c
index 3fb31bf8..553c09bb 100644
--- a/src/common/gsm_data_shared.c
+++ b/src/common/gsm_data_shared.c
@@ -709,6 +709,7 @@ struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
ts->pchan != GSM_PCHAN_TCH_F_PDCH
&& !(ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH
&& (ts->dyn.pchan_is == GSM_PCHAN_TCH_F
+ || ts->dyn.pchan_is == GSM_PCHAN_NONE
|| ts->dyn.pchan_want == GSM_PCHAN_TCH_F)))
ok = false;
} else if ((cbits & 0x1e) == 0x02) {
@@ -716,6 +717,7 @@ struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
if (ts->pchan != GSM_PCHAN_TCH_H
&& !(ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH
&& (ts->dyn.pchan_is == GSM_PCHAN_TCH_H
+ || ts->dyn.pchan_is == GSM_PCHAN_NONE
|| ts->dyn.pchan_want == GSM_PCHAN_TCH_H)))
ok = false;
} else if ((cbits & 0x1c) == 0x04) {