From 56c91b09b1a6dd48cbe85c5ebda37dbe248f4461 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 8 Jun 2021 00:37:58 +0200 Subject: 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 --- src/osmo-bsc/handover_decision_2.c | 14 ++++++++------ tests/handover/test_amr_tch_h_and_afs_bias.ho_vty | 7 +------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c index 9d4f1e996..d4ebc41cb 100644 --- a/src/osmo-bsc/handover_decision_2.c +++ b/src/osmo-bsc/handover_decision_2.c @@ -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 diff --git a/tests/handover/test_amr_tch_h_and_afs_bias.ho_vty b/tests/handover/test_amr_tch_h_and_afs_bias.ho_vty index 127727ffa..462cb0d59 100644 --- a/tests/handover/test_amr_tch_h_and_afs_bias.ho_vty +++ b/tests/handover/test_amr_tch_h_and_afs_bias.ho_vty @@ -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 -- cgit v1.2.3