From 4cff7293534eab399b28a0414a388f18df4afe13 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 29 Jun 2021 15:33:13 +0200 Subject: hodec2: fix low rxlev tch/h<->tch/f oscillation Related: SYS#5365 Change-Id: Ibc3ac7ce6190b4e854fa42d5376a7038ddfbd6e5 --- src/osmo-bsc/handover_decision_2.c | 5 ++++- tests/handover/test_amr_tch_h_to_f_rxlev_oscillation.ho_vty | 11 +---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c index 97c8b6e0f..c9d11981a 100644 --- a/src/osmo-bsc/handover_decision_2.c +++ b/src/osmo-bsc/handover_decision_2.c @@ -1191,7 +1191,10 @@ static void collect_candidates_for_lchan(struct gsm_lchan *lchan, assignment = ho_get_hodec2_as_active(bts->ho); handover = ho_get_ho_active(bts->ho); - if (assignment) + /* See if re-assignment within the same cell can resolve congestion. + * But: when TCH/F has low rxlev, do not re-assign. If a low rxlev TCH/F were re-assigned to TCH/H, we would + * subsequently oscillate back to TCH/F due to low rxlev. So skip TCH/F with low rxlev. */ + if (assignment && !(lchan->type == GSM_LCHAN_TCH_F && is_low_rxlev(rxlev_current, bts->ho))) collect_assignment_candidate(lchan, clist, candidates, rxlev_current); if (handover) { diff --git a/tests/handover/test_amr_tch_h_to_f_rxlev_oscillation.ho_vty b/tests/handover/test_amr_tch_h_to_f_rxlev_oscillation.ho_vty index 076076b71..2ef927dde 100644 --- a/tests/handover/test_amr_tch_h_to_f_rxlev_oscillation.ho_vty +++ b/tests/handover/test_amr_tch_h_to_f_rxlev_oscillation.ho_vty @@ -17,13 +17,4 @@ expect-ts-use trx 0 0 states * TCH/F - - - - - * meas-rep lchan 0 0 1 0 rxlev 23 rxqual 1 ta 0 congestion-check -# FAIL: should stay on TCH/F because rxlev is low, do not oscillate between TCH/F and /H. -expect-as from lchan 0 0 1 0 to lchan 0 0 4 0 -expect-ts-use trx 0 0 states * - - - TCH/H- - - * -meas-rep lchan 0 0 4 0 rxlev 23 rxqual 1 ta 0 -expect-as from lchan 0 0 4 0 to lchan 0 0 1 0 -expect-ts-use trx 0 0 states * TCH/F - - - - - * -meas-rep lchan 0 0 1 0 rxlev 23 rxqual 1 ta 0 -congestion-check -expect-as from lchan 0 0 1 0 to lchan 0 0 4 0 -expect-ts-use trx 0 0 states * - - - TCH/H- - - * +expect-no-chan -- cgit v1.2.3