Change in osmo-bsc[master]: bsc: Send MS Power Control msg upon max MS power change

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Tue Nov 12 16:53:46 UTC 2019


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/16054 )


Change subject: bsc: Send MS Power Control msg upon max MS power change
......................................................................

bsc: Send MS Power Control msg upon max MS power change

Lots of times, the MS power class is unknown until after the first
channel has been activated, at which point the MS power class is
received in messages such as LU update or CM Service Requet.
Since the MS Power level is sent upon CHAN ACT, the only way to
communicate the change of maximum MS Power (based on MS power class)
after CHAN ACT is to send a MS Power Control msg. Let's do that.

Related: OS#4244
Change-Id: I3d6b75578e5cb9b2ad474a0ad01362d846ebe135
---
M src/ipaccess/ipaccess-config.c
M src/ipaccess/ipaccess-proxy.c
M src/osmo-bsc/abis_rsl.c
M src/osmo-bsc/gsm_data.c
M src/utils/bs11_config.c
M src/utils/meas_json.c
M tests/abis/abis_test.c
M tests/bsc/bsc_test.c
M tests/gsm0408/gsm0408_test.c
M tests/nanobts_omlattr/nanobts_omlattr_test.c
10 files changed, 33 insertions(+), 3 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/54/16054/1

diff --git a/src/ipaccess/ipaccess-config.c b/src/ipaccess/ipaccess-config.c
index 54e4efd..4fb3426 100644
--- a/src/ipaccess/ipaccess-config.c
+++ b/src/ipaccess/ipaccess-config.c
@@ -1141,3 +1141,9 @@
 {
 	return 0;
 }
+
+/* Stub */
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan)
+{
+	return 0;
+}
diff --git a/src/ipaccess/ipaccess-proxy.c b/src/ipaccess/ipaccess-proxy.c
index 26c5bcd..5ce1128 100644
--- a/src/ipaccess/ipaccess-proxy.c
+++ b/src/ipaccess/ipaccess-proxy.c
@@ -1248,3 +1248,9 @@
 		osmo_select_main(0);
 	}
 }
+
+/* Stub */
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan)
+{
+	return 0;
+}
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c
index fe6fa13..be4d488 100644
--- a/src/osmo-bsc/abis_rsl.c
+++ b/src/osmo-bsc/abis_rsl.c
@@ -24,6 +24,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <inttypes.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
@@ -301,6 +302,9 @@
 	struct msgb *msg;
 	uint8_t chan_nr = gsm_lchan2chan_nr(lchan);
 
+	LOG_LCHAN(lchan, LOGL_DEBUG, "Tx MS POWER CONTROL %" PRIu8 "\n",
+		  lchan->ms_power);
+
 	msg = rsl_msgb_alloc();
 
 	dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh));
diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c
index 7745449..0662c80 100644
--- a/src/osmo-bsc/gsm_data.c
+++ b/src/osmo-bsc/gsm_data.c
@@ -39,6 +39,7 @@
 
 #include <osmocom/bsc/gsm_data.h>
 #include <osmocom/bsc/osmo_bsc_lcls.h>
+#include <osmocom/bsc/abis_rsl.h>
 #include <osmocom/bsc/abis_nm.h>
 #include <osmocom/bsc/handover_cfg.h>
 #include <osmocom/bsc/timeslot_fsm.h>
@@ -1705,6 +1706,7 @@
 	struct gsm_bts *bts = lchan->ts->trx->bts;
 	struct gsm_subscriber_connection *conn = lchan->conn;
 	int max_pwr_dbm_pwclass, new_pwr;
+	bool send_pwr_ctrl_msg = false;
 
 	LOG_LCHAN(lchan, LOGL_DEBUG,
 		  "MS Power level update requested: %d dBm\n", ms_power_dbm);
@@ -1741,10 +1743,15 @@
 		  "MS Power level update (power class %" PRIu8 "): %" PRIu8 " -> %d\n",
 		  conn ? conn->ms_power_class : 0, lchan->ms_power, new_pwr);
 
+	/* If chan was already activated and max ms_power changes (due to power
+	   classmark received), send an MS Power Control message */
+	if (lchan->activate.activ_ack && new_pwr != lchan->ms_power)
+		send_pwr_ctrl_msg = true;
+
 	lchan->ms_power = new_pwr;
-	/* FIXME: if chan is active and lchan->ms_power != new_pwr, consider
-	   sending an MS Power Control message (RSL) towards BTS to announce the
-	   new max ms power lvl, see rsl_chan_ms_power_ctrl() */
+
+	if (send_pwr_ctrl_msg)
+		rsl_chan_ms_power_ctrl(lchan);
 }
 
 const struct value_string lchan_activate_mode_names[] = {
diff --git a/src/utils/bs11_config.c b/src/utils/bs11_config.c
index 39acb7f..2a2340c 100644
--- a/src/utils/bs11_config.c
+++ b/src/utils/bs11_config.c
@@ -983,3 +983,4 @@
 
 void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}
 int abis_rsl_rcvmsg(struct msgb *msg) { return 0; }
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }
diff --git a/src/utils/meas_json.c b/src/utils/meas_json.c
index 365b450..a3526de 100644
--- a/src/utils/meas_json.c
+++ b/src/utils/meas_json.c
@@ -190,3 +190,4 @@
 
 void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}
 int abis_rsl_rcvmsg(struct msgb *msg) { return 0; }
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }
diff --git a/tests/abis/abis_test.c b/tests/abis/abis_test.c
index 5102aea..43934f3 100644
--- a/tests/abis/abis_test.c
+++ b/tests/abis/abis_test.c
@@ -189,3 +189,4 @@
 
 bool on_gsm_ts_init(struct gsm_bts_trx_ts *ts) { return true; }
 void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }
diff --git a/tests/bsc/bsc_test.c b/tests/bsc/bsc_test.c
index 103e0bb..86b7282 100644
--- a/tests/bsc/bsc_test.c
+++ b/tests/bsc/bsc_test.c
@@ -252,3 +252,4 @@
 void lchan_activate(struct gsm_lchan *lchan, void *info) {}
 bool neighbor_ident_bts_entry_exists(uint8_t from_bts) { return false; }
 const char *handover_status(struct gsm_subscriber_connection *conn) { return "x"; }
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }
diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c
index a30aaf8..f850274 100644
--- a/tests/gsm0408/gsm0408_test.c
+++ b/tests/gsm0408/gsm0408_test.c
@@ -996,3 +996,5 @@
 int rsl_data_request(struct msgb *msg, uint8_t link_id) { return 0; }
 
 int rsl_encryption_cmd(struct msgb *msg) { return 0; }
+
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }
diff --git a/tests/nanobts_omlattr/nanobts_omlattr_test.c b/tests/nanobts_omlattr/nanobts_omlattr_test.c
index 65eb055..a3ba8e0 100644
--- a/tests/nanobts_omlattr/nanobts_omlattr_test.c
+++ b/tests/nanobts_omlattr/nanobts_omlattr_test.c
@@ -318,3 +318,4 @@
 { return true; }
 
 void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {}
+int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) { return 0; }

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/16054
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I3d6b75578e5cb9b2ad474a0ad01362d846ebe135
Gerrit-Change-Number: 16054
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191112/49b4f51c/attachment.htm>


More information about the gerrit-log mailing list