hodec2: don't apply AFS bias to same-cell lchans

The AFS bias actually should not apply to local cell lchans, because it
makes no sense for intra-cell considerations:

- same-cell lchans obviously have identical rxlev;
- any nonzero AFS bias thus always raises the TCH/F above the TCH/H;
- for intra-cell reassignment, the power budget hysteresis is,
  naturally, not applied.

So, before this patch, setting AFS bias even to only 1 would
unconditionally move all (AMR) TCH/H lchans over to free TCH/F lchans in
the same cell.

Recent patch Id40d1cf8b58410c7d4eb87407fe8b8106e352438 implements
explicit upgrade from TCH/H to TCH/F *if* the TCH/H is experiencing low
rxqual or low rxlev, as a proper replacement for intra-cell AFS bias.

Related: SYS#5198 SYS#5365
Change-Id: I315f24123ae016887ab91666870ce252e096f90f
This commit is contained in:
Neels Hofmeyr 2021-06-08 00:37:58 +02:00 committed by neels
parent f274976df3
commit 56c91b09b1
2 changed files with 9 additions and 12 deletions

View File

@ -1295,9 +1295,10 @@ static int find_alternative_lchan(struct gsm_lchan *lchan, bool include_weaker_r
continue;
better = clist[i].target.rxlev - clist[i].current.rxlev;
/* Apply AFS bias? */
/* Apply AFS bias? Skip AFS bias for all intra-cell candidates. */
afs_bias = 0;
if (ahs && (clist[i].requirements & REQUIREMENT_B_TCHF))
if (clist[i].target.bts != bts
&& ahs && (clist[i].requirements & REQUIREMENT_B_TCHF))
afs_bias = ho_get_hodec2_afs_bias_rxlev(clist[i].target.bts->ho);
better += afs_bias;
if (better > best_better_db) {
@ -1328,9 +1329,10 @@ static int find_alternative_lchan(struct gsm_lchan *lchan, bool include_weaker_r
continue;
better = clist[i].target.rxlev - clist[i].current.rxlev;
/* Apply AFS bias? */
/* Apply AFS bias? Skip AFS bias for all intra-cell candidates. */
afs_bias = 0;
if (ahs && (clist[i].requirements & REQUIREMENT_C_TCHF))
if (clist[i].target.bts != bts
&& ahs && (clist[i].requirements & REQUIREMENT_C_TCHF))
afs_bias = ho_get_hodec2_afs_bias_rxlev(clist[i].target.bts->ho);
better += afs_bias;
if (better > best_better_db) {
@ -1365,11 +1367,11 @@ static int find_alternative_lchan(struct gsm_lchan *lchan, bool include_weaker_r
continue;
better = clist[i].target.rxlev - clist[i].current.rxlev;
/* Apply AFS bias?
/* Apply AFS bias? Skip AFS bias for all intra-cell candidates.
* (never to remote-BSS neighbors, since we will not change the lchan type for those.) */
afs_bias = 0;
if (ahs && (clist[i].requirements & REQUIREMENT_A_TCHF)
&& clist[i].target.bts)
&& clist[i].target.bts && clist[i].target.bts != bts)
afs_bias = ho_get_hodec2_afs_bias_rxlev(clist[i].target.bts->ho);
better += afs_bias;
if (better > best_better_db

View File

@ -10,9 +10,4 @@ create-bts trx-count 1 timeslots c+s4 TCH/F TCH/F TCH/F TCH/H TCH/H TCH/H PDCH
set-ts-use trx 0 0 states * - - - TCH/H- - - *
meas-rep lchan 0 0 4 0 rxlev 50 rxqual 1 ta 0
# The TCH/H should stay where it is, because its levels are fine.
#expect-no-chan
# FAIL: osmo-bsc applies AFS bias to the intra-cell move from TCH/H to TCH/F.
# but intra-cell re-assignment does not employ a bower budget hysteresis.
# So in the presence of afs-bias, all TCH/H *always* move over to TCH/F.
# That should only happen when rxlev or rxqual ratings are too low.
expect-as from lchan 0 0 4 0 to lchan 0 0 1 0
expect-no-chan