<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24884">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">RES IND: add test_resource_indication.ho_vty<br><br>Show that osmo-bsc does not yet take Resource Indication's reported<br>interference levels into account. (An upcoming patch will change that.)<br><br>This is a first: this test is not actually doing any handover, but it is<br>using the handover/*.ho_vty scripting that was intended for handover<br>testing.<br><br>Change-Id: I56ec61196a1e103f0b4caf18d25d8222bb82cf87<br>---<br>M tests/handover/handover_test.c<br>M tests/handover/handover_tests.ok<br>A tests/handover/test_resource_indication.ho_vty<br>3 files changed, 163 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/84/24884/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c</span><br><span>index 2ff9f31..8d316ca 100644</span><br><span>--- a/tests/handover/handover_test.c</span><br><span>+++ b/tests/handover/handover_test.c</span><br><span>@@ -1045,6 +1045,93 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(res_ind, res_ind_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "res-ind trx <0-255> <0-255> levels .LEVELS",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Send Resource Indication for a specific TRX, indicating interference levels per lchan\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Indicate a BTS and TRX\n" "BTS nr\n" "TRX nr\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Indicate interference levels: each level is an index to bts->interf_meas_params.bounds_dbm[],"</span><br><span style="color: hsl(120, 100%, 40%);">+ " i.e. <0-5> or '-' to omit a report for this timeslot/lchan."</span><br><span style="color: hsl(120, 100%, 40%);">+ " Separate timeslots by spaces, for individual subslots directly concatenate values."</span><br><span style="color: hsl(120, 100%, 40%);">+ " If a timeslot has more subslots than provided, the last given value is repeated."</span><br><span style="color: hsl(120, 100%, 40%);">+ " For example: 'res-ind trx 0 0 levels - 1 23 -': on BTS 0 TRX 0, omit ratings for the entire first timeslot,"</span><br><span style="color: hsl(120, 100%, 40%);">+ " send level=1 for timeslot 1, and for timeslot 2 send level=2 for subslot 0 and level=3 for subslot 1.\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ int i;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t level;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts *bts = bts_by_num_str(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts_trx *trx = trx_by_num_str(bts, argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msgb *msg = msgb_alloc_headroom(256, 64, "RES-IND");</span><br><span style="color: hsl(120, 100%, 40%);">+ struct abis_rsl_common_hdr *rslh;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t *res_info_len;</span><br><span style="color: hsl(120, 100%, 40%);">+ VTY_ECHO();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ argv += 2;</span><br><span style="color: hsl(120, 100%, 40%);">+ argc -= 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rslh = (struct abis_rsl_common_hdr*)msgb_put(msg, sizeof(*rslh));</span><br><span style="color: hsl(120, 100%, 40%);">+ rslh->msg_discr = ABIS_RSL_MDISC_TRX;</span><br><span style="color: hsl(120, 100%, 40%);">+ rslh->msg_type = RSL_MT_RF_RES_IND;</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_put_u8(msg, RSL_IE_RESOURCE_INFO);</span><br><span style="color: hsl(120, 100%, 40%);">+ res_info_len = msg->tail;</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_put_u8(msg, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ level = 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ const char *ts_str;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_lchan *lchan;</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t given_subslots = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_bts_trx_ts *ts = &trx->ts[i];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (i < argc) {</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_str = argv[i];</span><br><span style="color: hsl(120, 100%, 40%);">+ given_subslots = strlen(ts_str);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_for_n_lchans(lchan, ts, ts->max_lchans_possible) {</span><br><span style="color: hsl(120, 100%, 40%);">+ int chan_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lchan->nr < given_subslots) {</span><br><span style="color: hsl(120, 100%, 40%);">+ char subslot_val = ts_str[lchan->nr];</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (subslot_val) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case '-':</span><br><span style="color: hsl(120, 100%, 40%);">+ level = INTERF_BAND_UNKNOWN;</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ case '0':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '1':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '2':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '3':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '4':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '5':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '6':</span><br><span style="color: hsl(120, 100%, 40%);">+ case '7':</span><br><span style="color: hsl(120, 100%, 40%);">+ level = subslot_val - '0';</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ default:</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(false);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (level == INTERF_BAND_UNKNOWN)</span><br><span style="color: hsl(120, 100%, 40%);">+ continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ chan_nr = gsm_lchan2chan_nr(lchan, true);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (chan_nr < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_put_u8(msg, chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_put_u8(msg, level << 5);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ *res_info_len = msg->tail - res_info_len - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->dst = trx->rsl_link_primary;</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->l2h = msg->data;</span><br><span style="color: hsl(120, 100%, 40%);">+ abis_rsl_rcvmsg(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(congestion_check, congestion_check_cmd,</span><br><span> "congestion-check",</span><br><span> "Trigger a congestion check\n")</span><br><span>@@ -1313,6 +1400,7 @@</span><br><span> install_element(CONFIG_NODE, &meas_rep_cmd);</span><br><span> install_element(CONFIG_NODE, &meas_rep_repeat_cmd);</span><br><span> install_element(CONFIG_NODE, &meas_rep_repeat_bspower_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(CONFIG_NODE, &res_ind_cmd);</span><br><span> install_element(CONFIG_NODE, &congestion_check_cmd);</span><br><span> install_element(CONFIG_NODE, &expect_no_chan_cmd);</span><br><span> install_element(CONFIG_NODE, &expect_chan_cmd);</span><br><span>diff --git a/tests/handover/handover_tests.ok b/tests/handover/handover_tests.ok</span><br><span>index b76c032..a03454d 100644</span><br><span>--- a/tests/handover/handover_tests.ok</span><br><span>+++ b/tests/handover/handover_tests.ok</span><br><span>@@ -47,6 +47,7 @@</span><br><span> pass test_neighbor_full.ho_vty</span><br><span> pass test_no_congestion.ho_vty</span><br><span> pass test_penalty_timer.ho_vty</span><br><span style="color: hsl(120, 100%, 40%);">+pass test_resource_indication.ho_vty</span><br><span> pass test_rxqual.ho_vty</span><br><span> pass test_rxqual_vs_congestion.ho_vty</span><br><span> pass test_stay_in_better_cell.ho_vty</span><br><span>diff --git a/tests/handover/test_resource_indication.ho_vty b/tests/handover/test_resource_indication.ho_vty</span><br><span>new file mode 100644</span><br><span>index 0000000..6e319c6</span><br><span>--- /dev/null</span><br><span>+++ b/tests/handover/test_resource_indication.ho_vty</span><br><span>@@ -0,0 +1,74 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# Test effects of interference levels reported in Resource Indication.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note, this is not actually a handover test.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+create-bts trx-count 1 timeslots c+s4 TCH/F TCH/F TCH/F TCH/F TCH/F TCH/F PDCH</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# By default, the ordering is most-interference-first</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+ interference-meas level-bounds -85 -91 -97 -103 -109 -115</span><br><span style="color: hsl(120, 100%, 40%);">+# 0 1 2 3 4 5</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 0 0 levels - 1 2 3 4 3 2 -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 0 TCH/F AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * TCH/F - - - - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The ordering may also be configured reversed, still the lowest dBm value should win</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+ interference-meas level-bounds -115 -109 -103 -97 -91 -85</span><br><span style="color: hsl(120, 100%, 40%);">+# 0 1 2 3 4 5</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 0 0 levels - 5 4 2 - 3 4 -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 0 TCH/F AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * TCH/F TCH/F - - - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Favor lchans that have an indicated interference level</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 0 0 levels - - - - - 4 3 -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 0 TCH/F AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F - - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# For equal levels, pick the first</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 0 0 levels - 2 2 - - 2 - -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 0 TCH/F AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/F - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Test clamping of indexes > 5</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 0 0 levels - - 6 - - 4 - -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 0 TCH/F AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/F TCH/F - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Also test for TCH/H</span><br><span style="color: hsl(120, 100%, 40%);">+create-bts trx-count 1 timeslots c+s4 TCH/H TCH/H TCH/H TCH/H TCH/H TCH/H PDCH</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+ interference-meas level-bounds -115 -109 -103 -97 -91 -85</span><br><span style="color: hsl(120, 100%, 40%);">+# 0 1 2 3 4 5</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 1 0 levels - 54 32 21 23 45 54 -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 1 TCH/H AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 1 0 states * TCH/H- - - - - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Favor lchans that have an indicated interference level</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 1 0 levels - - - 4- 3- - - -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 1 TCH/H AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 1 0 states * TCH/HH - - - - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# For equal levels, pick the first</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 1 0 levels - -2 22 2- -2 22 2- -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 1 TCH/H AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 1 0 states * TCH/HH TCH/H- - - - - *</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Test clamping of indexes > 5</span><br><span style="color: hsl(120, 100%, 40%);">+res-ind trx 1 0 levels - 7- 67 6- -7 54 6- -</span><br><span style="color: hsl(120, 100%, 40%);">+create-ms bts 1 TCH/H AMR</span><br><span style="color: hsl(120, 100%, 40%);">+# FAIL: interference is ignored</span><br><span style="color: hsl(120, 100%, 40%);">+expect-ts-use trx 1 0 states * TCH/HH TCH/HH - - - - *</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24884">change 24884</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/24884"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I56ec61196a1e103f0b4caf18d25d8222bb82cf87 </div>
<div style="display:none"> Gerrit-Change-Number: 24884 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>