<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/14686">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;">Clarify and refactor link quality (C/I) handling<br><br>The radio link quality is defined by C/I (Carrier-to-Interference<br>ratio), which is computed from the training sequence of each<br>received burst, by comparing the "ideal" training sequence with<br>the actual (received) one.<br><br>Link quality measurements are used by L1SAP to filter out "ghost"<br>Access Bursts, and by the link quality adaptation algorithms. One<br>can define minimum link quality values using the VTY interface.<br><br>On the VTY interface we expect integer C/I values in centiBels<br>(cB, 10e-2 B), while the internal structures are using float<br>values in deciBels (dB, 10e-1 B). Some PHYs (sysmo, octphy,<br>oc2g, and litecell15) expose C/I measurements in deciBels,<br>while on the L1SAP interface we finally send then in centiBels.<br><br>Let's avoid this confusion and stick to a single format, that<br>will be used by the internal logic of OsmoBTS - integer values<br>(int16_t) in centiBels. This will give us the range of:<br><br>  -32768  .. 32767  centiBels, or<br>  -3276.8 .. 3276.7 deciBels,<br><br>which is certainly sufficient.<br><br>Change-Id: If624d6fdc0270e6813af8700d95f1345903c8a01<br>---<br>M doc/manuals/vty/bts_vty_reference.xml<br>M include/osmo-bts/gsm_data_shared.h<br>M src/common/bts.c<br>M src/common/l1sap.c<br>M src/common/pcu_sock.c<br>M src/common/vty.c<br>M src/osmo-bts-litecell15/l1_if.c<br>M src/osmo-bts-oc2g/l1_if.c<br>M src/osmo-bts-sysmo/l1_if.c<br>9 files changed, 22 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/vty/bts_vty_reference.xml b/doc/manuals/vty/bts_vty_reference.xml</span><br><span>index b50ac1b..4697ee7 100644</span><br><span>--- a/doc/manuals/vty/bts_vty_reference.xml</span><br><span>+++ b/doc/manuals/vty/bts_vty_reference.xml</span><br><span>@@ -1613,14 +1613,14 @@</span><br><span>     </command> </span><br><span>     <command id='min-qual-rach &lt;-100-100&gt;'> </span><br><span>       <params> </span><br><span style="color: hsl(0, 100%, 40%);">-        <param name='min-qual-rach' doc='Set the minimum quality level of RACH burst to be accpeted' /> </span><br><span style="color: hsl(0, 100%, 40%);">-        <param name='&lt;-100-100&gt;' doc='C/I level in tenth of dB' /> </span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='min-qual-rach' doc='Set the minimum link quality level of Access Bursts to be accepted' /> </span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='&lt;-100-100&gt;' doc='C/I (Carrier-to-Interference) ratio in centiBels (10e-2 B or 10e-1 dB)' /> </span><br><span>       </params> </span><br><span>     </command> </span><br><span>     <command id='min-qual-norm &lt;-100-100&gt;'> </span><br><span>       <params> </span><br><span style="color: hsl(0, 100%, 40%);">-        <param name='min-qual-norm' doc='Set the minimum quality level of normal burst to be accpeted' /> </span><br><span style="color: hsl(0, 100%, 40%);">-        <param name='&lt;-100-100&gt;' doc='C/I level in tenth of dB' /> </span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='min-qual-norm' doc='Set the minimum link quality level of Normal Bursts to be accepted' /> </span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='&lt;-100-100&gt;' doc='C/I (Carrier-to-Interference) ratio in centiBels (10e-2 B or 10e-1 dB)' /> </span><br><span>       </params> </span><br><span>     </command> </span><br><span>     <command id='nominal-tx-power &lt;0-100&gt;'> </span><br><span>diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h</span><br><span>index a4e326a..dd2a14c 100644</span><br><span>--- a/include/osmo-bts/gsm_data_shared.h</span><br><span>+++ b/include/osmo-bts/gsm_data_shared.h</span><br><span>@@ -759,8 +759,8 @@</span><br><span>  int smscb_queue_max_len; /* maximum queue length */</span><br><span>  int smscb_queue_hyst; /* hysteresis for CBCH laod indications */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    float min_qual_rach;    /* minimum quality for RACH bursts */</span><br><span style="color: hsl(0, 100%, 40%);">-   float min_qual_norm;    /* minimum quality for normal daata */</span><br><span style="color: hsl(120, 100%, 40%);">+        int16_t min_qual_rach;  /* minimum link quality (in centiBels) for Access Bursts */</span><br><span style="color: hsl(120, 100%, 40%);">+   int16_t min_qual_norm;  /* minimum link quality (in centiBels) for Normal Bursts */</span><br><span>  uint16_t max_ber10k_rach;       /* Maximum permitted RACH BER in 0.01% */</span><br><span> </span><br><span>        struct {</span><br><span>diff --git a/src/common/bts.c b/src/common/bts.c</span><br><span>index f582ebd..5c415e8 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -51,8 +51,8 @@</span><br><span> #include <osmo-bts/dtx_dl_amr_fsm.h></span><br><span> #include <osmo-bts/cbch.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define MIN_QUAL_RACH    5.0f   /* at least  5 dB C/I */</span><br><span style="color: hsl(0, 100%, 40%);">-#define MIN_QUAL_NORM   -0.5f   /* at least -1 dB C/I */</span><br><span style="color: hsl(120, 100%, 40%);">+#define MIN_QUAL_RACH   50 /* minimum link quality (in centiBels) for Access Bursts */</span><br><span style="color: hsl(120, 100%, 40%);">+#define MIN_QUAL_NORM   -5 /* minimum link quality (in centiBels) for Normal Bursts */</span><br><span> </span><br><span> static void bts_update_agch_max_queue_length(struct gsm_bts *bts);</span><br><span> </span><br><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index b730b85..79af8e2 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -1218,7 +1218,7 @@</span><br><span>    * the content is not available due to decoding issues. Content not</span><br><span>   * available is expected as empty payload. We also check if quality is</span><br><span>        * good enough. */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (msg->len && tch_ind->lqual_cb / 10 >= bts->min_qual_norm) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (msg->len && tch_ind->lqual_cb >= bts->min_qual_norm) {</span><br><span>               /* hand msg to RTP code for transmission */</span><br><span>          if (lchan->abis_ip.rtp_socket)</span><br><span>                    osmo_rtp_send_frame_ext(lchan->abis_ip.rtp_socket,</span><br><span>diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c</span><br><span>index 1d9fa72..36cc6ed 100644</span><br><span>--- a/src/common/pcu_sock.c</span><br><span>+++ b/src/common/pcu_sock.c</span><br><span>@@ -330,8 +330,8 @@</span><br><span>         LOGP(DPCU, LOGL_DEBUG, "Sending data indication: sapi=%s arfcn=%d block=%d data=%s\n",</span><br><span>          sapi_string[sapi], arfcn, block_nr, osmo_hexdump(data, len));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  if (lqual / 10 < bts->min_qual_norm) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DPCU, LOGL_DEBUG, "Link quality %"PRId16" is below threshold %f, dropping packet\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lqual < bts->min_qual_norm) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DPCU, LOGL_DEBUG, "Link quality %"PRId16" is below threshold %d, dropping packet\n",</span><br><span>                        lqual, bts->min_qual_norm);</span><br><span>               return 0;</span><br><span>    }</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index f4fc181..e4f5a16 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -300,9 +300,9 @@</span><br><span>                 sapi_buf = osmo_str_tolower(get_value_string(gsmtap_sapi_names, GSMTAP_CHANNEL_ACCH));</span><br><span>               vty_out(vty, " gsmtap-sapi %s%s", sapi_buf, VTY_NEWLINE);</span><br><span>  }</span><br><span style="color: hsl(0, 100%, 40%);">-       vty_out(vty, " min-qual-rach %.0f%s", bts->min_qual_rach * 10.0f,</span><br><span style="color: hsl(120, 100%, 40%);">+        vty_out(vty, " min-qual-rach %d%s", bts->min_qual_rach,</span><br><span>                 VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-   vty_out(vty, " min-qual-norm %.0f%s", bts->min_qual_norm * 10.0f,</span><br><span style="color: hsl(120, 100%, 40%);">+        vty_out(vty, " min-qual-norm %d%s", bts->min_qual_norm,</span><br><span>                 VTY_NEWLINE);</span><br><span>        vty_out(vty, " max-ber10k-rach %u%s", bts->max_ber10k_rach,</span><br><span>             VTY_NEWLINE);</span><br><span>@@ -618,24 +618,24 @@</span><br><span> </span><br><span> DEFUN(cfg_bts_min_qual_rach, cfg_bts_min_qual_rach_cmd,</span><br><span>         "min-qual-rach <-100-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-     "Set the minimum quality level of RACH burst to be accpeted\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        "C/I level in tenth of dB\n")</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the minimum link quality level of Access Bursts to be accepted\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "C/I (Carrier-to-Interference) ratio in centiBels (10e-2 B or 10e-1 dB)\n")</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->min_qual_rach = strtof(argv[0], NULL) / 10.0f;</span><br><span style="color: hsl(120, 100%, 40%);">+        bts->min_qual_rach = atoi(argv[0]);</span><br><span> </span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_min_qual_norm, cfg_bts_min_qual_norm_cmd,</span><br><span>      "min-qual-norm <-100-100>",</span><br><span style="color: hsl(0, 100%, 40%);">-     "Set the minimum quality level of normal burst to be accpeted\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      "C/I level in tenth of dB\n")</span><br><span style="color: hsl(120, 100%, 40%);">+       "Set the minimum link quality level of Normal Bursts to be accepted\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "C/I (Carrier-to-Interference) ratio in centiBels (10e-2 B or 10e-1 dB)\n")</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->min_qual_norm = strtof(argv[0], NULL) / 10.0f;</span><br><span style="color: hsl(120, 100%, 40%);">+        bts->min_qual_norm = atoi(argv[0]);</span><br><span> </span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span>diff --git a/src/osmo-bts-litecell15/l1_if.c b/src/osmo-bts-litecell15/l1_if.c</span><br><span>index 3710fa8..77b72bd 100644</span><br><span>--- a/src/osmo-bts-litecell15/l1_if.c</span><br><span>+++ b/src/osmo-bts-litecell15/l1_if.c</span><br><span>@@ -1004,7 +1004,7 @@</span><br><span>    struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span>         /* FIXME: this should be deprecated/obsoleted as it bypasses rach.busy counting */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (ra_ind->measParam.fLinkQuality < bts->min_qual_rach) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ra_ind->measParam.fLinkQuality * 10 < bts->min_qual_rach) {</span><br><span>             msgb_free(l1p_msg);</span><br><span>          return 0;</span><br><span>    }</span><br><span>diff --git a/src/osmo-bts-oc2g/l1_if.c b/src/osmo-bts-oc2g/l1_if.c</span><br><span>index d9c8da0..9affc89 100644</span><br><span>--- a/src/osmo-bts-oc2g/l1_if.c</span><br><span>+++ b/src/osmo-bts-oc2g/l1_if.c</span><br><span>@@ -1060,7 +1060,7 @@</span><br><span>   struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span>         /* FIXME: this should be deprecated/obsoleted as it bypasses rach.busy counting */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (ra_ind->measParam.fLinkQuality < bts->min_qual_rach) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ra_ind->measParam.fLinkQuality * 10 < bts->min_qual_rach) {</span><br><span>             msgb_free(l1p_msg);</span><br><span>          return 0;</span><br><span>    }</span><br><span>diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c</span><br><span>index c431e49..58fc24e 100644</span><br><span>--- a/src/osmo-bts-sysmo/l1_if.c</span><br><span>+++ b/src/osmo-bts-sysmo/l1_if.c</span><br><span>@@ -998,7 +998,7 @@</span><br><span>         struct ph_rach_ind_param rach_ind_param;</span><br><span> </span><br><span>         /* FIXME: this should be deprecated/obsoleted as it bypasses rach.busy counting */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (ra_ind->measParam.fLinkQuality < bts->min_qual_rach) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ra_ind->measParam.fLinkQuality * 10 < bts->min_qual_rach) {</span><br><span>             msgb_free(l1p_msg);</span><br><span>          return 0;</span><br><span>    }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/14686">change 14686</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-bts/+/14686"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If624d6fdc0270e6813af8700d95f1345903c8a01 </div>
<div style="display:none"> Gerrit-Change-Number: 14686 </div>
<div style="display:none"> Gerrit-PatchSet: 7 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: ipse <Alexander.Chemeris@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>