Change in osmo-bsc[master]: RES IND: add test_resource_indication.ho_vty

neels gerrit-no-reply at lists.osmocom.org
Sun Jul 11 19:18:37 UTC 2021


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

Change subject: RES IND: add test_resource_indication.ho_vty
......................................................................

RES IND: add test_resource_indication.ho_vty

Show that osmo-bsc does not yet take Resource Indication's reported
interference levels into account. (An upcoming patch will change that.)

This test is not actually doing any handover, but it is using the
handover/*.ho_vty scripting that was intended for handover testing.
(Like test_dyn_ts_favor_half_used_tch_h_as_target.ho_vty does.)

Related: SYS#5313
Change-Id: I56ec61196a1e103f0b4caf18d25d8222bb82cf87
---
M tests/handover/handover_test.c
M tests/handover/handover_tests.ok
A tests/handover/test_resource_indication.ho_vty
3 files changed, 165 insertions(+), 0 deletions(-)

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



diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c
index 2ff9f31..8d316ca 100644
--- a/tests/handover/handover_test.c
+++ b/tests/handover/handover_test.c
@@ -1045,6 +1045,93 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(res_ind, res_ind_cmd,
+      "res-ind trx <0-255> <0-255> levels .LEVELS",
+      "Send Resource Indication for a specific TRX, indicating interference levels per lchan\n"
+      "Indicate a BTS and TRX\n" "BTS nr\n" "TRX nr\n"
+      "Indicate interference levels: each level is an index to bts->interf_meas_params.bounds_dbm[],"
+      " i.e. <0-5> or '-' to omit a report for this timeslot/lchan."
+      " Separate timeslots by spaces, for individual subslots directly concatenate values."
+      " If a timeslot has more subslots than provided, the last given value is repeated."
+      " For example: 'res-ind trx 0 0 levels - 1 23 -': on BTS 0 TRX 0, omit ratings for the entire first timeslot,"
+      " send level=1 for timeslot 1, and for timeslot 2 send level=2 for subslot 0 and level=3 for subslot 1.\n")
+{
+	int i;
+	uint8_t level;
+	struct gsm_bts *bts = bts_by_num_str(argv[0]);
+	struct gsm_bts_trx *trx = trx_by_num_str(bts, argv[1]);
+	struct msgb *msg = msgb_alloc_headroom(256, 64, "RES-IND");
+	struct abis_rsl_common_hdr *rslh;
+	uint8_t *res_info_len;
+	VTY_ECHO();
+
+	argv += 2;
+	argc -= 2;
+
+	rslh = (struct abis_rsl_common_hdr*)msgb_put(msg, sizeof(*rslh));
+	rslh->msg_discr = ABIS_RSL_MDISC_TRX;
+	rslh->msg_type = RSL_MT_RF_RES_IND;
+	msgb_put_u8(msg, RSL_IE_RESOURCE_INFO);
+	res_info_len = msg->tail;
+	msgb_put_u8(msg, 0);
+
+	level = 0xff;
+	for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
+		const char *ts_str;
+		struct gsm_lchan *lchan;
+		size_t given_subslots = 0;
+		struct gsm_bts_trx_ts *ts = &trx->ts[i];
+
+		if (i < argc) {
+			ts_str = argv[i];
+			given_subslots = strlen(ts_str);
+		}
+
+		ts_for_n_lchans(lchan, ts, ts->max_lchans_possible) {
+			int chan_nr;
+
+			if (lchan->nr < given_subslots) {
+				char subslot_val = ts_str[lchan->nr];
+				switch (subslot_val) {
+				case '-':
+					level = INTERF_BAND_UNKNOWN;
+					break;
+				case '0':
+				case '1':
+				case '2':
+				case '3':
+				case '4':
+				case '5':
+				case '6':
+				case '7':
+					level = subslot_val - '0';
+					break;
+				default:
+					OSMO_ASSERT(false);
+				}
+			}
+
+			if (level == INTERF_BAND_UNKNOWN)
+				continue;
+
+			chan_nr = gsm_lchan2chan_nr(lchan, true);
+			if (chan_nr < 0)
+				continue;
+
+			msgb_put_u8(msg, chan_nr);
+			msgb_put_u8(msg, level << 5);
+		}
+	}
+
+	*res_info_len = msg->tail - res_info_len - 1;
+
+	msg->dst = trx->rsl_link_primary;
+	msg->l2h = msg->data;
+	abis_rsl_rcvmsg(msg);
+
+	return CMD_SUCCESS;
+}
+
 DEFUN(congestion_check, congestion_check_cmd,
       "congestion-check",
       "Trigger a congestion check\n")
@@ -1313,6 +1400,7 @@
 	install_element(CONFIG_NODE, &meas_rep_cmd);
 	install_element(CONFIG_NODE, &meas_rep_repeat_cmd);
 	install_element(CONFIG_NODE, &meas_rep_repeat_bspower_cmd);
+	install_element(CONFIG_NODE, &res_ind_cmd);
 	install_element(CONFIG_NODE, &congestion_check_cmd);
 	install_element(CONFIG_NODE, &expect_no_chan_cmd);
 	install_element(CONFIG_NODE, &expect_chan_cmd);
diff --git a/tests/handover/handover_tests.ok b/tests/handover/handover_tests.ok
index b76c032..a03454d 100644
--- a/tests/handover/handover_tests.ok
+++ b/tests/handover/handover_tests.ok
@@ -47,6 +47,7 @@
 pass test_neighbor_full.ho_vty
 pass test_no_congestion.ho_vty
 pass test_penalty_timer.ho_vty
+pass test_resource_indication.ho_vty
 pass test_rxqual.ho_vty
 pass test_rxqual_vs_congestion.ho_vty
 pass test_stay_in_better_cell.ho_vty
diff --git a/tests/handover/test_resource_indication.ho_vty b/tests/handover/test_resource_indication.ho_vty
new file mode 100644
index 0000000..9dd9d38
--- /dev/null
+++ b/tests/handover/test_resource_indication.ho_vty
@@ -0,0 +1,76 @@
+# Test effects of interference levels reported in Resource Indication.
+# Note, this is not actually a handover test.
+
+create-bts trx-count 1 timeslots c+s4 TCH/F TCH/F TCH/F TCH/F TCH/F TCH/F PDCH
+
+# By default, the ordering is most-interference-first
+network
+ bts 0
+  channel allocator avoid-interference 1
+  interference-meas level-bounds -85 -91 -97 -103 -109 -115
+#                                 0   1   2    3    4    5
+
+res-ind trx 0 0 levels           -    1     2     3     4     3     2     -
+create-ms bts 0 TCH/F AMR
+# FAIL: interference is ignored
+expect-ts-use trx 0 0 states     *    TCH/F -     -     -     -     -     *
+
+# The ordering may also be configured reversed, still the lowest dBm value should win
+network
+ bts 0
+  interference-meas level-bounds -115 -109 -103 -97 -91 -85
+#                                  0    1    2   3   4   5
+
+res-ind trx 0 0 levels           -    5     4     2     -     3     4     -
+create-ms bts 0 TCH/F AMR
+# FAIL: interference is ignored
+expect-ts-use trx 0 0 states     *    TCH/F TCH/F -     -     -     -     *
+
+# Favor lchans that have an indicated interference level
+res-ind trx 0 0 levels           -    -     -     -     -     4     3     -
+create-ms bts 0 TCH/F AMR
+# FAIL: interference is ignored
+expect-ts-use trx 0 0 states     *    TCH/F TCH/F TCH/F -     -     -     *
+
+# For equal levels, pick the first
+res-ind trx 0 0 levels           -    2     2     -     -     2     -     -
+create-ms bts 0 TCH/F AMR
+# FAIL: interference is ignored
+expect-ts-use trx 0 0 states     *    TCH/F TCH/F TCH/F TCH/F -     -     *
+
+# Test clamping of indexes > 5
+res-ind trx 0 0 levels           -    -     6     -     -     4     -     -
+create-ms bts 0 TCH/F AMR
+# FAIL: interference is ignored
+expect-ts-use trx 0 0 states     *    TCH/F TCH/F TCH/F TCH/F TCH/F -     *
+
+# Also test for TCH/H
+create-bts trx-count 1 timeslots c+s4 TCH/H  TCH/H  TCH/H  TCH/H  TCH/H  TCH/H  PDCH
+network
+ bts 1
+  channel allocator avoid-interference 1
+  interference-meas level-bounds -115 -109 -103 -97 -91 -85
+#                                  0    1    2   3   4   5
+
+res-ind trx 1 0 levels           -    54     32     21     23     45     54     -
+create-ms bts 1 TCH/H AMR
+# FAIL: interference is ignored
+expect-ts-use trx 1 0 states     *    TCH/H- -      -      -      -      -      *
+
+# Favor lchans that have an indicated interference level
+res-ind trx 1 0 levels           -    -      -      4-     3-     -      -      -
+create-ms bts 1 TCH/H AMR
+# FAIL: interference is ignored
+expect-ts-use trx 1 0 states     *    TCH/HH -      -      -      -      -      *
+
+# For equal levels, pick the first
+res-ind trx 1 0 levels           -    -2     22     2-     -2     22     2-     -
+create-ms bts 1 TCH/H AMR
+# FAIL: interference is ignored
+expect-ts-use trx 1 0 states     *    TCH/HH TCH/H- -      -      -      -      *
+
+# Test clamping of indexes > 5
+res-ind trx 1 0 levels           -    7-     67     6-     -7     54     6-     -
+create-ms bts 1 TCH/H AMR
+# FAIL: interference is ignored
+expect-ts-use trx 1 0 states     *    TCH/HH TCH/HH -      -      -      -      *

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

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I56ec61196a1e103f0b4caf18d25d8222bb82cf87
Gerrit-Change-Number: 24884
Gerrit-PatchSet: 4
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: neels <nhofmeyr at sysmocom.de>
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/20210711/6ffd0ce3/attachment.htm>


More information about the gerrit-log mailing list