aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/osmo-bsc/handover_decision_2.c5
-rw-r--r--tests/handover/test_amr_tch_h_to_f_rxlev_oscillation.ho_vty11
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