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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trx: Use NOPE indications from OsmoTRX for TCH/F and TCH/H<br><br>Without using the NOPE indication it might happen that we get<br>into the following situation:<br>* bursts 0,1,2 of a given block are received<br>* burst 3 is lost on the radio interface, OsmoTRX sends NOPE<br>* osmo-bts-trx doesn't pass the NOPE the the rx_tch*_fn()<br>* we never detect the end of the block, never perform decoding<br>  and even if the burst could be fully decoded, we loose the block<br><br>For voice, it can lead to lost RTP frames in uplink, which is also<br>problematic.<br><br>Let's deal with burst_len=0 in rx_tch*_fn() and use it as nope_fn.<br><br>Closes: OS#4661<br>Related: OS#2975<br>Change-Id: I0fbf4617daf24bd8aecfd9cfe1efd66cf73a277a<br>---<br>M src/common/scheduler.c<br>M src/osmo-bts-trx/scheduler_trx.c<br>2 files changed, 13 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/scheduler.c b/src/common/scheduler.c</span><br><span>index e8df537..054b6ca 100644</span><br><span>--- a/src/common/scheduler.c</span><br><span>+++ b/src/common/scheduler.c</span><br><span>@@ -191,6 +191,7 @@</span><br><span>                 .rts_fn = rts_tchf_fn,</span><br><span>               .dl_fn = tx_tchf_fn,</span><br><span>                 .ul_fn = rx_tchf_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .nope_fn = rx_tchf_fn,</span><br><span>       },</span><br><span>   [TRXC_TCHH_0] = {</span><br><span>            .name = "TCH/H(0)", /* 3GPP TS 05.02, section 3.2 */</span><br><span>@@ -211,6 +212,7 @@</span><br><span>                 .rts_fn = rts_tchh_fn,</span><br><span>               .dl_fn = tx_tchh_fn,</span><br><span>                 .ul_fn = rx_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .nope_fn = rx_tchh_fn,</span><br><span>       },</span><br><span>   [TRXC_TCHH_1] = {</span><br><span>            .name = "TCH/H(1)", /* 3GPP TS 05.02, section 3.2 */</span><br><span>@@ -222,6 +224,7 @@</span><br><span>                 .rts_fn = rts_tchh_fn,</span><br><span>               .dl_fn = tx_tchh_fn,</span><br><span>                 .ul_fn = rx_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .nope_fn = rx_tchh_fn,</span><br><span>       },</span><br><span>   [TRXC_SDCCH4_0] = {</span><br><span>          .name = "SDCCH/4(0)", /* 3GPP TS 05.02, section 3.3.4.1 */</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 585e887..f17354a 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>@@ -1165,8 +1165,11 @@</span><br><span> </span><br><span>       /* copy burst to end of buffer of 8 bursts */</span><br><span>        burst = *bursts_p + bid * 116 + 464;</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(burst, bi->burst + 3, 58);</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(burst + 58, bi->burst + 87, 58);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (bi->burst_len > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                memcpy(burst, bi->burst + 3, 58);</span><br><span style="color: hsl(120, 100%, 40%);">+          memcpy(burst + 58, bi->burst + 87, 58);</span><br><span style="color: hsl(120, 100%, 40%);">+    } else</span><br><span style="color: hsl(120, 100%, 40%);">+                memset(burst, 0, 116);</span><br><span> </span><br><span>   /* wait until complete set of bursts */</span><br><span>      if (bid != 3)</span><br><span>@@ -1360,8 +1363,11 @@</span><br><span> </span><br><span>   /* copy burst to end of buffer of 6 bursts */</span><br><span>        burst = *bursts_p + bid * 116 + 464;</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(burst, bi->burst + 3, 58);</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(burst + 58, bi->burst + 87, 58);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (bi->burst_len > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                memcpy(burst, bi->burst + 3, 58);</span><br><span style="color: hsl(120, 100%, 40%);">+          memcpy(burst + 58, bi->burst + 87, 58);</span><br><span style="color: hsl(120, 100%, 40%);">+    } else</span><br><span style="color: hsl(120, 100%, 40%);">+                memset(burst, 0, 116);</span><br><span> </span><br><span>   /* wait until complete set of bursts */</span><br><span>      if (bid != 1)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/17566">change 17566</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/+/17566"/><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: I0fbf4617daf24bd8aecfd9cfe1efd66cf73a277a </div>
<div style="display:none"> Gerrit-Change-Number: 17566 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>