<p>osmith <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/15423">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  osmith: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tbf_dl: make preemptive retransmission optional<br><br>Since [1], OsmoPCU already starts to retransmit downlink blocks before<br>the MS has had a chance to receive them and/or send the related<br>acknowledgement in uplink. Make this optional with the new VTY option<br>"no dl-tbf-preemptive-retransmission".<br><br>[1] e25b5b91f60f20f61096bc6199a05b58ee6c6328 ("tbf: Only create dummy frames if necessary")<br>Related: OS#2408<br>Change-Id: Id08aed513d4033aa0d4324c6ce07cbb2852f2f92<br>---<br>M doc/manuals/vty/osmo-pcu_vty_reference.xml<br>M src/bts.cpp<br>M src/bts.h<br>M src/pcu_vty.c<br>M src/tbf_dl.cpp<br>5 files changed, 44 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/vty/osmo-pcu_vty_reference.xml b/doc/manuals/vty/osmo-pcu_vty_reference.xml</span><br><span>index cc8fffa..ea2d674 100644</span><br><span>--- a/doc/manuals/vty/osmo-pcu_vty_reference.xml</span><br><span>+++ b/doc/manuals/vty/osmo-pcu_vty_reference.xml</span><br><span>@@ -1807,6 +1807,17 @@</span><br><span>         <param name='dl-tbf-idle-time' doc='keep an idle DL TBF alive for the time given' /></span><br><span>       </params></span><br><span>     </command></span><br><span style="color: hsl(120, 100%, 40%);">+    <command id='dl-tbf-preemptive-retransmission'></span><br><span style="color: hsl(120, 100%, 40%);">+      <params></span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='dl-tbf-preemptive-retransmission' doc='retransmit blocks even before the MS had a chance to receive them (better throughput, less readable traces) (enabled by default)' /></span><br><span style="color: hsl(120, 100%, 40%);">+      </params></span><br><span style="color: hsl(120, 100%, 40%);">+    </command></span><br><span style="color: hsl(120, 100%, 40%);">+    <command id='no dl-tbf-preemptive-retransmission'></span><br><span style="color: hsl(120, 100%, 40%);">+      <params></span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='no' doc='Negate a command or set its defaults' /></span><br><span style="color: hsl(120, 100%, 40%);">+        <param name='dl-tbf-preemptive-retransmission' doc='retransmit blocks even before the MS had a chance to receive them (better throughput, less readable traces)' /></span><br><span style="color: hsl(120, 100%, 40%);">+      </params></span><br><span style="color: hsl(120, 100%, 40%);">+    </command></span><br><span>     <command id='ms-idle-time &lt;1-7200&gt;'></span><br><span>       <params></span><br><span>         <param name='ms-idle-time' doc='keep an idle MS object alive for the time given' /></span><br><span>diff --git a/src/bts.cpp b/src/bts.cpp</span><br><span>index 26dd401..60f74dd 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -216,6 +216,7 @@</span><br><span> {</span><br><span>      memset(&m_bts, 0, sizeof(m_bts));</span><br><span>        m_bts.bts = this;</span><br><span style="color: hsl(120, 100%, 40%);">+     m_bts.dl_tbf_preemptive_retransmission = true;</span><br><span> </span><br><span>   /* initialize back pointers */</span><br><span>       for (size_t trx_no = 0; trx_no < ARRAY_SIZE(m_bts.trx); ++trx_no) {</span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index 767605c..45d52a9 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -135,6 +135,7 @@</span><br><span>        uint8_t alpha, gamma;</span><br><span>        uint8_t egprs_enabled;</span><br><span>       uint32_t dl_tbf_idle_msec; /* hold time for idle DL TBFs */</span><br><span style="color: hsl(120, 100%, 40%);">+   bool dl_tbf_preemptive_retransmission;</span><br><span>       uint8_t si13[GSM_MACBLOCK_LEN];</span><br><span>      bool si13_is_set;</span><br><span>    /* 0 to support resegmentation in DL, 1 for no reseg */</span><br><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index 1e4f50c..a566e73 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -254,6 +254,8 @@</span><br><span>       if (bts->dl_tbf_idle_msec)</span><br><span>                vty_out(vty, " dl-tbf-idle-time %d%s", bts->dl_tbf_idle_msec,</span><br><span>                   VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!bts->dl_tbf_preemptive_retransmission)</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty, " no dl-tbf-preemptive-retransmission%s", VTY_NEWLINE);</span><br><span>       if (strcmp(bts->pcu_sock_path, PCU_SOCK_DEFAULT))</span><br><span>                 vty_out(vty, " pcu-socket %s%s", bts->pcu_sock_path, VTY_NEWLINE);</span><br><span> </span><br><span>@@ -870,6 +872,32 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define RETRANSMISSION_STR "retransmit blocks even before the MS had a chance to receive them (better throughput," \</span><br><span style="color: hsl(120, 100%, 40%);">+                     " less readable traces)"</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_pcu_dl_tbf_preemptive_retransmission,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_dl_tbf_preemptive_retransmission_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "dl-tbf-preemptive-retransmission",</span><br><span style="color: hsl(120, 100%, 40%);">+      RETRANSMISSION_STR " (enabled by default)")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      bts->dl_tbf_preemptive_retransmission = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_pcu_no_dl_tbf_preemptive_retransmission,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_no_dl_tbf_preemptive_retransmission_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no dl-tbf-preemptive-retransmission",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR RETRANSMISSION_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      bts->dl_tbf_preemptive_retransmission = false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define MS_IDLE_TIME_STR "keep an idle MS object alive for the time given\n"</span><br><span> DEFUN(cfg_pcu_ms_idle_time,</span><br><span>       cfg_pcu_ms_idle_time_cmd,</span><br><span>@@ -1215,6 +1243,8 @@</span><br><span>         install_element(PCU_NODE, &cfg_pcu_gamma_cmd);</span><br><span>   install_element(PCU_NODE, &cfg_pcu_dl_tbf_idle_time_cmd);</span><br><span>        install_element(PCU_NODE, &cfg_pcu_no_dl_tbf_idle_time_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+      install_element(PCU_NODE, &cfg_pcu_dl_tbf_preemptive_retransmission_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(PCU_NODE, &cfg_pcu_no_dl_tbf_preemptive_retransmission_cmd);</span><br><span>     install_element(PCU_NODE, &cfg_pcu_ms_idle_time_cmd);</span><br><span>    install_element(PCU_NODE, &cfg_pcu_no_ms_idle_time_cmd);</span><br><span>         install_element(PCU_NODE, &cfg_pcu_gsmtap_categ_cmd);</span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index d5e4a45..510a65c 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -431,7 +431,7 @@</span><br><span>                           m_window.v_s(), mcs_name(new_cs));</span><br><span> </span><br><span>             bsn = create_new_bsn(fn, new_cs);</span><br><span style="color: hsl(0, 100%, 40%);">-       } else if (!m_window.window_empty()) {</span><br><span style="color: hsl(120, 100%, 40%);">+        } else if (bts->bts_data()->dl_tbf_preemptive_retransmission && !m_window.window_empty()) {</span><br><span>            LOGPTBFDL(this, LOGL_DEBUG,</span><br><span>                    "Restarting at BSN %d, because all blocks have been transmitted (FLOW).\n",</span><br><span>                        m_window.v_a());</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/15423">change 15423</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-pcu/+/15423"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id08aed513d4033aa0d4324c6ce07cbb2852f2f92 </div>
<div style="display:none"> Gerrit-Change-Number: 15423 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>