diff options
-rw-r--r-- | src/ipaccess/ipaccess-config.c | 6 | ||||
-rw-r--r-- | src/ipaccess/ipaccess-proxy.c | 6 | ||||
-rw-r--r-- | src/osmo-bsc/abis_rsl.c | 4 | ||||
-rw-r--r-- | src/osmo-bsc/gsm_data.c | 13 | ||||
-rw-r--r-- | src/utils/bs11_config.c | 1 | ||||
-rw-r--r-- | src/utils/meas_json.c | 1 | ||||
-rw-r--r-- | tests/abis/abis_test.c | 1 | ||||
-rw-r--r-- | tests/bsc/bsc_test.c | 1 | ||||
-rw-r--r-- | tests/gsm0408/gsm0408_test.c | 2 | ||||
-rw-r--r-- | tests/nanobts_omlattr/nanobts_omlattr_test.c | 1 |
10 files changed, 33 insertions, 3 deletions
diff --git a/src/ipaccess/ipaccess-config.c b/src/ipaccess/ipaccess-config.c index f8738091d..306cc8786 100644 --- a/src/ipaccess/ipaccess-config.c +++ b/src/ipaccess/ipaccess-config.c @@ -1141,3 +1141,9 @@ int osmo_bsc_sigtran_open_conn(struct gsm_subscriber_connection *conn, struct ms { 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 a4ee10efc..3d5f301d8 100644 --- a/src/ipaccess/ipaccess-proxy.c +++ b/src/ipaccess/ipaccess-proxy.c @@ -1248,3 +1248,9 @@ int main(int argc, char **argv) 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 80f54b3d3..a5e5f5140 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 @@ int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan) struct msgb *msg; uint8_t chan_nr = gsm_lchan2chan_nr(lchan); + LOG_LCHAN(lchan, LOGL_DEBUG, "Tx MS POWER CONTROL (ms_power_lvl=%" 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 2a7783762..90172dd7c 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 @@ void lchan_update_ms_power_ctrl_level(struct gsm_lchan *lchan, int ms_power_dbm) 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_default: "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 39acb7fd9..2a2340c4a 100644 --- a/src/utils/bs11_config.c +++ b/src/utils/bs11_config.c @@ -983,3 +983,4 @@ int osmo_bsc_sigtran_open_conn(struct gsm_subscriber_connection *conn, struct ms 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 365b450f4..a3526de5d 100644 --- a/src/utils/meas_json.c +++ b/src/utils/meas_json.c @@ -190,3 +190,4 @@ int main(int argc, char **argv) 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 5102aea6b..43934f364 100644 --- a/tests/abis/abis_test.c +++ b/tests/abis/abis_test.c @@ -189,3 +189,4 @@ struct gsm_subscriber_connection *bsc_subscr_con_allocate(struct gsm_network *ne 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 103e0bbb8..86b72824d 100644 --- a/tests/bsc/bsc_test.c +++ b/tests/bsc/bsc_test.c @@ -252,3 +252,4 @@ void ts_fsm_alloc(struct gsm_bts_trx_ts *ts) {} 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 a30aaf841..f850274a7 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -996,3 +996,5 @@ void lchan_release(struct gsm_lchan *lchan, bool do_rr_release, 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 65eb05563..a3ba8e006 100644 --- a/tests/nanobts_omlattr/nanobts_omlattr_test.c +++ b/tests/nanobts_omlattr/nanobts_omlattr_test.c @@ -318,3 +318,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; } |