<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24887">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">separate 'interference-meas level-bounds' cfg and used<br><br>The VTY defun already indicates BSC_VTY_ATTR_RESTART_ABIS_OML_LINK<br>correctly, but so far we would start using the new values internally,<br>even before the OML link is restarted. Fix that.<br><br>Have bts->interf_meas_params twice: interf_meas_params_cfg for the VTY<br>configured values, and interf_meas_params_used for the values that the<br>BTS actually knows about, after they were sent via OML.<br><br>In a running BSC, when changing the interference level boundaries on the<br>telnet VTY, the BTS is not immediately told about the change. That would<br>require a BTS restart. Hence store the cfg values separately in<br>interf_meas_params_cfg. For comparing/printing interference levels in a<br>running BTS, only employ the values that were actually sent via OML and<br>placed in interf_meas_params_used.<br><br>Change-Id: Iad8cf4151ff7f86dc0549158ed5d91d788d40b1f<br>---<br>M include/osmocom/bsc/bts.h<br>M src/osmo-bsc/abis_rsl.c<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/bts.c<br>M src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c<br>M src/osmo-bsc/nm_bts_fsm.c<br>M tests/handover/handover_test.c<br>7 files changed, 27 insertions(+), 24 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/87/24887/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h</span><br><span>index 2e88129..f618e2c 100644</span><br><span>--- a/include/osmocom/bsc/bts.h</span><br><span>+++ b/include/osmocom/bsc/bts.h</span><br><span>@@ -548,8 +548,10 @@</span><br><span>     /* Maximum BCCH carrier power reduction */</span><br><span>   uint8_t c0_max_power_red_db;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* Interference Measurement Parameters */</span><br><span style="color: hsl(0, 100%, 40%);">-       struct gsm_interf_meas_params interf_meas_params;</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Interference Measurement Parameters, as read from VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_interf_meas_params interf_meas_params_cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Interference Measurement Parameters, as last sent via OML */</span><br><span style="color: hsl(120, 100%, 40%);">+       struct gsm_interf_meas_params interf_meas_params_used;</span><br><span> </span><br><span>   /* We will ignore CHAN RQD with access delay greater than rach_max_delay */</span><br><span>  uint8_t rach_max_delay;</span><br><span>diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c</span><br><span>index 08e9411..b240cbc 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -1525,14 +1525,14 @@</span><br><span>           /* Store the actual received index */</span><br><span>                lchan->interf_band = interf_band;</span><br><span>                 /* Clamp the index to 5 before accessing array of interference band bounds */</span><br><span style="color: hsl(0, 100%, 40%);">-           interf_band = OSMO_MIN(interf_band, ARRAY_SIZE(bts->interf_meas_params.bounds_dbm)-1);</span><br><span style="color: hsl(120, 100%, 40%);">+             interf_band = OSMO_MIN(interf_band, ARRAY_SIZE(bts->interf_meas_params_used.bounds_dbm)-1);</span><br><span>               /* FIXME: when testing with ip.access nanoBTS, we observe a value range of 1..6. According to spec, it</span><br><span>                * seems like values 0..5 are intended: 3GPP TS 48.058 9.3.21 Resource Information says:</span><br><span>              * "The Interf Band field (bits 6-8) indicates in binary the interference level expressed as one of five</span><br><span>                 * possible interference level bands as defined by O&M."</span><br><span>             * and 3GPP TS 52.021 9.4.25 "Interference level Boundaries" (OML) defines values 0, X1, X2, X3, X4, X5.</span><br><span>            * If nanoBTS sends 6, the above code clamps it to 5, so that we lose one band in accuracy. */</span><br><span style="color: hsl(0, 100%, 40%);">-          lchan->interf_dbm = -((int16_t)bts->interf_meas_params.bounds_dbm[interf_band]);</span><br><span style="color: hsl(120, 100%, 40%);">+                lchan->interf_dbm = -((int16_t)bts->interf_meas_params_used.bounds_dbm[interf_band]);</span><br><span>  }</span><br><span> </span><br><span>        return 0;</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index 2b52b16..e0aa97f 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -1272,22 +1272,22 @@</span><br><span>         || bts->repeated_acch_policy.dl_facch_cmd)</span><br><span>            vty_out(vty, "  repeat rxqual %u%s", bts->repeated_acch_policy.rxqual, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (bts->interf_meas_params.avg_period != interf_meas_params_def.avg_period) {</span><br><span style="color: hsl(120, 100%, 40%);">+     if (bts->interf_meas_params_cfg.avg_period != interf_meas_params_def.avg_period) {</span><br><span>                vty_out(vty, "  interference-meas avg-period %u%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                   bts->interf_meas_params.avg_period,</span><br><span style="color: hsl(120, 100%, 40%);">+                        bts->interf_meas_params_cfg.avg_period,</span><br><span>                   VTY_NEWLINE);</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (memcmp(bts->interf_meas_params.bounds_dbm,</span><br><span style="color: hsl(120, 100%, 40%);">+     if (memcmp(bts->interf_meas_params_cfg.bounds_dbm,</span><br><span>                   interf_meas_params_def.bounds_dbm,</span><br><span>                   sizeof(interf_meas_params_def.bounds_dbm))) {</span><br><span>             vty_out(vty, "  interference-meas level-bounds "</span><br><span>                   "%d %d %d %d %d %d%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                        -1 * bts->interf_meas_params.bounds_dbm[0],</span><br><span style="color: hsl(0, 100%, 40%);">-                  -1 * bts->interf_meas_params.bounds_dbm[1],</span><br><span style="color: hsl(0, 100%, 40%);">-                  -1 * bts->interf_meas_params.bounds_dbm[2],</span><br><span style="color: hsl(0, 100%, 40%);">-                  -1 * bts->interf_meas_params.bounds_dbm[3],</span><br><span style="color: hsl(0, 100%, 40%);">-                  -1 * bts->interf_meas_params.bounds_dbm[4],</span><br><span style="color: hsl(0, 100%, 40%);">-                  -1 * bts->interf_meas_params.bounds_dbm[5],</span><br><span style="color: hsl(120, 100%, 40%);">+                        -1 * bts->interf_meas_params_cfg.bounds_dbm[0],</span><br><span style="color: hsl(120, 100%, 40%);">+                    -1 * bts->interf_meas_params_cfg.bounds_dbm[1],</span><br><span style="color: hsl(120, 100%, 40%);">+                    -1 * bts->interf_meas_params_cfg.bounds_dbm[2],</span><br><span style="color: hsl(120, 100%, 40%);">+                    -1 * bts->interf_meas_params_cfg.bounds_dbm[3],</span><br><span style="color: hsl(120, 100%, 40%);">+                    -1 * bts->interf_meas_params_cfg.bounds_dbm[4],</span><br><span style="color: hsl(120, 100%, 40%);">+                    -1 * bts->interf_meas_params_cfg.bounds_dbm[5],</span><br><span>                   VTY_NEWLINE);</span><br><span>        }</span><br><span> </span><br><span>@@ -4997,7 +4997,7 @@</span><br><span> {</span><br><span>   struct gsm_bts *bts = vty->index;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        bts->interf_meas_params.avg_period = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        bts->interf_meas_params_cfg.avg_period = atoi(argv[0]);</span><br><span> </span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -5019,13 +5019,10 @@</span><br><span>   struct gsm_bts *bts = vty->index;</span><br><span>         unsigned int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     for (i = 0; i < ARRAY_SIZE(bts->interf_meas_params.bounds_dbm); i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-            bts->interf_meas_params.bounds_dbm[i] = abs(atoi(argv[i]));</span><br><span style="color: hsl(120, 100%, 40%);">+        for (i = 0; i < ARRAY_SIZE(bts->interf_meas_params_cfg.bounds_dbm); i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->interf_meas_params_cfg.bounds_dbm[i] = abs(atoi(argv[i]));</span><br><span>           /* TODO: ensure ascending (or descending?) order */</span><br><span>  }</span><br><span style="color: hsl(0, 100%, 40%);">-       /* FIXME: when changed in a running BSC, this changes the dBm meanings of the reported interference levels</span><br><span style="color: hsl(0, 100%, 40%);">-       * without telling the BTS about it. So the interpretation of the interference level band numbers will then be</span><br><span style="color: hsl(0, 100%, 40%);">-   * wrong. */</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c</span><br><span>index cf3a6b8..d03f092 100644</span><br><span>--- a/src/osmo-bsc/bts.c</span><br><span>+++ b/src/osmo-bsc/bts.c</span><br><span>@@ -358,7 +358,7 @@</span><br><span>      bts->bs_power_ctrl.dir = GSM_PWR_CTRL_DIR_DL;</span><br><span> </span><br><span>         /* Interference Measurement Parameters (defaults) */</span><br><span style="color: hsl(0, 100%, 40%);">-    bts->interf_meas_params = interf_meas_params_def;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts->interf_meas_params_cfg = interf_meas_params_def;</span><br><span> </span><br><span>         bts->rach_max_delay = 63;</span><br><span> </span><br><span>diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c</span><br><span>index ed3a802..aac0ddf 100644</span><br><span>--- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c</span><br><span>+++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c</span><br><span>@@ -37,10 +37,10 @@</span><br><span> </span><br><span>  /* Interference level Boundaries: 0 .. X5 (3GPP TS 52.021, section 9.4.25) */</span><br><span>        msgb_tv_fixed_put(msgb, NM_ATT_INTERF_BOUND,</span><br><span style="color: hsl(0, 100%, 40%);">-                      sizeof(bts->interf_meas_params.bounds_dbm),</span><br><span style="color: hsl(0, 100%, 40%);">-                          &bts->interf_meas_params.bounds_dbm[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+                       sizeof(bts->interf_meas_params_cfg.bounds_dbm),</span><br><span style="color: hsl(120, 100%, 40%);">+                    &bts->interf_meas_params_cfg.bounds_dbm[0]);</span><br><span>        /* Intave: Interference Averaging period (3GPP TS 52.021, section 9.4.24) */</span><br><span style="color: hsl(0, 100%, 40%);">-    msgb_tv_put(msgb, NM_ATT_INTAVE_PARAM, bts->interf_meas_params.avg_period);</span><br><span style="color: hsl(120, 100%, 40%);">+        msgb_tv_put(msgb, NM_ATT_INTAVE_PARAM, bts->interf_meas_params_cfg.avg_period);</span><br><span> </span><br><span>       rlt = gsm_bts_get_radio_link_timeout(bts);</span><br><span>   if (rlt == -1) {</span><br><span>diff --git a/src/osmo-bsc/nm_bts_fsm.c b/src/osmo-bsc/nm_bts_fsm.c</span><br><span>index 329d911..e64d74c 100644</span><br><span>--- a/src/osmo-bsc/nm_bts_fsm.c</span><br><span>+++ b/src/osmo-bsc/nm_bts_fsm.c</span><br><span>@@ -106,7 +106,8 @@</span><br><span>          !bts->mo.set_attr_sent && !bts->mo.set_attr_ack_received) {</span><br><span>                bts->mo.set_attr_sent = true;</span><br><span>             msgb = nanobts_attr_bts_get(bts);</span><br><span style="color: hsl(0, 100%, 40%);">-               abis_nm_set_bts_attr(bts, msgb->data, msgb->len);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (abis_nm_set_bts_attr(bts, msgb->data, msgb->len) == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                      bts->interf_meas_params_used = bts->interf_meas_params_cfg;</span><br><span>            msgb_free(msgb);</span><br><span>     }</span><br><span> </span><br><span>diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c</span><br><span>index 8d316ca..ce9880b 100644</span><br><span>--- a/tests/handover/handover_test.c</span><br><span>+++ b/tests/handover/handover_test.c</span><br><span>@@ -1065,6 +1065,9 @@</span><br><span>   uint8_t *res_info_len;</span><br><span>       VTY_ECHO();</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* In this test suite, always act as if the interf_meas_params_cfg were already sent to the BTS via OML */</span><br><span style="color: hsl(120, 100%, 40%);">+    bts->interf_meas_params_used = bts->interf_meas_params_cfg;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  argv += 2;</span><br><span>   argc -= 2;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24887">change 24887</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/+/24887"/><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: Iad8cf4151ff7f86dc0549158ed5d91d788d40b1f </div>
<div style="display:none"> Gerrit-Change-Number: 24887 </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>