<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>