aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2021-05-31 04:35:37 +0000
committerNeels Hofmeyr <neels@hofmeyr.de>2021-06-10 16:14:57 +0200
commit3cb4ddd8193d8d1dba8fac332db75c0d147e3ef4 (patch)
tree2a8148682752d2ac603cc7fb7162352e4e3f8d8a /src
parent19d797c2fb7b072e9c52dc58041c9e76d29e420c (diff)
add missing AMR config for RTP activation after mode modify
Add function lchan_activate_set_ch_mode_rate_and_mr_config() and call it for both plain channel activation and after a mode modify that needs RTP activation. The AMR config was missing after Mode Modify. Related: SYS#5315 OS#4940 Change-Id: I842fe7a14a91d1ec123cb4a3f52afe34456c03e3
Diffstat (limited to 'src')
-rw-r--r--src/osmo-bsc/lchan_fsm.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index 3b6333d8f..b772482a0 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -604,6 +604,21 @@ static void lchan_fsm_unused(struct osmo_fsm_inst *fi, uint32_t event, void *dat
}
}
+static int lchan_activate_set_ch_mode_rate_and_mr_config(struct gsm_lchan *lchan)
+{
+ struct osmo_fsm_inst *fi = lchan->fi;
+ lchan->activate.ch_mode_rate = lchan->activate.info.ch_mode_rate;
+ /* future: automatically adjust chan_mode in lchan->activate.ch_mode_rate */
+
+ if (gsm48_chan_mode_to_non_vamos(lchan->activate.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {
+ if (lchan_mr_config(&lchan->activate.mr_conf_filtered, lchan, lchan->activate.ch_mode_rate.s15_s0) < 0) {
+ lchan_fail("Can not generate multirate configuration IE");
+ return -EINVAL;
+ }
+ }
+ return 0;
+}
+
static void lchan_fsm_wait_ts_ready_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
{
struct gsm_lchan *lchan = lchan_fi_lchan(fi);
@@ -639,15 +654,8 @@ static void lchan_fsm_wait_ts_ready_onenter(struct osmo_fsm_inst *fi, uint32_t p
lchan->bs_power_db = bts->bs_power_ctrl.bs_power_val_db;
}
- lchan->activate.ch_mode_rate = lchan->activate.info.ch_mode_rate;
- /* future: automatically adjust chan_mode in lchan->activate.ch_mode_rate */
-
- if (gsm48_chan_mode_to_non_vamos(lchan->activate.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {
- if (lchan_mr_config(&lchan->activate.mr_conf_filtered, lchan, lchan->activate.ch_mode_rate.s15_s0) < 0) {
- lchan_fail("Can not generate multirate configuration IE\n");
- return;
- }
- }
+ if (lchan_activate_set_ch_mode_rate_and_mr_config(lchan))
+ return;
use_mgwep_ci = lchan_use_mgw_endpoint_ci_bts(lchan);
@@ -1002,8 +1010,8 @@ static void lchan_fsm_wait_rsl_chan_mode_modify_ack(struct osmo_fsm_inst *fi, ui
.tsc_set = -1,
.tsc = -1,
};
- lchan->activate.ch_mode_rate = lchan->activate.info.ch_mode_rate;
- /* future: automatically adjust chan_mode in lchan->activate.ch_mode_rate */
+ if (lchan_activate_set_ch_mode_rate_and_mr_config(lchan))
+ return;
lchan->activate.concluded = false;
lchan_fsm_state_chg(LCHAN_ST_WAIT_RLL_RTP_ESTABLISH);