diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-04-05 21:39:21 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-04-05 21:44:21 +0200 |
commit | 6496edd2e906a1e45c76aafa076cdab3bc82e202 (patch) | |
tree | 4ea3cc817fbd9d0e24b7d3cbcc761d14a9922adb /src | |
parent | 254326de3dd238d6a26989f141ff3c7eaf1da56a (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
Diffstat (limited to 'src')
-rw-r--r-- | src/common/gsm_data_shared.c | 2 |
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) { |