<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22195">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  osmith: 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;">Fix configuration mess of initial_cs/mcs between PCUIF and VTY<br><br>Both values (optionally) set (forced) by VTY and the values received<br>from PCUIF were stored in the same variable, meaning that for instance<br>the PCUIF values wouldn't really be used if someone applied eg "no cs"<br>during runtime.<br><br>This commit does something similar to what was already done for the<br>max_(m)cs fields. We store PCUIF values in one place and VTY ones in<br>another place, and then trigger a bts object internal process to find<br>out exactly which initial CS should it be using.<br><br>Change-Id: I80a6ba401f9c0c85bdf6e0cc99a9d2008d31e1b0<br>---<br>M src/bts.cpp<br>M src/bts.h<br>M src/gprs_pcu.c<br>M src/gprs_pcu.h<br>M src/pcu_l1_if.cpp<br>M src/pcu_vty.c<br>6 files changed, 110 insertions(+), 55 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 92abdbf..a50e8ae 100644</span><br><span>--- a/src/bts.cpp</span><br><span>+++ b/src/bts.cpp</span><br><span>@@ -1172,6 +1172,62 @@</span><br><span>                       trx->pdch[i].unreserve(dir);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void bts_recalc_initial_cs(struct gprs_rlcmac_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t max_cs_dl, max_cs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (the_pcu->vty.force_initial_cs) {</span><br><span style="color: hsl(120, 100%, 40%);">+               bts->initial_cs_dl = the_pcu->vty.initial_cs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+                bts->initial_cs_ul = the_pcu->vty.initial_cs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+                return;</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%);">+   max_cs_dl = bts->bts->max_cs_dl();</span><br><span style="color: hsl(120, 100%, 40%);">+      if (bts->pcuif_info_ind.initial_cs > max_cs_dl) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_cs_dl to %d\n", max_cs_dl);</span><br><span style="color: hsl(120, 100%, 40%);">+           bts->initial_cs_dl = max_cs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->initial_cs_dl = bts->pcuif_info_ind.initial_cs;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (bts->initial_cs_dl == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               bts->initial_cs_dl = 1; /* CS1 Must always be supported */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       max_cs_ul = bts->bts->max_cs_ul();</span><br><span style="color: hsl(120, 100%, 40%);">+      if (bts->pcuif_info_ind.initial_cs > max_cs_ul) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_cs_ul to %d\n", max_cs_ul);</span><br><span style="color: hsl(120, 100%, 40%);">+           bts->initial_cs_ul = max_cs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->initial_cs_ul = bts->pcuif_info_ind.initial_cs;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (bts->initial_cs_ul == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               bts->initial_cs_ul = 1; /* CS1 Must always be supported */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+void bts_recalc_initial_mcs(struct gprs_rlcmac_bts *bts)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t max_mcs_dl, max_mcs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (the_pcu->vty.force_initial_mcs) {</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->initial_mcs_dl = the_pcu->vty.initial_mcs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->initial_mcs_ul = the_pcu->vty.initial_mcs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</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%);">+   max_mcs_dl = bts->bts->max_mcs_dl();</span><br><span style="color: hsl(120, 100%, 40%);">+    if (bts->pcuif_info_ind.initial_mcs > max_mcs_dl) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_mcs_dl to %d\n", max_mcs_dl);</span><br><span style="color: hsl(120, 100%, 40%);">+         bts->initial_mcs_dl = max_mcs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->initial_mcs_dl = bts->pcuif_info_ind.initial_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     max_mcs_ul = bts->bts->max_mcs_ul();</span><br><span style="color: hsl(120, 100%, 40%);">+    if (bts->pcuif_info_ind.initial_mcs > max_mcs_ul) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_mcs_ul to %d\n", max_mcs_ul);</span><br><span style="color: hsl(120, 100%, 40%);">+         bts->initial_mcs_ul = max_mcs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              bts->initial_mcs_ul = bts->pcuif_info_ind.initial_mcs;</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%);">+</span><br><span> void bts_recalc_max_cs(struct gprs_rlcmac_bts *bts)</span><br><span> {</span><br><span>   int i;</span><br><span>diff --git a/src/bts.h b/src/bts.h</span><br><span>index bf6e681..b1f73b4 100644</span><br><span>--- a/src/bts.h</span><br><span>+++ b/src/bts.h</span><br><span>@@ -87,6 +87,10 @@</span><br><span>         uint8_t bsic;</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 style="color: hsl(120, 100%, 40%);">+   struct { /* information stored from last received PCUIF info_ind message */</span><br><span style="color: hsl(120, 100%, 40%);">+           uint8_t initial_cs;</span><br><span style="color: hsl(120, 100%, 40%);">+           uint8_t initial_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+  } pcuif_info_ind;</span><br><span>    uint8_t initial_cs_dl, initial_cs_ul;</span><br><span>        uint8_t initial_mcs_dl, initial_mcs_ul;</span><br><span>      /* Timer defintions */</span><br><span>@@ -399,6 +403,8 @@</span><br><span>         struct gprs_rlcmac_bts *bts_main_data();</span><br><span>     struct rate_ctr_group *bts_main_data_stats();</span><br><span>        struct osmo_stat_item_group *bts_main_data_stat_items();</span><br><span style="color: hsl(120, 100%, 40%);">+      void bts_recalc_initial_cs(struct gprs_rlcmac_bts *bts);</span><br><span style="color: hsl(120, 100%, 40%);">+      void bts_recalc_initial_mcs(struct gprs_rlcmac_bts *bts);</span><br><span>    void bts_recalc_max_cs(struct gprs_rlcmac_bts *bts);</span><br><span>         void bts_recalc_max_mcs(struct gprs_rlcmac_bts *bts);</span><br><span>        struct GprsMs *bts_ms_by_imsi(struct BTS *bts, const char *imsi);</span><br><span>diff --git a/src/gprs_pcu.c b/src/gprs_pcu.c</span><br><span>index 013c026..bc9b350 100644</span><br><span>--- a/src/gprs_pcu.c</span><br><span>+++ b/src/gprs_pcu.c</span><br><span>@@ -103,6 +103,24 @@</span><br><span>        return pcu;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_pcu_set_initial_cs(struct gprs_pcu *pcu, uint8_t cs_dl, uint8_t cs_ul)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     the_pcu->vty.initial_cs_dl = cs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+        the_pcu->vty.initial_cs_ul = cs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /*TODO: once we support multiple bts, foreach(bts) apply */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gprs_rlcmac_bts *bts = bts_data(pcu->bts);</span><br><span style="color: hsl(120, 100%, 40%);">+  bts_recalc_initial_cs(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_pcu_set_initial_mcs(struct gprs_pcu *pcu, uint8_t mcs_dl, uint8_t mcs_ul)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        the_pcu->vty.initial_mcs_dl = mcs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+      the_pcu->vty.initial_mcs_ul = mcs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /*TODO: once we support multiple bts, foreach(bts) apply */</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gprs_rlcmac_bts *bts = bts_data(pcu->bts);</span><br><span style="color: hsl(120, 100%, 40%);">+  bts_recalc_initial_mcs(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> void gprs_pcu_set_max_cs(struct gprs_pcu *pcu, uint8_t cs_dl, uint8_t cs_ul)</span><br><span> {</span><br><span>diff --git a/src/gprs_pcu.h b/src/gprs_pcu.h</span><br><span>index 8fc15dc..8913001 100644</span><br><span>--- a/src/gprs_pcu.h</span><br><span>+++ b/src/gprs_pcu.h</span><br><span>@@ -79,6 +79,8 @@</span><br><span>            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 style="color: hsl(120, 100%, 40%);">+            uint8_t initial_cs_dl, initial_cs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+         uint8_t initial_mcs_dl, initial_mcs_ul;</span><br><span>              uint8_t max_cs_dl, max_cs_ul;</span><br><span>                uint8_t max_mcs_dl, max_mcs_ul;</span><br><span>              uint8_t force_two_phase;</span><br><span>@@ -122,5 +124,7 @@</span><br><span> </span><br><span> struct gprs_pcu *gprs_pcu_alloc(void *ctx);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_pcu_set_initial_cs(struct gprs_pcu *pcu, uint8_t cs_dl, uint8_t cs_ul);</span><br><span style="color: hsl(120, 100%, 40%);">+void gprs_pcu_set_initial_mcs(struct gprs_pcu *pcu, uint8_t mcs_dl, uint8_t mcs_ul);</span><br><span> void gprs_pcu_set_max_cs(struct gprs_pcu *pcu, uint8_t cs_dl, uint8_t cs_ul);</span><br><span> void gprs_pcu_set_max_mcs(struct gprs_pcu *pcu, uint8_t mcs_dl, uint8_t mcs_ul);</span><br><span>diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp</span><br><span>index 4a6c53e..a11ec7e 100644</span><br><span>--- a/src/pcu_l1_if.cpp</span><br><span>+++ b/src/pcu_l1_if.cpp</span><br><span>@@ -631,37 +631,13 @@</span><br><span> </span><br><span>     LOGP(DL1IF, LOGL_DEBUG, " initial_cs=%u%s\n", info_ind->initial_cs,</span><br><span>          the_pcu->vty.force_initial_cs ? " (VTY forced, ignoring)" : "");</span><br><span style="color: hsl(0, 100%, 40%);">-    if (!the_pcu->vty.force_initial_cs) {</span><br><span style="color: hsl(0, 100%, 40%);">-                if (info_ind->initial_cs > bts->bts->max_cs_dl()) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_cs_dl to %d\n", bts->bts->max_cs_dl());</span><br><span style="color: hsl(0, 100%, 40%);">-                   bts->initial_cs_dl = bts->bts->max_cs_dl();</span><br><span style="color: hsl(0, 100%, 40%);">-            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->initial_cs_dl =  info_ind->initial_cs;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               if (info_ind->initial_cs > bts->bts->max_cs_ul()) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_cs_ul to %d\n", bts->bts->max_cs_ul());</span><br><span style="color: hsl(0, 100%, 40%);">-                   bts->initial_cs_ul = bts->bts->max_cs_ul();</span><br><span style="color: hsl(0, 100%, 40%);">-            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->initial_cs_ul =  info_ind->initial_cs;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     bts->pcuif_info_ind.initial_cs = info_ind->initial_cs;</span><br><span style="color: hsl(120, 100%, 40%);">+  bts_recalc_initial_cs(bts);</span><br><span> </span><br><span>      LOGP(DL1IF, LOGL_DEBUG, " initial_mcs=%u%s\n", info_ind->initial_mcs,</span><br><span>        the_pcu->vty.force_initial_mcs ? " (VTY forced, ignoring)" : "");</span><br><span style="color: hsl(0, 100%, 40%);">-   if (!the_pcu->vty.force_initial_mcs) {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (info_ind->initial_mcs > bts->bts->max_mcs_dl()) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_mcs_dl to %d\n", bts->bts->max_mcs_dl());</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->initial_mcs_dl = bts->bts->max_mcs_dl();</span><br><span style="color: hsl(0, 100%, 40%);">-          } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->initial_mcs_dl =  info_ind->initial_mcs;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-               if (info_ind->initial_mcs > bts->bts->max_mcs_ul()) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       LOGP(DL1IF, LOGL_DEBUG, " downgrading initial_mcs_ul to %d\n", bts->bts->max_mcs_ul());</span><br><span style="color: hsl(0, 100%, 40%);">-                 bts->initial_mcs_ul = bts->bts->max_mcs_ul();</span><br><span style="color: hsl(0, 100%, 40%);">-          } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bts->initial_mcs_ul =  info_ind->initial_mcs;</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     bts->pcuif_info_ind.initial_mcs = info_ind->initial_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+        bts_recalc_initial_mcs(bts);</span><br><span> </span><br><span>     pcu = gprs_bssgp_init(</span><br><span>                       bts,</span><br><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index 0be914b..ed1a6a4 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -102,7 +102,6 @@</span><br><span> </span><br><span> static int config_write_pcu(struct vty *vty)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    struct gprs_rlcmac_bts *bts = bts_main_data();</span><br><span>       unsigned int i;</span><br><span> </span><br><span>  vty_out(vty, "pcu%s", VTY_NEWLINE);</span><br><span>@@ -121,12 +120,12 @@</span><br><span>                vty_out(vty, " flow-control force-ms-leak-rate %d%s",</span><br><span>                      the_pcu->vty.fc_ms_leak_rate, VTY_NEWLINE);</span><br><span>       if (the_pcu->vty.force_initial_cs) {</span><br><span style="color: hsl(0, 100%, 40%);">-         if (bts->initial_cs_ul == bts->initial_cs_dl)</span><br><span style="color: hsl(0, 100%, 40%);">-                     vty_out(vty, " cs %d%s", bts->initial_cs_dl,</span><br><span style="color: hsl(120, 100%, 40%);">+             if (the_pcu->vty.initial_cs_ul == the_pcu->vty.initial_cs_dl)</span><br><span style="color: hsl(120, 100%, 40%);">+                   vty_out(vty, " cs %d%s", the_pcu->vty.initial_cs_dl,</span><br><span>                            VTY_NEWLINE);</span><br><span>                else</span><br><span style="color: hsl(0, 100%, 40%);">-                    vty_out(vty, " cs %d %d%s", bts->initial_cs_dl,</span><br><span style="color: hsl(0, 100%, 40%);">-                            bts->initial_cs_ul, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                  vty_out(vty, " cs %d %d%s", the_pcu->vty.initial_cs_dl,</span><br><span style="color: hsl(120, 100%, 40%);">+                          the_pcu->vty.initial_cs_ul, VTY_NEWLINE);</span><br><span>         }</span><br><span>    if (the_pcu->vty.max_cs_dl && the_pcu->vty.max_cs_ul) {</span><br><span>                if (the_pcu->vty.max_cs_ul == the_pcu->vty.max_cs_dl)</span><br><span>@@ -178,12 +177,12 @@</span><br><span>          VTY_NEWLINE);</span><br><span> </span><br><span>    if (the_pcu->vty.force_initial_mcs) {</span><br><span style="color: hsl(0, 100%, 40%);">-                if (bts->initial_mcs_ul == bts->initial_mcs_dl)</span><br><span style="color: hsl(0, 100%, 40%);">-                   vty_out(vty, " mcs %d%s", bts->initial_mcs_dl,</span><br><span style="color: hsl(120, 100%, 40%);">+           if (the_pcu->vty.initial_mcs_ul == the_pcu->vty.initial_mcs_dl)</span><br><span style="color: hsl(120, 100%, 40%);">+                 vty_out(vty, " mcs %d%s", the_pcu->vty.initial_mcs_dl,</span><br><span>                          VTY_NEWLINE);</span><br><span>                else</span><br><span style="color: hsl(0, 100%, 40%);">-                    vty_out(vty, " mcs %d %d%s", bts->initial_mcs_dl,</span><br><span style="color: hsl(0, 100%, 40%);">-                          bts->initial_mcs_ul, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                 vty_out(vty, " mcs %d %d%s", the_pcu->vty.initial_mcs_dl,</span><br><span style="color: hsl(120, 100%, 40%);">+                                the_pcu->vty.initial_mcs_ul, VTY_NEWLINE);</span><br><span>        }</span><br><span> </span><br><span>        if (the_pcu->vty.max_mcs_dl && the_pcu->vty.max_mcs_ul) {</span><br><span>@@ -411,16 +410,14 @@</span><br><span>         "Use a different initial CS value for the uplink",</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%);">-  uint8_t cs = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     the_pcu->vty.force_initial_cs = true;</span><br><span style="color: hsl(0, 100%, 40%);">-        bts->initial_cs_dl = cs;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t cs_dl, cs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+ cs_dl = atoi(argv[0]);</span><br><span>       if (argc > 1)</span><br><span style="color: hsl(0, 100%, 40%);">-                bts->initial_cs_ul = atoi(argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+                cs_ul = atoi(argv[1]);</span><br><span>       else</span><br><span style="color: hsl(0, 100%, 40%);">-            bts->initial_cs_ul = cs;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+           cs_ul = cs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+        the_pcu->vty.force_initial_cs = true;</span><br><span style="color: hsl(120, 100%, 40%);">+      gprs_pcu_set_initial_cs(the_pcu, cs_dl, cs_ul);</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -431,7 +428,7 @@</span><br><span>      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  the_pcu->vty.force_initial_cs = false;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+     gprs_pcu_set_initial_cs(the_pcu, 0, 0);</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -476,16 +473,14 @@</span><br><span>            "Use a different initial MCS value for the uplink",</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%);">-  uint8_t mcs = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    the_pcu->vty.force_initial_mcs = true;</span><br><span style="color: hsl(0, 100%, 40%);">-       bts->initial_mcs_dl = mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t mcs_dl, mcs_ul;</span><br><span style="color: hsl(120, 100%, 40%);">+       mcs_dl = atoi(argv[0]);</span><br><span>      if (argc > 1)</span><br><span style="color: hsl(0, 100%, 40%);">-                bts->initial_mcs_ul = atoi(argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+               mcs_ul = atoi(argv[1]);</span><br><span>      else</span><br><span style="color: hsl(0, 100%, 40%);">-            bts->initial_mcs_ul = mcs;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+         mcs_ul = mcs_dl;</span><br><span style="color: hsl(120, 100%, 40%);">+      the_pcu->vty.force_initial_mcs = true;</span><br><span style="color: hsl(120, 100%, 40%);">+     gprs_pcu_set_initial_mcs(the_pcu, mcs_dl, mcs_ul);</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>@@ -496,7 +491,7 @@</span><br><span>      CMD_ATTR_IMMEDIATE)</span><br><span> {</span><br><span>  the_pcu->vty.force_initial_mcs = false;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+    gprs_pcu_set_initial_mcs(the_pcu, 0, 0);</span><br><span>     return CMD_SUCCESS;</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/+/22195">change 22195</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/+/22195"/><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: I80a6ba401f9c0c85bdf6e0cc99a9d2008d31e1b0 </div>
<div style="display:none"> Gerrit-Change-Number: 22195 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </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@osmocom.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-CC: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>