diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn index 09cd71707..46fb95281 100644 --- a/bsc/BSC_Tests.ttcn +++ b/bsc/BSC_Tests.ttcn @@ -111,6 +111,9 @@ private const BtsParams c_BtsParams[NUM_BTS_CFG] := { /* BTS3 */ { trx_num := 1, tsc := 4 } } +private const RSL_IE_Body mr_conf_amr_5_90 := + valueof(RSL_IE_Body:{multirate_cfg := ts_RSL_MultirateCfg(true, 0, '00000100'B /* 5,90k */)}); + /* per-BTS state which we keep */ type record BTS_State { /* component reference to the IPA_Client component used for RSL */ @@ -4504,17 +4507,10 @@ testcase TC_assignment_codec_amr_f() runs on test_CT { /* Note: This setups the codec configuration. The parameter payload in * mr_conf must be consistant with the parameter codecElements in pars * and also must match the amr-config in osmo-bsc.cfg! */ - var RSL_IE_Body mr_conf := { - other := { - len := 2, - payload := '2804'O - } - }; - pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecAMR_F})); pars.ass_codec_list.codecElements[0].s0_7 := '00000100'B; /* 5,90k */ pars.ass_codec_list.codecElements[0].s8_15 := '01010111'B; - pars.expect_mr_conf_ie := mr_conf; + pars.expect_mr_conf_ie := mr_conf_amr_5_90; f_init(1, true); f_sleep(1.0); @@ -4539,17 +4535,10 @@ testcase TC_assignment_codec_amr_h() runs on test_CT { var MSC_ConnHdlr vc_conn; /* See note above */ - var RSL_IE_Body mr_conf := { - other := { - len := 2, - payload := '2804'O - } - }; - pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecAMR_H})); pars.ass_codec_list.codecElements[0].s0_7 := '00000100'B; /* 5,90k */ pars.ass_codec_list.codecElements[0].s8_15 := '00000111'B; - pars.expect_mr_conf_ie := mr_conf; + pars.expect_mr_conf_ie := mr_conf_amr_5_90; f_init(1, true); f_sleep(1.0); @@ -4598,17 +4587,11 @@ testcase TC_assignment_codec_amr_startmode_cruft() runs on test_CT { var TestHdlrParams pars := f_gen_test_hdlr_pars(); var MSC_ConnHdlr vc_conn; - var RSL_IE_Body mr_conf := { - other := { - len := 2, - payload := '2004'O /* <- expect ICMI=0, smod=00 */ - } - }; - pars.ass_codec_list := valueof(ts_BSSMAP_IE_CodecList({ts_CodecAMR_F})); pars.ass_codec_list.codecElements[0].s0_7 := '00000100'B; /* 5,90k */ pars.ass_codec_list.codecElements[0].s8_15 := '01010111'B; - pars.expect_mr_conf_ie := mr_conf; + /* expect ICMI=0, smod=00: */ + pars.expect_mr_conf_ie := valueof(RSL_IE_Body:{multirate_cfg := ts_RSL_MultirateCfg(false, 0, '00000100'B /* 5,90k */)}); f_init(1, true); f_sleep(1.0); diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn index 6f8846fa1..6c45ca93a 100644 --- a/library/RSL_Types.ttcn +++ b/library/RSL_Types.ttcn @@ -814,6 +814,31 @@ module RSL_Types { slot_count := slot_count } + /* 9.3.52, 3GPP TS 44.018 10.5.2.21aa */ + type record RSL_IE_MultirateCfg { + uint8_t len, + uint3_t mr_speech_ver, + boolean nscb, + boolean icmi, + BIT1 spare, + uint2_t start_mode, + BIT8 amr_codec_modes, + octetstring parameters + } with { + variant (len) "LENGTHTO(mr_speech_ver,nscb,icmi,spare,start_mode,amr_codec_modes,parameters)" + }; + template (value) RSL_IE_MultirateCfg ts_RSL_MultirateCfg(boolean icmi := true, uint2_t start_mode := 0, + BIT8 amr_codec_modes := '00000100'B /* 5,90k */) := { + len := 2, + mr_speech_ver := 1, + nscb := false, + icmi := icmi, + spare := '0'B, + start_mode := start_mode, + amr_codec_modes := amr_codec_modes, + parameters := ''O + } + /* 9.3.53 */ type record RSL_IE_MultirateCtrl { uint3_t spare, @@ -952,6 +977,7 @@ module RSL_Types { RSL_IE_MS_Power ms_power, RSL_IE_MS_Power_Parameters ms_power_params, uint8_t timing_adv, + RSL_IE_MultirateCfg multirate_cfg, RSL_IE_MultirateCtrl multirate_ctrl, uint8_t msg_id, RSL_IE_FrameNumber frame_nr, @@ -1014,6 +1040,7 @@ module RSL_Types { ms_power, iei = RSL_IE_MS_POWER; ms_power_params, iei = RSL_IE_MS_POWER_PARAM; timing_adv, iei = RSL_IE_TIMING_ADVANCE; + multirate_cfg, iei = RSL_IE_MR_CONFIG; multirate_ctrl, iei = RSL_IE_MR_CONTROL; msg_id, iei = RSL_IE_MSG_ID;