<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/16054">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: Send MS Power Control msg upon max MS power change<br><br>Lots of times, the MS power class is unknown until after the first<br>channel has been activated, at which point the MS power class is<br>received in messages such as LU update or CM Service Requet.<br>Since the MS Power level is sent upon CHAN ACT, the only way to<br>communicate the change of maximum MS Power (based on MS power class)<br>after CHAN ACT is to send a MS Power Control msg. Let's do that.<br><br>Related: OS#4244<br>Change-Id: I3d6b75578e5cb9b2ad474a0ad01362d846ebe135<br>---<br>M src/ipaccess/ipaccess-config.c<br>M src/ipaccess/ipaccess-proxy.c<br>M src/osmo-bsc/abis_rsl.c<br>M src/osmo-bsc/gsm_data.c<br>M src/utils/bs11_config.c<br>M src/utils/meas_json.c<br>M tests/abis/abis_test.c<br>M tests/bsc/bsc_test.c<br>M tests/gsm0408/gsm0408_test.c<br>M tests/nanobts_omlattr/nanobts_omlattr_test.c<br>10 files changed, 33 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/54/16054/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/ipaccess/ipaccess-config.c b/src/ipaccess/ipaccess-config.c</span><br><span>index 54e4efd..4fb3426 100644</span><br><span>--- a/src/ipaccess/ipaccess-config.c</span><br><span>+++ b/src/ipaccess/ipaccess-config.c</span><br><span>@@ -1141,3 +1141,9 @@</span><br><span> {</span><br><span>     return 0;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Stub */</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/ipaccess/ipaccess-proxy.c b/src/ipaccess/ipaccess-proxy.c</span><br><span>index 26c5bcd..5ce1128 100644</span><br><span>--- a/src/ipaccess/ipaccess-proxy.c</span><br><span>+++ b/src/ipaccess/ipaccess-proxy.c</span><br><span>@@ -1248,3 +1248,9 @@</span><br><span>                osmo_select_main(0);</span><br><span>         }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Stub */</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c</span><br><span>index fe6fa13..be4d488 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <stdio.h></span><br><span> #include <stdlib.h></span><br><span> #include <errno.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span> #include <netinet/in.h></span><br><span> #include <arpa/inet.h></span><br><span> </span><br><span>@@ -301,6 +302,9 @@</span><br><span>       struct msgb *msg;</span><br><span>    uint8_t chan_nr = gsm_lchan2chan_nr(lchan);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       LOG_LCHAN(lchan, LOGL_DEBUG, "Tx MS POWER CONTROL %" PRIu8 "\n",</span><br><span style="color: hsl(120, 100%, 40%);">+            lchan->ms_power);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     msg = rsl_msgb_alloc();</span><br><span> </span><br><span>  dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh));</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index 7745449..0662c80 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -39,6 +39,7 @@</span><br><span> </span><br><span> #include <osmocom/bsc/gsm_data.h></span><br><span> #include <osmocom/bsc/osmo_bsc_lcls.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc/abis_rsl.h></span><br><span> #include <osmocom/bsc/abis_nm.h></span><br><span> #include <osmocom/bsc/handover_cfg.h></span><br><span> #include <osmocom/bsc/timeslot_fsm.h></span><br><span>@@ -1705,6 +1706,7 @@</span><br><span>  struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span>  struct gsm_subscriber_connection *conn = lchan->conn;</span><br><span>     int max_pwr_dbm_pwclass, new_pwr;</span><br><span style="color: hsl(120, 100%, 40%);">+     bool send_pwr_ctrl_msg = false;</span><br><span> </span><br><span>  LOG_LCHAN(lchan, LOGL_DEBUG,</span><br><span>                   "MS Power level update requested: %d dBm\n", ms_power_dbm);</span><br><span>@@ -1741,10 +1743,15 @@</span><br><span>              "MS Power level update (power class %" PRIu8 "): %" PRIu8 " -> %d\n",</span><br><span>               conn ? conn->ms_power_class : 0, lchan->ms_power, new_pwr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* If chan was already activated and max ms_power changes (due to power</span><br><span style="color: hsl(120, 100%, 40%);">+          classmark received), send an MS Power Control message */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (lchan->activate.activ_ack && new_pwr != lchan->ms_power)</span><br><span style="color: hsl(120, 100%, 40%);">+            send_pwr_ctrl_msg = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  lchan->ms_power = new_pwr;</span><br><span style="color: hsl(0, 100%, 40%);">-   /* FIXME: if chan is active and lchan->ms_power != new_pwr, consider</span><br><span style="color: hsl(0, 100%, 40%);">-    sending an MS Power Control message (RSL) towards BTS to announce the</span><br><span style="color: hsl(0, 100%, 40%);">-           new max ms power lvl, see rsl_chan_ms_power_ctrl() */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (send_pwr_ctrl_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+                rsl_chan_ms_power_ctrl(lchan);</span><br><span> }</span><br><span> </span><br><span> const struct value_string lchan_activate_mode_names[] = {</span><br><span>diff --git a/src/utils/bs11_config.c b/src/utils/bs11_config.c</span><br><span>index 39acb7f..2a2340c 100644</span><br><span>--- a/src/utils/bs11_config.c</span><br><span>+++ b/src/utils/bs11_config.c</span><br><span>@@ -983,3 +983,4 @@</span><br><span> </span><br><span> void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}</span><br><span> int abis_rsl_rcvmsg(struct msgb *msg) { return 0; }</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }</span><br><span>diff --git a/src/utils/meas_json.c b/src/utils/meas_json.c</span><br><span>index 365b450..a3526de 100644</span><br><span>--- a/src/utils/meas_json.c</span><br><span>+++ b/src/utils/meas_json.c</span><br><span>@@ -190,3 +190,4 @@</span><br><span> </span><br><span> void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}</span><br><span> int abis_rsl_rcvmsg(struct msgb *msg) { return 0; }</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }</span><br><span>diff --git a/tests/abis/abis_test.c b/tests/abis/abis_test.c</span><br><span>index 5102aea..43934f3 100644</span><br><span>--- a/tests/abis/abis_test.c</span><br><span>+++ b/tests/abis/abis_test.c</span><br><span>@@ -189,3 +189,4 @@</span><br><span> </span><br><span> bool on_gsm_ts_init(struct gsm_bts_trx_ts *ts) { return true; }</span><br><span> void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }</span><br><span>diff --git a/tests/bsc/bsc_test.c b/tests/bsc/bsc_test.c</span><br><span>index 103e0bb..86b7282 100644</span><br><span>--- a/tests/bsc/bsc_test.c</span><br><span>+++ b/tests/bsc/bsc_test.c</span><br><span>@@ -252,3 +252,4 @@</span><br><span> void lchan_activate(struct gsm_lchan *lchan, void *info) {}</span><br><span> bool neighbor_ident_bts_entry_exists(uint8_t from_bts) { return false; }</span><br><span> const char *handover_status(struct gsm_subscriber_connection *conn) { return "x"; }</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }</span><br><span>diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c</span><br><span>index a30aaf8..f850274 100644</span><br><span>--- a/tests/gsm0408/gsm0408_test.c</span><br><span>+++ b/tests/gsm0408/gsm0408_test.c</span><br><span>@@ -996,3 +996,5 @@</span><br><span> int rsl_data_request(struct msgb *msg, uint8_t link_id) { return 0; }</span><br><span> </span><br><span> int rsl_encryption_cmd(struct msgb *msg) { return 0; }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }</span><br><span>diff --git a/tests/nanobts_omlattr/nanobts_omlattr_test.c b/tests/nanobts_omlattr/nanobts_omlattr_test.c</span><br><span>index 65eb055..a3ba8e0 100644</span><br><span>--- a/tests/nanobts_omlattr/nanobts_omlattr_test.c</span><br><span>+++ b/tests/nanobts_omlattr/nanobts_omlattr_test.c</span><br><span>@@ -318,3 +318,4 @@</span><br><span> { return true; }</span><br><span> </span><br><span> void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}</span><br><span style="color: hsl(120, 100%, 40%);">+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/16054">change 16054</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-bsc/+/16054"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3d6b75578e5cb9b2ad474a0ad01362d846ebe135 </div>
<div style="display:none"> Gerrit-Change-Number: 16054 </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>