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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">change bs_power to bs_power_db<br><br>The RSL BS Power IE in measurement reports is encoded as dB / 2.<br>Instead of using this coding all over the code, converting to dB and<br>often printing confusing values in logging etc, store as plain dB.<br><br>The conversions should be at the points where a "weird" format is<br>defined: the RSL encoding needs divided-by-two, so apply it there. The<br>meas_vis is (now unfortunately) defined as div-two, and so on. But<br>internally we now just store the plain dB value and calculate with it<br>without duplicating the wire decoding step everywhere.<br><br>Rename to bs_power_db to clarify the unit of the stored value.<br><br>Change-Id: I229db1d6bcf532af95aff56b2ad18b5ed9d81616<br>---<br>M include/osmocom/bsc/gsm_data.h<br>M include/osmocom/bsc/meas_rep.h<br>M src/osmo-bsc/abis_rsl.c<br>M src/osmo-bsc/bsc_vty.c<br>M src/osmo-bsc/lchan_fsm.c<br>M src/osmo-bsc/meas_rep.c<br>M src/utils/meas_db.c<br>M src/utils/meas_json.c<br>8 files changed, 21 insertions(+), 18 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 1540864..2515d7e 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -686,7 +686,7 @@</span><br><span>        /* The logical channel type */</span><br><span>       enum gsm_chan_t type;</span><br><span>        /* Power levels for MS and BTS */</span><br><span style="color: hsl(0, 100%, 40%);">-       uint8_t bs_power;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t bs_power_db;</span><br><span>         uint8_t ms_power;</span><br><span>    /* Encryption information */</span><br><span>         struct gsm_encr encr;</span><br><span>diff --git a/include/osmocom/bsc/meas_rep.h b/include/osmocom/bsc/meas_rep.h</span><br><span>index b0c03f0..54e0519 100644</span><br><span>--- a/include/osmocom/bsc/meas_rep.h</span><br><span>+++ b/include/osmocom/bsc/meas_rep.h</span><br><span>@@ -38,7 +38,7 @@</span><br><span>       struct gsm_meas_rep_unidir ul;</span><br><span>       struct gsm_meas_rep_unidir dl;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      uint8_t bs_power;</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t bs_power_db;</span><br><span>         /* according to 3GPP TS 48.058 ยง MS Timing Offset [-63; 192] */</span><br><span>     int16_t ms_timing_offset;</span><br><span>    struct {</span><br><span>diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c</span><br><span>index 00bb5dc..8e64ce5 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -300,6 +300,7 @@</span><br><span>      struct abis_rsl_dchan_hdr *dh;</span><br><span>       struct msgb *msg;</span><br><span>    uint8_t chan_nr = gsm_lchan2chan_nr(lchan);</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t bs_power_enc;</span><br><span> </span><br><span>    db = abs(db);</span><br><span>        if (db > 30)</span><br><span>@@ -307,15 +308,15 @@</span><br><span> </span><br><span>  msg = rsl_msgb_alloc();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     lchan->bs_power = db/2;</span><br><span style="color: hsl(120, 100%, 40%);">+    bs_power_enc = db / 2;</span><br><span>       if (fpc)</span><br><span style="color: hsl(0, 100%, 40%);">-                lchan->bs_power |= 0x10;</span><br><span style="color: hsl(120, 100%, 40%);">+           bs_power_enc |= 0x10;</span><br><span> </span><br><span>    dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh));</span><br><span>       init_dchan_hdr(dh, RSL_MT_BS_POWER_CONTROL);</span><br><span>         dh->chan_nr = chan_nr;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   msgb_tv_put(msg, RSL_IE_BS_POWER, lchan->bs_power);</span><br><span style="color: hsl(120, 100%, 40%);">+        msgb_tv_put(msg, RSL_IE_BS_POWER, bs_power_enc);</span><br><span> </span><br><span>         /* BS Power Control Parameters (if supported by BTS model) */</span><br><span>        add_power_control_params(msg, RSL_IE_BS_POWER_PARAM, lchan);</span><br><span>@@ -579,7 +580,7 @@</span><br><span>   }</span><br><span> </span><br><span>        if (bts->bs_power_ctrl.mode != GSM_PWR_CTRL_MODE_NONE)</span><br><span style="color: hsl(0, 100%, 40%);">-               msgb_tv_put(msg, RSL_IE_BS_POWER, lchan->bs_power);</span><br><span style="color: hsl(120, 100%, 40%);">+                msgb_tv_put(msg, RSL_IE_BS_POWER, lchan->bs_power_db / 2);</span><br><span>        if (bts->ms_power_ctrl.mode != GSM_PWR_CTRL_MODE_NONE)</span><br><span>            msgb_tv_put(msg, RSL_IE_MS_POWER, lchan->ms_power);</span><br><span> </span><br><span>@@ -1044,7 +1045,7 @@</span><br><span>           DEBUGPC(DMEAS, "DTXd ");</span><br><span> </span><br><span>       print_meas_rep_uni(&mr->ul, "ul");</span><br><span style="color: hsl(0, 100%, 40%);">-     DEBUGPC(DMEAS, "BS_POWER=%d ", mr->bs_power);</span><br><span style="color: hsl(120, 100%, 40%);">+    DEBUGPC(DMEAS, "BS_POWER=%ddB ", mr->bs_power_db);</span><br><span> </span><br><span>  if (mr->flags & MEAS_REP_F_MS_TO)</span><br><span>             DEBUGPC(DMEAS, "MS_TO=%d ", mr->ms_timing_offset);</span><br><span>@@ -1099,6 +1100,7 @@</span><br><span>      uint8_t len;</span><br><span>         const uint8_t *val;</span><br><span>  int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint8_t bs_power_enc;</span><br><span> </span><br><span>    if (!lchan_may_receive_data(msg->lchan)) {</span><br><span>                LOG_LCHAN(msg->lchan, LOGL_DEBUG, "MEAS RES for inactive channel\n");</span><br><span>@@ -1132,7 +1134,8 @@</span><br><span>           mr->ul.sub.rx_qual = val[2] & 0x7;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   mr->bs_power = *TLVP_VAL(&tp, RSL_IE_BS_POWER);</span><br><span style="color: hsl(120, 100%, 40%);">+        bs_power_enc = *TLVP_VAL(&tp, RSL_IE_BS_POWER);</span><br><span style="color: hsl(120, 100%, 40%);">+   mr->bs_power_db = (bs_power_enc & 0x0f) * 2;</span><br><span> </span><br><span>      /* Optional Parts */</span><br><span>         if (TLVP_PRESENT(&tp, RSL_IE_MS_TIMING_OFFSET)) {</span><br><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index 1db284a..724a3b0 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -1640,7 +1640,7 @@</span><br><span>           VTY_NEWLINE);</span><br><span>        vty_out(vty, "  BS Power: %u dBm, MS Power: %u dBm%s",</span><br><span>             lchan->ts->trx->nominal_power - lchan->ts->trx->max_power_red</span><br><span style="color: hsl(0, 100%, 40%);">-         - lchan->bs_power*2,</span><br><span style="color: hsl(120, 100%, 40%);">+               - lchan->bs_power_db,</span><br><span>             ms_pwr_dbm(lchan->ts->trx->bts->band, lchan->ms_power),</span><br><span>               VTY_NEWLINE);</span><br><span>        vty_out(vty, "  Channel Mode / Codec: %s%s",</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 48cfbdf..17e0c89 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -614,18 +614,18 @@</span><br><span>  if (old_lchan && old_lchan->ts->trx->bts == bts) {</span><br><span>          ms_power_dbm = ms_pwr_dbm(bts->band, old_lchan->ms_power);</span><br><span>             lchan_update_ms_power_ctrl_level(lchan, ms_power_dbm >= 0 ? ms_power_dbm : bts->ms_max_power);</span><br><span style="color: hsl(0, 100%, 40%);">-            lchan->bs_power = old_lchan->bs_power;</span><br><span style="color: hsl(120, 100%, 40%);">+          lchan->bs_power_db = old_lchan->bs_power_db;</span><br><span>   } else {</span><br><span>             lchan_update_ms_power_ctrl_level(lchan, bts->ms_max_power);</span><br><span>               /* Upon last entering the UNUSED state, from lchan_reset():</span><br><span style="color: hsl(0, 100%, 40%);">-              * - bs_power is still zero, 0dB reduction, output power = Pn.</span><br><span style="color: hsl(120, 100%, 40%);">+                 * - bs_power_db is still zero, 0dB reduction, output power = Pn.</span><br><span>             * - TA is still zero, to be determined by RACH. */</span><br><span> </span><br><span>              /* Default BS Power reduction value (in 2 dB steps) */</span><br><span>               if (bts->bs_power_ctrl.mode == GSM_PWR_CTRL_MODE_DYN_BTS)</span><br><span style="color: hsl(0, 100%, 40%);">-                    lchan->bs_power = bts->bs_power_ctrl.bs_power_max_db / 2;</span><br><span style="color: hsl(120, 100%, 40%);">+                       lchan->bs_power_db = bts->bs_power_ctrl.bs_power_max_db;</span><br><span>               else</span><br><span style="color: hsl(0, 100%, 40%);">-                    lchan->bs_power = bts->bs_power_ctrl.bs_power_val_db / 2;</span><br><span style="color: hsl(120, 100%, 40%);">+                       lchan->bs_power_db = bts->bs_power_ctrl.bs_power_val_db;</span><br><span>       }</span><br><span> </span><br><span>        if (gsm48_chan_mode_to_non_vamos(info->ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>diff --git a/src/osmo-bsc/meas_rep.c b/src/osmo-bsc/meas_rep.c</span><br><span>index 9b2fca0..32c689d 100644</span><br><span>--- a/src/osmo-bsc/meas_rep.c</span><br><span>+++ b/src/osmo-bsc/meas_rep.c</span><br><span>@@ -32,14 +32,14 @@</span><br><span>                if (!(rep->flags & MEAS_REP_F_DL_VALID))</span><br><span>                      return -EINVAL;</span><br><span>              /* Add BS Power value to rxlev: improve the RXLEV value by the amount of power that the BTS is reducing</span><br><span style="color: hsl(0, 100%, 40%);">-          * transmission. Note that bs_power is coded as dB/2, a positive value indicating the amount of power reduction</span><br><span style="color: hsl(120, 100%, 40%);">+                * transmission. Note that bs_power is coded as dB, a positive value indicating the amount of power reduction</span><br><span>                 * on the downlink; rxlev is coded in dB, where a higher number means stronger signal. */</span><br><span style="color: hsl(0, 100%, 40%);">-               return rep->dl.full.rx_lev + (rep->bs_power * 2);</span><br><span style="color: hsl(120, 100%, 40%);">+               return rep->dl.full.rx_lev + rep->bs_power_db;</span><br><span>         case MEAS_REP_DL_RXLEV_SUB:</span><br><span>          if (!(rep->flags & MEAS_REP_F_DL_VALID))</span><br><span>                      return -EINVAL;</span><br><span>              /* Apply BS Power as explained above */</span><br><span style="color: hsl(0, 100%, 40%);">-         return rep->dl.sub.rx_lev + (rep->bs_power * 2);</span><br><span style="color: hsl(120, 100%, 40%);">+                return rep->dl.sub.rx_lev + rep->bs_power_db;</span><br><span>  case MEAS_REP_DL_RXQUAL_FULL:</span><br><span>                if (!(rep->flags & MEAS_REP_F_DL_VALID))</span><br><span>                      return -EINVAL;</span><br><span>diff --git a/src/utils/meas_db.c b/src/utils/meas_db.c</span><br><span>index 7233dcd..4fc2916 100644</span><br><span>--- a/src/utils/meas_db.c</span><br><span>+++ b/src/utils/meas_db.c</span><br><span>@@ -111,7 +111,7 @@</span><br><span> </span><br><span> </span><br><span>       SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 5, mr->nr));</span><br><span style="color: hsl(0, 100%, 40%);">-  SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 6, mr->bs_power));</span><br><span style="color: hsl(120, 100%, 40%);">+  SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 6, mr->bs_power_db / 2));</span><br><span> </span><br><span>      if (mr->flags & MEAS_REP_F_MS_TO)</span><br><span>             SCK_OK(st->db, sqlite3_bind_int(st->stmt_ins_mr, 7, mr->ms_timing_offset));</span><br><span>diff --git a/src/utils/meas_json.c b/src/utils/meas_json.c</span><br><span>index b44a300..82b1e57 100644</span><br><span>--- a/src/utils/meas_json.c</span><br><span>+++ b/src/utils/meas_json.c</span><br><span>@@ -62,7 +62,7 @@</span><br><span>    printf(", \"UL_MEAS\":{");</span><br><span>       print_meas_rep_uni_json(&mr->ul);</span><br><span>     printf("}");</span><br><span style="color: hsl(0, 100%, 40%);">-  printf(", \"BS_POWER\":%d", mr->bs_power);</span><br><span style="color: hsl(120, 100%, 40%);">+     printf(", \"BS_POWER\":%d", mr->bs_power_db / 2);</span><br><span>     if (mr->flags & MEAS_REP_F_MS_TO)</span><br><span>             printf(", \"MS_TO\":%d", mr->ms_timing_offset);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24421">change 24421</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/+/24421"/><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: I229db1d6bcf532af95aff56b2ad18b5ed9d81616 </div>
<div style="display:none"> Gerrit-Change-Number: 24421 </div>
<div style="display:none"> Gerrit-PatchSet: 9 </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: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>