<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22184">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Move cs_adj* fields from BTS to PCU<br><br>Change-Id: I2b00a83279dccd4feeeeb95e34878c4405e7972c<br>---<br>M src/bts.cpp<br>M src/bts.h<br>M src/gprs_bssgp_pcu.cpp<br>M src/gprs_ms.c<br>M src/gprs_pcu.c<br>M src/gprs_pcu.h<br>M src/pcu_vty.c<br>M src/tbf_dl.cpp<br>M tests/ms/MsTest.cpp<br>9 files changed, 22 insertions(+), 29 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/84/22184/1</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 5eefc36..3795ca2 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -201,9 +201,6 @@</span><br><span>   bts->n3103 = 4;</span><br><span>   bts->n3105 = 8;</span><br><span>   bts->si13_is_set = false;</span><br><span style="color: hsl(0, 100%, 40%);">-    bts->cs_adj_enabled = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-     bts->cs_adj_upper_limit = 33; /* Decrease CS if the error rate is above */</span><br><span style="color: hsl(0, 100%, 40%);">-   bts->cs_adj_lower_limit = 10; /* Increase CS if the error rate is below */</span><br><span>        /* CS-1 to CS-4 */</span><br><span>   bts->cs_lqual_ranges[0].low = -256;</span><br><span>       bts->cs_lqual_ranges[0].high = 6;</span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index 9626cdc..1f4da4e 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -109,9 +109,6 @@</span><br><span>  uint8_t si13[GSM_MACBLOCK_LEN];</span><br><span>      bool si13_is_set;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   uint8_t cs_adj_enabled; /* whether cs_adj_{upper,lower}_limit are used to adjust DL CS */</span><br><span style="color: hsl(0, 100%, 40%);">-       uint8_t cs_adj_upper_limit; /* downgrade DL CS if error rate above its value */</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t cs_adj_lower_limit; /* upgrade DL CS if error rate below its value */</span><br><span>        /* downgrade DL CS when less than specified octets are left in tx queue. Optimization, see paper:</span><br><span>      "Theoretical Analysis of GPRS Throughput and Delay" */</span><br><span>   uint16_t cs_downgrade_threshold;</span><br><span>diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp</span><br><span>index cfaee73..0db6a51 100644</span><br><span>--- a/src/gprs_bssgp_pcu.cpp</span><br><span>+++ b/src/gprs_bssgp_pcu.cpp</span><br><span>@@ -755,7 +755,7 @@</span><br><span>  }</span><br><span> </span><br><span>        if (mcs_any) {</span><br><span style="color: hsl(0, 100%, 40%);">-          if (!bts->cs_adj_enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (!the_pcu->vty.cs_adj_enabled) {</span><br><span>                       if (bts->initial_mcs_dl) {</span><br><span>                                num = bts->initial_mcs_dl;</span><br><span>                        } else {</span><br><span>@@ -771,7 +771,7 @@</span><br><span>                       return mcs_get_egprs_by_num(num);</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (!bts->cs_adj_enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!the_pcu->vty.cs_adj_enabled) {</span><br><span>               if (bts->initial_cs_dl) {</span><br><span>                         num = bts->initial_cs_dl;</span><br><span>                 } else {</span><br><span>diff --git a/src/gprs_ms.c b/src/gprs_ms.c</span><br><span>index 6fbb06a..cc64c86 100644</span><br><span>--- a/src/gprs_ms.c</span><br><span>+++ b/src/gprs_ms.c</span><br><span>@@ -571,12 +571,9 @@</span><br><span> </span><br><span> void ms_update_error_rate(struct GprsMs *ms, struct gprs_rlcmac_tbf *tbf, int error_rate)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  struct gprs_rlcmac_bts *bts_;</span><br><span>        int64_t now;</span><br><span>         enum CodingScheme max_cs_dl = ms_max_cs_dl(ms);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      OSMO_ASSERT(max_cs_dl);</span><br><span style="color: hsl(0, 100%, 40%);">- bts_ = bts_data(ms->bts);</span><br><span> </span><br><span>     if (error_rate < 0)</span><br><span>               return;</span><br><span>@@ -588,7 +585,7 @@</span><br><span> </span><br><span>    ms->nack_rate_dl = error_rate;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (error_rate > bts_->cs_adj_upper_limit) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (error_rate > the_pcu->vty.cs_adj_upper_limit) {</span><br><span>            if (mcs_chan_code(ms->current_cs_dl) > 0) {</span><br><span>                    mcs_dec_kind(&ms->current_cs_dl, ms_mode(ms));</span><br><span>                        LOGP(DRLCMACDL, LOGL_INFO,</span><br><span>@@ -597,7 +594,7 @@</span><br><span>                             ms_imsi(ms), error_rate, mcs_name(ms->current_cs_dl));</span><br><span>                    ms->last_cs_not_low = now;</span><br><span>                }</span><br><span style="color: hsl(0, 100%, 40%);">-       } else if (error_rate < bts_->cs_adj_lower_limit) {</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if (error_rate < the_pcu->vty.cs_adj_lower_limit) {</span><br><span>             if (ms->current_cs_dl < max_cs_dl) {</span><br><span>                  if (now - ms->last_cs_not_low > 1000) {</span><br><span>                                mcs_inc_kind(&ms->current_cs_dl, ms_mode(ms));</span><br><span>@@ -801,7 +798,7 @@</span><br><span>           return cs;</span><br><span> </span><br><span>       /* RF conditions are good, don't reduce */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ms->nack_rate_dl < bts_data(ms->bts)->cs_adj_lower_limit)</span><br><span style="color: hsl(120, 100%, 40%);">+     if (ms->nack_rate_dl < the_pcu->vty.cs_adj_lower_limit)</span><br><span>             return cs;</span><br><span> </span><br><span>       /* The throughput would probably be better if the CS level was reduced */</span><br><span>diff --git a/src/gprs_pcu.c b/src/gprs_pcu.c</span><br><span>index 2a84f7b..d7a851b 100644</span><br><span>--- a/src/gprs_pcu.c</span><br><span>+++ b/src/gprs_pcu.c</span><br><span>@@ -55,6 +55,9 @@</span><br><span>   /* By default resegmentation is supported in DL can also be configured</span><br><span>        * through VTY */</span><br><span>    pcu->vty.dl_arq_type = EGPRS_ARQ1;</span><br><span style="color: hsl(120, 100%, 40%);">+ pcu->vty.cs_adj_enabled = true;</span><br><span style="color: hsl(120, 100%, 40%);">+    pcu->vty.cs_adj_upper_limit = 33; /* Decrease CS if the error rate is above */</span><br><span style="color: hsl(120, 100%, 40%);">+     pcu->vty.cs_adj_lower_limit = 10; /* Increase CS if the error rate is below */</span><br><span> </span><br><span>        pcu->T_defs = T_defs_pcu;</span><br><span>         osmo_tdefs_reset(pcu->T_defs);</span><br><span>diff --git a/src/gprs_pcu.h b/src/gprs_pcu.h</span><br><span>index f07510b..6c9eae1 100644</span><br><span>--- a/src/gprs_pcu.h</span><br><span>+++ b/src/gprs_pcu.h</span><br><span>@@ -79,6 +79,9 @@</span><br><span>           uint8_t alpha, gamma;</span><br><span>                bool dl_tbf_preemptive_retransmission;</span><br><span>               enum egprs_arq_type dl_arq_type; /* EGPRS_ARQ1 to support resegmentation in DL, EGPRS_ARQ2 for no reseg */</span><br><span style="color: hsl(120, 100%, 40%);">+            bool cs_adj_enabled; /* whether cs_adj_{upper,lower}_limit are used to adjust DL CS */</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t cs_adj_upper_limit; /* downgrade DL CS if error rate above its value */</span><br><span style="color: hsl(120, 100%, 40%);">+               uint8_t cs_adj_lower_limit; /* upgrade DL CS if error rate below its value */</span><br><span>        } vty;</span><br><span> </span><br><span>   struct gsmtap_inst *gsmtap;</span><br><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index ef86879..c830400 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -136,9 +136,9 @@</span><br><span>                   vty_out(vty, " cs max %d %d%s", the_pcu->vty.max_cs_dl,</span><br><span>                                 the_pcu->vty.max_cs_ul, VTY_NEWLINE);</span><br><span>     }</span><br><span style="color: hsl(0, 100%, 40%);">-       if (bts->cs_adj_enabled)</span><br><span style="color: hsl(120, 100%, 40%);">+   if (the_pcu->vty.cs_adj_enabled)</span><br><span>          vty_out(vty, " cs threshold %d %d%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->cs_adj_lower_limit, bts->cs_adj_upper_limit,</span><br><span style="color: hsl(120, 100%, 40%);">+                       the_pcu->vty.cs_adj_lower_limit, the_pcu->vty.cs_adj_upper_limit,</span><br><span>                      VTY_NEWLINE);</span><br><span>        else</span><br><span>                 vty_out(vty, " no cs threshold%s", VTY_NEWLINE);</span><br><span>@@ -910,8 +910,6 @@</span><br><span>        CS_STR CS_ERR_LIMITS_STR "lower limit in %\n" "upper limit in %\n",</span><br><span>      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       uint8_t lower_limit = atoi(argv[0]);</span><br><span>         uint8_t upper_limit = atoi(argv[1]);</span><br><span> </span><br><span>@@ -922,9 +920,9 @@</span><br><span>               return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   bts->cs_adj_enabled = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-     bts->cs_adj_upper_limit = upper_limit;</span><br><span style="color: hsl(0, 100%, 40%);">-       bts->cs_adj_lower_limit = lower_limit;</span><br><span style="color: hsl(120, 100%, 40%);">+     the_pcu->vty.cs_adj_enabled = true;</span><br><span style="color: hsl(120, 100%, 40%);">+        the_pcu->vty.cs_adj_upper_limit = upper_limit;</span><br><span style="color: hsl(120, 100%, 40%);">+     the_pcu->vty.cs_adj_lower_limit = lower_limit;</span><br><span> </span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -935,11 +933,9 @@</span><br><span>         NO_STR CS_STR CS_ERR_LIMITS_STR,</span><br><span>     CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  bts->cs_adj_enabled = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-     bts->cs_adj_upper_limit = 100;</span><br><span style="color: hsl(0, 100%, 40%);">-       bts->cs_adj_lower_limit = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       the_pcu->vty.cs_adj_enabled = false;</span><br><span style="color: hsl(120, 100%, 40%);">+       the_pcu->vty.cs_adj_upper_limit = 100;</span><br><span style="color: hsl(120, 100%, 40%);">+     the_pcu->vty.cs_adj_lower_limit = 0;</span><br><span> </span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span>diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp</span><br><span>index 5ff5b16..2a48648 100644</span><br><span>--- a/src/tbf_dl.cpp</span><br><span>+++ b/src/tbf_dl.cpp</span><br><span>@@ -1132,7 +1132,7 @@</span><br><span> </span><br><span>    error_rate = analyse_errors(show_rbb, behind_last_bsn, &ana_res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       if (bts_data()->cs_adj_enabled && ms())</span><br><span style="color: hsl(120, 100%, 40%);">+    if (the_pcu->vty.cs_adj_enabled && ms())</span><br><span>          ms_update_error_rate(ms(), this, error_rate);</span><br><span> </span><br><span>    m_window.update(bts, rbb, first_bsn, &lost, &received);</span><br><span>@@ -1187,7 +1187,7 @@</span><br><span> </span><br><span>  error_rate = analyse_errors(show_rbb, ssn, &ana_res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (bts_data()->cs_adj_enabled && ms())</span><br><span style="color: hsl(120, 100%, 40%);">+    if (the_pcu->vty.cs_adj_enabled && ms())</span><br><span>          ms_update_error_rate(ms(), this, error_rate);</span><br><span> </span><br><span>    m_window.update(bts, show_rbb, ssn,</span><br><span>diff --git a/tests/ms/MsTest.cpp b/tests/ms/MsTest.cpp</span><br><span>index 1e810f2..b914f01 100644</span><br><span>--- a/tests/ms/MsTest.cpp</span><br><span>+++ b/tests/ms/MsTest.cpp</span><br><span>@@ -511,7 +511,7 @@</span><br><span>   bts->initial_cs_dl = 4;</span><br><span>   bts->initial_cs_ul = 1;</span><br><span>   bts->cs_downgrade_threshold = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-     bts->cs_adj_lower_limit = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       the_pcu->vty.cs_adj_lower_limit = 0;</span><br><span> </span><br><span>  ms = ms_alloc(&the_bts, tlli);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22184">change 22184</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/+/22184"/><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: I2b00a83279dccd4feeeeb95e34878c4405e7972c </div>
<div style="display:none"> Gerrit-Change-Number: 22184 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>