<p>fixeria <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/16067">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  fixeria: 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;">scheduler_trx.c: avoid division by zero when calculating BER<br><br>There is theoretical risk that when calculating the BER that a division<br>by zero occurrs. Lets add a check to avoid n_errors / n_bits_total when<br>n_bits_total is zero.<br><br>Change-Id: I1c0731b9a60be4b8c0c84b85b4403168120ceacd<br>Fixes: CID#205696<br>---<br>M src/osmo-bts-trx/loops.c<br>M src/osmo-bts-trx/loops.h<br>M src/osmo-bts-trx/scheduler_trx.c<br>3 files changed, 13 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bts-trx/loops.c b/src/osmo-bts-trx/loops.c</span><br><span>index e73d842..47e9cf3 100644</span><br><span>--- a/src/osmo-bts-trx/loops.c</span><br><span>+++ b/src/osmo-bts-trx/loops.c</span><br><span>@@ -268,11 +268,19 @@</span><br><span> }</span><br><span> </span><br><span> void trx_loop_amr_input(struct l1sched_trx *l1t, uint8_t chan_nr,</span><br><span style="color: hsl(0, 100%, 40%);">-      struct l1sched_chan_state *chan_state, float ber)</span><br><span style="color: hsl(120, 100%, 40%);">+     struct l1sched_chan_state *chan_state,</span><br><span style="color: hsl(120, 100%, 40%);">+        int n_errors, int n_bits_total)</span><br><span> {</span><br><span>         struct gsm_bts_trx *trx = l1t->trx;</span><br><span>       struct gsm_lchan *lchan = &trx->ts[L1SAP_CHAN2TS(chan_nr)]</span><br><span>                                    .lchan[l1sap_chan2ss(chan_nr)];</span><br><span style="color: hsl(120, 100%, 40%);">+       float ber;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* calculate BER (Bit Error Ratio) */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (n_bits_total == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                ber = 1.0; /* 100% BER */</span><br><span style="color: hsl(120, 100%, 40%);">+     else</span><br><span style="color: hsl(120, 100%, 40%);">+          ber = (float) n_errors / (float) n_bits_total;</span><br><span> </span><br><span>   /* check if loop is enabled */</span><br><span>       if (!chan_state->amr_loop)</span><br><span>diff --git a/src/osmo-bts-trx/loops.h b/src/osmo-bts-trx/loops.h</span><br><span>index 7869903..978cb7e 100644</span><br><span>--- a/src/osmo-bts-trx/loops.h</span><br><span>+++ b/src/osmo-bts-trx/loops.h</span><br><span>@@ -22,7 +22,8 @@</span><br><span>         struct l1sched_chan_state *chan_state);</span><br><span> </span><br><span> void trx_loop_amr_input(struct l1sched_trx *l1t, uint8_t chan_nr,</span><br><span style="color: hsl(0, 100%, 40%);">-        struct l1sched_chan_state *chan_state, float ber);</span><br><span style="color: hsl(120, 100%, 40%);">+  struct l1sched_chan_state *chan_state,</span><br><span style="color: hsl(120, 100%, 40%);">+        int n_errors, int n_bits_total);</span><br><span> </span><br><span> void trx_loop_amr_set(struct l1sched_chan_state *chan_state, int loop);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/scheduler_trx.c b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>index 9945b2c..b54c35b 100644</span><br><span>--- a/src/osmo-bts-trx/scheduler_trx.c</span><br><span>+++ b/src/osmo-bts-trx/scheduler_trx.c</span><br><span>@@ -1215,7 +1215,7 @@</span><br><span>             if (rc)</span><br><span>                      trx_loop_amr_input(l1t,</span><br><span>                              trx_chan_desc[chan].chan_nr | bi->tn, chan_state,</span><br><span style="color: hsl(0, 100%, 40%);">-                            (float)n_errors/(float)n_bits_total);</span><br><span style="color: hsl(120, 100%, 40%);">+                         n_errors, n_bits_total);</span><br><span>             amr = 2; /* we store tch_data + 2 header bytes */</span><br><span>            /* only good speech frames get rtp header */</span><br><span>                 if (rc != GSM_MACBLOCK_LEN && rc >= 4) {</span><br><span>@@ -1427,7 +1427,7 @@</span><br><span>          if (rc)</span><br><span>                      trx_loop_amr_input(l1t,</span><br><span>                              trx_chan_desc[chan].chan_nr | bi->tn, chan_state,</span><br><span style="color: hsl(0, 100%, 40%);">-                            (float)n_errors/(float)n_bits_total);</span><br><span style="color: hsl(120, 100%, 40%);">+                         n_errors, n_bits_total);</span><br><span>             amr = 2; /* we store tch_data + 2 two */</span><br><span>             /* only good speech frames get rtp header */</span><br><span>                 if (rc != GSM_MACBLOCK_LEN && rc >= 4) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/16067">change 16067</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/+/16067"/><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: I1c0731b9a60be4b8c0c84b85b4403168120ceacd </div>
<div style="display:none"> Gerrit-Change-Number: 16067 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </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>