<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24887">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><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 immediately start using the new values<br>internally, and wrongly interpret interference levels. 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>Related: SYS#5313<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, 28 insertions(+), 21 deletions(-)<br><br></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 992c9bb..9ec9364 100644</span><br><span>--- a/include/osmocom/bsc/bts.h</span><br><span>+++ b/include/osmocom/bsc/bts.h</span><br><span>@@ -552,8 +552,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 42d77b3..9b6429d 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -1523,14 +1523,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 97dd615..1eeda3b 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -1276,22 +1276,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>@@ -5040,7 +5040,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>@@ -5062,11 +5062,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%);">-</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..eda74fd 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>@@ -116,6 +116,9 @@</span><br><span>              abis_nm_chg_adm_state(bts, NM_OC_BTS,</span><br><span>                                      bts->bts_nr, 0xff, 0xff,</span><br><span>                                  NM_STATE_UNLOCKED);</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Message containing BTS attributes, including the interference band bounds, was ACKed by the BTS.</span><br><span style="color: hsl(120, 100%, 40%);">+            * Store the sent bounds as the ones being used for logging and comparing intereference levels. */</span><br><span style="color: hsl(120, 100%, 40%);">+            bts->interf_meas_params_used = bts->interf_meas_params_cfg;</span><br><span>    }</span><br><span> </span><br><span>        if (allow_opstart && state->administrative == NM_STATE_UNLOCKED &&</span><br><span>diff --git a/tests/handover/handover_test.c b/tests/handover/handover_test.c</span><br><span>index 331726a..315fc10 100644</span><br><span>--- a/tests/handover/handover_test.c</span><br><span>+++ b/tests/handover/handover_test.c</span><br><span>@@ -1118,6 +1118,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: 6 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>