Change in osmo-bsc[master]: hodec2: fix low rxqual tch/h<->tch/f oscillation

laforge gerrit-no-reply at lists.osmocom.org
Wed Jun 30 08:03:26 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/24797 )

Change subject: hodec2: fix low rxqual tch/h<->tch/f oscillation
......................................................................

hodec2: fix low rxqual tch/h<->tch/f oscillation

Related: SYS#5198
Change-Id: I96cd5a494e661ba3bb0b6d22d25a9968d2a6813c
---
M src/osmo-bsc/handover_decision_2.c
M tests/handover/test_amr_tch_h_to_f_rxqual_oscillation.ho_vty
2 files changed, 13 insertions(+), 11 deletions(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved



diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c
index 7a14f06..0966583 100644
--- a/src/osmo-bsc/handover_decision_2.c
+++ b/src/osmo-bsc/handover_decision_2.c
@@ -265,6 +265,15 @@
 		&& rxlev2dbm(rxlev_current) < ho_get_hodec2_min_rxlev(neigh_cfg);
 }
 
+static bool is_low_rxqual(int rxqual_current, struct handover_cfg *neigh_cfg)
+{
+	/* min_rxqual is actually a bit of a misnomer, low quality is a high number. So the "min" refers to the minimum
+	 * acceptable level of quality, and "min or better" here means "rxqual number must be SMALLER-or-equal than the
+	 * min-rxqual setting". */
+	return rxqual_current >= 0
+		&& rxqual_current > ho_get_hodec2_min_rxqual(neigh_cfg);
+}
+
 /* obtain averaged rxlev for given neighbor */
 static int neigh_meas_avg(struct neigh_meas_proc *nmp, int window)
 {
@@ -1203,7 +1212,9 @@
 	/* 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)))
+	if (assignment
+	    && !(lchan->type == GSM_LCHAN_TCH_F
+		 && (is_low_rxlev(rxlev_current, bts->ho) || is_low_rxqual(current_rxqual(lchan), bts->ho))))
 		collect_assignment_candidate(lchan, clist, candidates, rxlev_current);
 
 	if (handover) {
diff --git a/tests/handover/test_amr_tch_h_to_f_rxqual_oscillation.ho_vty b/tests/handover/test_amr_tch_h_to_f_rxqual_oscillation.ho_vty
index a98e917..e628f03 100644
--- a/tests/handover/test_amr_tch_h_to_f_rxqual_oscillation.ho_vty
+++ b/tests/handover/test_amr_tch_h_to_f_rxqual_oscillation.ho_vty
@@ -17,13 +17,4 @@
 
 meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0
 congestion-check
-# FAIL: should stay on TCH/F because rxqual 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 30 rxqual 6 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 30 rxqual 6 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

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/24797
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I96cd5a494e661ba3bb0b6d22d25a9968d2a6813c
Gerrit-Change-Number: 24797
Gerrit-PatchSet: 3
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210630/b339110e/attachment.htm>


More information about the gerrit-log mailing list