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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Use osmo_tdef to implement dl-tbf-idle-time<br><br>Change-Id: I5e4f0d2f90e643600b7752525d6c2830856c9d3b<br>---<br>M src/bts.cpp<br>M src/bts.h<br>M src/gprs_rlcmac_sched.cpp<br>M src/pcu_main.cpp<br>M src/pcu_vty.c<br>M src/tbf_dl.cpp<br>M tests/tbf/TbfTest.cpp<br>7 files changed, 27 insertions(+), 21 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bts.cpp b/src/bts.cpp</span><br><span>index 2423400..a8760ae 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -84,6 +84,7 @@</span><br><span>  { .T=-2001, .default_val=2,   .unit=OSMO_TDEF_S,  .desc="PACCH assignment timer (s)",               .val=0 },</span><br><span>      { .T=-2002, .default_val=200, .unit=OSMO_TDEF_MS, .desc="Waiting after IMM.ASS confirm timer (ms)", .val=0 },</span><br><span>      { .T=-2030, .default_val=60,  .unit=OSMO_TDEF_S,  .desc="Time to keep an idle MS object alive (s)", .val=0 }, /* slightly above T3314 (default 44s, 24.008, 11.2.2) */</span><br><span style="color: hsl(120, 100%, 40%);">+      { .T=-2031, .default_val=2000, .unit=OSMO_TDEF_MS, .desc="Time to keep an idle DL TBF alive (ms)",  .val=0 },</span><br><span>      { .T=0, .default_val=0, .unit=OSMO_TDEF_S, .desc=NULL, .val=0 } /* empty item at the end */</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index 5f25d02..fab9bcb 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -133,7 +133,6 @@</span><br><span>         uint8_t force_two_phase;</span><br><span>     uint8_t alpha, gamma;</span><br><span>        uint8_t egprs_enabled;</span><br><span style="color: hsl(0, 100%, 40%);">-  uint32_t dl_tbf_idle_msec; /* hold time for idle DL TBFs */</span><br><span>  bool dl_tbf_preemptive_retransmission;</span><br><span>       uint8_t si13[GSM_MACBLOCK_LEN];</span><br><span>      bool si13_is_set;</span><br><span>diff --git a/src/gprs_rlcmac_sched.cpp b/src/gprs_rlcmac_sched.cpp</span><br><span>index da54d9f..e16cf39 100644</span><br><span>--- a/src/gprs_rlcmac_sched.cpp</span><br><span>+++ b/src/gprs_rlcmac_sched.cpp</span><br><span>@@ -247,9 +247,10 @@</span><br><span>                                                uint8_t ts, uint32_t fn, int age)</span><br><span> {</span><br><span>   const gprs_rlc_dl_window *w = tbf->window();</span><br><span style="color: hsl(0, 100%, 40%);">- unsigned long msecs = osmo_tdef_get(bts->T_defs_pcu, 3190, OSMO_TDEF_MS, -1);</span><br><span style="color: hsl(120, 100%, 40%);">+      unsigned long msecs_t3190 = osmo_tdef_get(bts->T_defs_pcu, 3190, OSMO_TDEF_MS, -1);</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned long dl_tbf_idle_msec = osmo_tdef_get(bts->T_defs_pcu, -2031, OSMO_TDEF_MS, -1);</span><br><span>         int age_thresh1 = msecs_to_frames(200);</span><br><span style="color: hsl(0, 100%, 40%);">- int age_thresh2 = msecs_to_frames(OSMO_MIN(msecs/2, bts->dl_tbf_idle_msec));</span><br><span style="color: hsl(120, 100%, 40%);">+       int age_thresh2 = msecs_to_frames(OSMO_MIN(msecs_t3190/2, dl_tbf_idle_msec));</span><br><span> </span><br><span>    if (tbf->is_control_ts(ts) && tbf->need_control_ts())</span><br><span>          return DL_PRIO_CONTROL;</span><br><span>diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp</span><br><span>index e423718..9b1319c 100644</span><br><span>--- a/src/pcu_main.cpp</span><br><span>+++ b/src/pcu_main.cpp</span><br><span>@@ -252,7 +252,6 @@</span><br><span>   bts->ws_pdch = 0;</span><br><span> </span><br><span>     bts->llc_codel_interval_msec = LLC_CODEL_USE_DEFAULT;</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->dl_tbf_idle_msec = 2000;</span><br><span>     bts->llc_idle_ack_csec = 10;</span><br><span> </span><br><span>  /*</span><br><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index 477486c..6592cae 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -253,9 +253,6 @@</span><br><span>            vty_out(vty, " two-phase-access%s", VTY_NEWLINE);</span><br><span>  vty_out(vty, " alpha %d%s", bts->alpha, VTY_NEWLINE);</span><br><span>   vty_out(vty, " gamma %d%s", bts->gamma * 2, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (bts->dl_tbf_idle_msec)</span><br><span style="color: hsl(0, 100%, 40%);">-           vty_out(vty, " dl-tbf-idle-time %d%s", bts->dl_tbf_idle_msec,</span><br><span style="color: hsl(0, 100%, 40%);">-                      VTY_NEWLINE);</span><br><span>        if (!bts->dl_tbf_preemptive_retransmission)</span><br><span>               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>@@ -850,27 +847,31 @@</span><br><span> }</span><br><span> </span><br><span> #define IDLE_TIME_STR "keep an idle DL TBF alive for the time given\n"</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_dl_tbf_idle_time,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_pcu_dl_tbf_idle_time,</span><br><span>       cfg_pcu_dl_tbf_idle_time_cmd,</span><br><span>       "dl-tbf-idle-time <1-5000>",</span><br><span>       IDLE_TIME_STR "idle time in msec")</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+  vty_out(vty, "%% 'dl-tbf-idle-time' is now deprecated: use 'timer X2031 <val>' instead%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      bts->dl_tbf_idle_msec = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+     if (osmo_tdef_set(bts->T_defs_pcu, -2031, atoi(argv[0]), OSMO_TDEF_MS) < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+             return CMD_WARNING;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(cfg_pcu_no_dl_tbf_idle_time,</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN_DEPRECATED(cfg_pcu_no_dl_tbf_idle_time,</span><br><span>       cfg_pcu_no_dl_tbf_idle_time_cmd,</span><br><span>       "no dl-tbf-idle-time",</span><br><span>       NO_STR IDLE_TIME_STR)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "%% 'no dl-tbf-idle-time' is now deprecated: use 'timer X2031 0' instead%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      bts->dl_tbf_idle_msec = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+ if (osmo_tdef_set(bts->T_defs_pcu, -2031, 0, OSMO_TDEF_MS) < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+         return CMD_WARNING;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index 37bd3ee..12c098a 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -1235,11 +1235,13 @@</span><br><span> bool gprs_rlcmac_dl_tbf::keep_open(unsigned fn) const</span><br><span> {</span><br><span>    int keep_time_frames;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned long dl_tbf_idle_msec;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (bts_data()->dl_tbf_idle_msec == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+     dl_tbf_idle_msec = osmo_tdef_get(bts_data()->T_defs_pcu, -2031, OSMO_TDEF_MS, -1);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (dl_tbf_idle_msec == 0)</span><br><span>           return false;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       keep_time_frames = msecs_to_frames(bts_data()->dl_tbf_idle_msec);</span><br><span style="color: hsl(120, 100%, 40%);">+  keep_time_frames = msecs_to_frames(dl_tbf_idle_msec);</span><br><span>        return frames_since_last_drain(fn) <= keep_time_frames;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp</span><br><span>index 7241a35..2036023 100644</span><br><span>--- a/tests/tbf/TbfTest.cpp</span><br><span>+++ b/tests/tbf/TbfTest.cpp</span><br><span>@@ -156,6 +156,7 @@</span><br><span>   bts->initial_cs_dl = cs;</span><br><span>  bts->initial_cs_ul = cs;</span><br><span>  osmo_tdef_set(bts->T_defs_pcu, -2030, 0, OSMO_TDEF_S);</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo_tdef_set(bts->T_defs_pcu, -2031, 0, OSMO_TDEF_S);</span><br><span>    trx = &bts->trx[0];</span><br><span> </span><br><span>       trx->pdch[ts_no].enable();</span><br><span>@@ -318,6 +319,7 @@</span><br><span>  uint32_t fn = 0;</span><br><span>     uint8_t trx_no;</span><br><span>      uint32_t tlli = 0xffeeddcc;</span><br><span style="color: hsl(120, 100%, 40%);">+   unsigned long dl_tbf_idle_msec;</span><br><span> </span><br><span>  uint8_t rbb[64/8];</span><br><span> </span><br><span>@@ -328,7 +330,7 @@</span><br><span>         bts = the_bts.bts_data();</span><br><span> </span><br><span>        setup_bts(&the_bts, ts_no);</span><br><span style="color: hsl(0, 100%, 40%);">- bts->dl_tbf_idle_msec = 200;</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);</span><br><span> </span><br><span>   dl_tbf = create_dl_tbf(&the_bts, ms_class, 0, &trx_no);</span><br><span>      dl_tbf->update_ms(tlli, GPRS_RLCMAC_DL_TBF);</span><br><span>@@ -362,7 +364,8 @@</span><br><span>        RCV_ACK(false, dl_tbf, rbb); /* Receive an ACK */</span><br><span> </span><br><span>        /* Timeout (make sure fn % 52 remains valid) */</span><br><span style="color: hsl(0, 100%, 40%);">- fn += 52 * ((msecs_to_frames(bts->dl_tbf_idle_msec + 100) + 51)/ 52);</span><br><span style="color: hsl(120, 100%, 40%);">+      dl_tbf_idle_msec = osmo_tdef_get(bts->T_defs_pcu, -2031, OSMO_TDEF_MS, -1);</span><br><span style="color: hsl(120, 100%, 40%);">+        fn += 52 * ((msecs_to_frames(dl_tbf_idle_msec + 100) + 51)/ 52);</span><br><span>     request_dl_rlc_block(dl_tbf, &fn);</span><br><span> </span><br><span>   OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_FINISHED));</span><br><span>@@ -2529,7 +2532,7 @@</span><br><span>      bts = the_bts.bts_data();</span><br><span> </span><br><span>        setup_bts(&the_bts, ts_no);</span><br><span style="color: hsl(0, 100%, 40%);">- bts->dl_tbf_idle_msec = 200;</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);</span><br><span>       bts->egprs_enabled = 1;</span><br><span>   /* ARQ II */</span><br><span>         bts->dl_arq_type = EGPRS_ARQ2;</span><br><span>@@ -3064,7 +3067,7 @@</span><br><span>    bts = the_bts.bts_data();</span><br><span>    bts->cs_downgrade_threshold = 0;</span><br><span>  setup_bts(&the_bts, ts_no);</span><br><span style="color: hsl(0, 100%, 40%);">- bts->dl_tbf_idle_msec = 200;</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);</span><br><span>       bts->egprs_enabled = 1;</span><br><span>   /* ARQ II */</span><br><span>         bts->dl_arq_type = EGPRS_ARQ2;</span><br><span>@@ -3093,7 +3096,7 @@</span><br><span>    bts = the_bts.bts_data();</span><br><span>    bts->cs_downgrade_threshold = 0;</span><br><span>  setup_bts(&the_bts, ts_no);</span><br><span style="color: hsl(0, 100%, 40%);">- bts->dl_tbf_idle_msec = 200;</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);</span><br><span>       bts->egprs_enabled = 1;</span><br><span> </span><br><span>       /* ARQ I resegmentation support */</span><br><span>@@ -3125,7 +3128,7 @@</span><br><span>   bts = the_bts.bts_data();</span><br><span> </span><br><span>        setup_bts(&the_bts, ts_no);</span><br><span style="color: hsl(0, 100%, 40%);">- bts->dl_tbf_idle_msec = 200;</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);</span><br><span>       bts->egprs_enabled = 1;</span><br><span>   /* ARQ II */</span><br><span>         bts->dl_arq_type = EGPRS_ARQ2;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/15454">change 15454</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/+/15454"/><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: I5e4f0d2f90e643600b7752525d6c2830856c9d3b </div>
<div style="display:none"> Gerrit-Change-Number: 15454 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@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: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>