diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2021-05-31 04:35:37 +0000 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2021-06-10 16:14:57 +0200 |
commit | 3cb4ddd8193d8d1dba8fac332db75c0d147e3ef4 (patch) | |
tree | 2a8148682752d2ac603cc7fb7162352e4e3f8d8a /src | |
parent | 19d797c2fb7b072e9c52dc58041c9e76d29e420c (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.c | 30 |
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); |