<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>