diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2021-10-25 12:52:49 +0200 |
---|---|---|
committer | pespin <pespin@sysmocom.de> | 2021-11-15 09:49:41 +0000 |
commit | c672ed8428bf3175ec6ea192555f9b256bd7cf01 (patch) | |
tree | 84f34c00991c996eb4c0bf09470edfb0240f1759 | |
parent | ff1bd7e361c4e2d612c22ea296aee5c5c1cf767a (diff) |
Properly handle dyn TS TCH with vamos after updating subslots_per_pchan
In the case of ts->pchan_from_config=GSM_PCHAN_OSMO_DYN,
ts->max_primary_lchans will be 8 due to SDCCH8 support, and we don't
want to set lchan->vamos.is_secondary=true for lchans at the end of the
array.
Related: OS#5278
Change-Id: If86af5fafe059d5e830c1f6d37034f7325d9a96c
-rw-r--r-- | src/osmo-bsc/timeslot_fsm.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/osmo-bsc/timeslot_fsm.c b/src/osmo-bsc/timeslot_fsm.c index 93fc38031..86fea3c8d 100644 --- a/src/osmo-bsc/timeslot_fsm.c +++ b/src/osmo-bsc/timeslot_fsm.c @@ -201,19 +201,24 @@ void ts_set_pchan_is(struct gsm_bts_trx_ts *ts, enum gsm_phys_chan_config pchan_ { int i; struct gsm_lchan *lchan; + uint8_t max_lchans_possible_vamos; + ts->pchan_is = pchan_is; ts->max_primary_lchans = pchan_subslots(ts->pchan_is); - LOG_TS(ts, LOGL_DEBUG, "pchan_is=%s max_primary_lchans=%d max_lchans_possible=%d\n", - gsm_pchan_name(ts->pchan_is), ts->max_primary_lchans, ts->max_lchans_possible); + max_lchans_possible_vamos = pchan_subslots_vamos(ts->pchan_is); + LOG_TS(ts, LOGL_DEBUG, "pchan_is=%s max_primary_lchans=%d max_lchans_possible=%d (%u VAMOS)\n", + gsm_pchan_name(ts->pchan_is), ts->max_primary_lchans, ts->max_lchans_possible, + max_lchans_possible_vamos); switch (ts->pchan_is) { case GSM_PCHAN_TCH_F: case GSM_PCHAN_TCH_H: for (i = 0; i < ts->max_lchans_possible; i++) { lchan = &ts->lchan[i]; - if (i < ts->max_primary_lchans) - lchan->vamos.is_secondary = false; - else + if (i >= ts->max_primary_lchans && + (i - ts->max_primary_lchans) < (int)max_lchans_possible_vamos) lchan->vamos.is_secondary = true; + else + lchan->vamos.is_secondary = false; lchan_fsm_update_id(lchan); } break; |