<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22188">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Move fc_* fields from BTS to PCU<br><br>Change-Id: I816d49e732d0fc7a3c9aa1f0e9a83b83d25e6a32<br>---<br>M src/bts.cpp<br>M src/bts.h<br>M src/gprs_bssgp_pcu.cpp<br>M src/gprs_pcu.c<br>M src/gprs_pcu.h<br>M src/pcu_vty.c<br>M tests/emu/pcu_emu.cpp<br>7 files changed, 34 insertions(+), 66 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/88/22188/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 4a9910f..9f987ff 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -193,7 +193,6 @@</span><br><span> static void bts_init(struct gprs_rlcmac_bts *bts, BTS* bts_obj)</span><br><span> {</span><br><span>       memset(bts, 0, sizeof(*bts));</span><br><span style="color: hsl(0, 100%, 40%);">-   bts->fc_interval = 1;</span><br><span>     bts->initial_cs_dl = bts->initial_cs_ul = 1;</span><br><span>   bts->initial_mcs_dl = bts->initial_mcs_ul = 1;</span><br><span>         bts->cs_mask = 1 << 0;  /* CS-1 always enabled by default */</span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index 283246e..1f26b84 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -85,12 +85,6 @@</span><br><span> struct gprs_rlcmac_bts {</span><br><span>      bool active;</span><br><span>         uint8_t bsic;</span><br><span style="color: hsl(0, 100%, 40%);">-   uint8_t fc_interval;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint16_t fc_bucket_time;</span><br><span style="color: hsl(0, 100%, 40%);">-        uint32_t fc_bvc_bucket_size;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint32_t fc_bvc_leak_rate;</span><br><span style="color: hsl(0, 100%, 40%);">-      uint32_t fc_ms_bucket_size;</span><br><span style="color: hsl(0, 100%, 40%);">-     uint32_t fc_ms_leak_rate;</span><br><span>    uint8_t cs_mask; /* Allowed CS mask from BTS */</span><br><span>      uint16_t mcs_mask;  /* Allowed MCS mask from BTS */</span><br><span>  uint8_t initial_cs_dl, initial_cs_ul;</span><br><span>diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp</span><br><span>index 89edd2b..c1a7a7d 100644</span><br><span>--- a/src/gprs_bssgp_pcu.cpp</span><br><span>+++ b/src/gprs_bssgp_pcu.cpp</span><br><span>@@ -673,7 +673,7 @@</span><br><span>     uint32_t leak_rate, uint32_t fallback)</span><br><span> {</span><br><span>  uint32_t bucket_size = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       uint16_t bucket_time = bts->fc_bucket_time;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t bucket_time = the_pcu->vty.fc_bucket_time;</span><br><span> </span><br><span>   if (bucket_time == 0)</span><br><span>                bucket_time = bts->force_llc_lifetime;</span><br><span>@@ -811,10 +811,10 @@</span><br><span> </span><br><span>        max_cs_dl = max_coding_scheme_dl(bts);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      bucket_size = bts->fc_bvc_bucket_size;</span><br><span style="color: hsl(0, 100%, 40%);">-       leak_rate = bts->fc_bvc_leak_rate;</span><br><span style="color: hsl(0, 100%, 40%);">-   ms_bucket_size = bts->fc_ms_bucket_size;</span><br><span style="color: hsl(0, 100%, 40%);">-     ms_leak_rate = bts->fc_ms_leak_rate;</span><br><span style="color: hsl(120, 100%, 40%);">+       bucket_size = the_pcu->vty.fc_bvc_bucket_size;</span><br><span style="color: hsl(120, 100%, 40%);">+     leak_rate = the_pcu->vty.fc_bvc_leak_rate;</span><br><span style="color: hsl(120, 100%, 40%);">+ ms_bucket_size = the_pcu->vty.fc_ms_bucket_size;</span><br><span style="color: hsl(120, 100%, 40%);">+   ms_leak_rate = the_pcu->vty.fc_ms_leak_rate;</span><br><span> </span><br><span>  /* FIXME: This calculation is mostly wrong. It should be done based on</span><br><span>          currently established TBF (and whether the related (egprs)_ms_class</span><br><span>@@ -940,7 +940,7 @@</span><br><span>         LOGP(DBSSGP, LOGL_DEBUG, "Sending flow control info on BVCI %d\n",</span><br><span>                 the_pcu->bssgp.bctx->bvci);</span><br><span>    gprs_bssgp_tx_fc_bvc();</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_timer_schedule(&the_pcu->bssgp.bvc_timer, the_pcu->bssgp.bts->fc_interval, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      osmo_timer_schedule(&the_pcu->bssgp.bvc_timer, the_pcu->vty.fc_interval, 0);</span><br><span> }</span><br><span> </span><br><span> static int ns_create_nsvc(struct gprs_rlcmac_bts *bts,</span><br><span>diff --git a/src/gprs_pcu.c b/src/gprs_pcu.c</span><br><span>index 01ead33..209fca6 100644</span><br><span>--- a/src/gprs_pcu.c</span><br><span>+++ b/src/gprs_pcu.c</span><br><span>@@ -46,6 +46,7 @@</span><br><span>   pcu = (struct gprs_pcu *)talloc_zero(ctx, struct gprs_pcu);</span><br><span>  OSMO_ASSERT(pcu);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ pcu->vty.fc_interval = 1;</span><br><span>         pcu->vty.max_cs_ul = MAX_GPRS_CS;</span><br><span>         pcu->vty.max_cs_dl = MAX_GPRS_CS;</span><br><span>         pcu->vty.max_mcs_ul = MAX_EDGE_MCS;</span><br><span>diff --git a/src/gprs_pcu.h b/src/gprs_pcu.h</span><br><span>index ff73cc9..87c8cdf 100644</span><br><span>--- a/src/gprs_pcu.h</span><br><span>+++ b/src/gprs_pcu.h</span><br><span>@@ -71,6 +71,12 @@</span><br><span>     char *pcu_sock_path;</span><br><span> </span><br><span>     struct { /* Config Values set by VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+               uint8_t fc_interval;</span><br><span style="color: hsl(120, 100%, 40%);">+          uint16_t fc_bucket_time;</span><br><span style="color: hsl(120, 100%, 40%);">+              uint32_t fc_bvc_bucket_size;</span><br><span style="color: hsl(120, 100%, 40%);">+          uint32_t fc_bvc_leak_rate;</span><br><span style="color: hsl(120, 100%, 40%);">+            uint32_t fc_ms_bucket_size;</span><br><span style="color: hsl(120, 100%, 40%);">+           uint32_t fc_ms_leak_rate;</span><br><span>            bool force_initial_cs;  /* false=use from BTS true=use from VTY */</span><br><span>           bool force_initial_mcs; /* false=use from BTS true=use from VTY */</span><br><span>           uint8_t max_cs_dl, max_cs_ul;</span><br><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index b0c941d..d107548 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -106,20 +106,20 @@</span><br><span>       unsigned int i;</span><br><span> </span><br><span>  vty_out(vty, "pcu%s", VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-   vty_out(vty, " flow-control-interval %d%s", bts->fc_interval,</span><br><span style="color: hsl(120, 100%, 40%);">+    vty_out(vty, " flow-control-interval %d%s", the_pcu->vty.fc_interval,</span><br><span>           VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-   if (bts->fc_bvc_bucket_size)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (the_pcu->vty.fc_bvc_bucket_size)</span><br><span>              vty_out(vty, " flow-control force-bvc-bucket-size %d%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                      bts->fc_bvc_bucket_size, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-       if (bts->fc_bvc_leak_rate)</span><br><span style="color: hsl(120, 100%, 40%);">+                 the_pcu->vty.fc_bvc_bucket_size, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (the_pcu->vty.fc_bvc_leak_rate)</span><br><span>                vty_out(vty, " flow-control force-bvc-leak-rate %d%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->fc_bvc_leak_rate, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">- if (bts->fc_ms_bucket_size)</span><br><span style="color: hsl(120, 100%, 40%);">+                        the_pcu->vty.fc_bvc_leak_rate, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (the_pcu->vty.fc_ms_bucket_size)</span><br><span>               vty_out(vty, " flow-control force-ms-bucket-size %d%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                       bts->fc_ms_bucket_size, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (bts->fc_ms_leak_rate)</span><br><span style="color: hsl(120, 100%, 40%);">+                  the_pcu->vty.fc_ms_bucket_size, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (the_pcu->vty.fc_ms_leak_rate)</span><br><span>                 vty_out(vty, " flow-control force-ms-leak-rate %d%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->fc_ms_leak_rate, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                        the_pcu->vty.fc_ms_leak_rate, VTY_NEWLINE);</span><br><span>       if (the_pcu->vty.force_initial_cs) {</span><br><span>              if (bts->initial_cs_ul == bts->initial_cs_dl)</span><br><span>                  vty_out(vty, " cs %d%s", bts->initial_cs_dl,</span><br><span>@@ -292,10 +292,7 @@</span><br><span>        "Interval time in seconds\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 style="color: hsl(0, 100%, 40%);">-  bts->fc_interval = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+  the_pcu->vty.fc_interval = atoi(argv[0]);</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> #define FC_STR "BSSGP Flow Control configuration\n"</span><br><span>@@ -308,10 +305,7 @@</span><br><span>        FC_STR FC_BMAX_STR("BVC") "Bucket size in octets\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 style="color: hsl(0, 100%, 40%);">-  bts->fc_bvc_bucket_size = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+   the_pcu->vty.fc_bvc_bucket_size = atoi(argv[0]);</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -321,10 +315,7 @@</span><br><span>     NO_STR FC_STR FC_BMAX_STR("BVC"),</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->fc_bvc_bucket_size = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+       the_pcu->vty.fc_bvc_bucket_size = 0;</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -334,9 +325,7 @@</span><br><span>      FC_STR FC_LR_STR("BVC") "Leak rate in bit/s\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 style="color: hsl(0, 100%, 40%);">-  bts->fc_bvc_leak_rate = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+     the_pcu->vty.fc_bvc_leak_rate = atoi(argv[0]);</span><br><span> </span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span>@@ -347,10 +336,7 @@</span><br><span>         NO_STR FC_STR FC_LR_STR("BVC"),</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->fc_bvc_leak_rate = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+ the_pcu->vty.fc_bvc_leak_rate = 0;</span><br><span>        return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -360,10 +346,7 @@</span><br><span>     FC_STR FC_BMAX_STR("default MS") "Bucket size in octets\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 style="color: hsl(0, 100%, 40%);">-  bts->fc_ms_bucket_size = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+    the_pcu->vty.fc_ms_bucket_size = atoi(argv[0]);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -373,10 +356,7 @@</span><br><span>     NO_STR FC_STR FC_BMAX_STR("default MS"),</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->fc_ms_bucket_size = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+        the_pcu->vty.fc_ms_bucket_size = 0;</span><br><span>       return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -386,10 +366,7 @@</span><br><span>     FC_STR FC_LR_STR("default MS") "Leak rate in bit/s\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 style="color: hsl(0, 100%, 40%);">-  bts->fc_ms_leak_rate = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+      the_pcu->vty.fc_ms_leak_rate = atoi(argv[0]);</span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -399,10 +376,7 @@</span><br><span>     NO_STR FC_STR FC_LR_STR("default MS"),</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->fc_ms_leak_rate = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+  the_pcu->vty.fc_ms_leak_rate = 0;</span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -413,10 +387,7 @@</span><br><span>     FC_STR FC_BTIME_STR "Time in centi-seconds\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 style="color: hsl(0, 100%, 40%);">-  bts->fc_bucket_time = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+       the_pcu->vty.fc_bucket_time = atoi(argv[0]);</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -426,10 +397,7 @@</span><br><span>     NO_STR FC_STR FC_BTIME_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->fc_bucket_time = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+   the_pcu->vty.fc_bucket_time = 0;</span><br><span>  return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/emu/pcu_emu.cpp b/tests/emu/pcu_emu.cpp</span><br><span>index 96aacda..2336e67 100644</span><br><span>--- a/tests/emu/pcu_emu.cpp</span><br><span>+++ b/tests/emu/pcu_emu.cpp</span><br><span>@@ -66,7 +66,6 @@</span><br><span> static void init_main_bts()</span><br><span> {</span><br><span>        struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span style="color: hsl(0, 100%, 40%);">-  bts->fc_interval = 100;</span><br><span>   bts->initial_cs_dl = bts->initial_cs_ul = 1;</span><br><span>   bts->cs_mask = 1 << 0; /* CS-1 always enabled by default */</span><br><span>         bts->n3101 = 10;</span><br><span>@@ -78,6 +77,7 @@</span><br><span> {</span><br><span>         if (!pcu->alloc_algorithm)</span><br><span>                pcu->alloc_algorithm = alloc_algorithm_b;</span><br><span style="color: hsl(120, 100%, 40%);">+  pcu->vty.fc_interval = 100;</span><br><span>       pcu->vty.alpha = 0; /* a = 0.0 */</span><br><span> }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22188">change 22188</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/+/22188"/><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: I816d49e732d0fc7a3c9aa1f0e9a83b83d25e6a32 </div>
<div style="display:none"> Gerrit-Change-Number: 22188 </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>