diff options
author | Alexander Chemeris <Alexander.Chemeris@gmail.com> | 2020-05-06 02:25:21 +0300 |
---|---|---|
committer | ipse <Alexander.Chemeris@gmail.com> | 2020-05-08 20:25:54 +0000 |
commit | 241f058aeb3b714239887d3961b0ddd6829f75c1 (patch) | |
tree | e6d9ca82d8bb395bbea443a0258d285970a13221 /src/osmo-bsc/chan_alloc.c | |
parent | b405e6e3152fd75c4c72adf2d143d2b1f14faa68 (diff) |
ctrs: Correctly count load total for dynamic timeslots.
From the CS perspective, there is no difference whether this is
a dynamic TS in NONE/PDCH mode or a static TCH in UNUSED mode since
BSC can switch into USED mode at any moment. So we should count
dynamic timeslots in the "total" count.
A bit of a challenge here is that GSM_PCHAN_TCH_F_TCH_H_PDCH
timeslots could be either switched to a single TCH/F or to
two TCH/H, so the total can't be calculated reliably beforehand.
In this code we assume TCH/F since this gives a lower total
count.
Change-Id: Iabd70e8adbf15eb3b7a7be597281ea99b352317b
Diffstat (limited to 'src/osmo-bsc/chan_alloc.c')
-rw-r--r-- | src/osmo-bsc/chan_alloc.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/osmo-bsc/chan_alloc.c b/src/osmo-bsc/chan_alloc.c index 669eb8edb..ac246e0e7 100644 --- a/src/osmo-bsc/chan_alloc.c +++ b/src/osmo-bsc/chan_alloc.c @@ -58,6 +58,28 @@ void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts) if (!nm_is_running(&ts->mo.nm_state)) continue; + /* Dynamic timeslots have to be counted separately + * when not in TCH/F or TCH/H mode because they don't + * have an lchan's allocated to them. At the same time, + * dynamic timeslots in NONE and PDCH modes are same + * as in UNUSED mode from the CS channel load perspective + * beause they can be switched to TCH mode at any moment. + * I.e. they are "available" for TCH. */ + if ((ts->pchan_on_init == GSM_PCHAN_TCH_F_TCH_H_PDCH || + ts->pchan_on_init == GSM_PCHAN_TCH_F_PDCH) && + (ts->pchan_is == GSM_PCHAN_NONE || + ts->pchan_is == GSM_PCHAN_PDCH)) { + pl->total++; + } + + /* Count allocated logical channels. + * Note: A GSM_PCHAN_TCH_F_TCH_H_PDCH can be switched + * to a single TCH/F or to two TCH/H. So when it's in + * the TCH/H mode, total number of available channels + * is 1 more than when it's in the TCH/F mode. + * I.e. "total" count will fluctuate depending on + * whether GSM_PCHAN_TCH_F_TCH_H_PDCH timeslot is + * in TCH/F or TCH/H (or in NONE/PDCH) mode. */ ts_for_each_lchan(lchan, ts) { /* don't even count CBCH slots in total */ if (lchan->type == GSM_LCHAN_CBCH) |