BSC: Implement RSL_IE_MultirateCfg and use it in BSC_Tests
Change-Id: I0a5ddce570c0fd70f096d897b0b609d20b552ff7
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 09cd717..46fb952 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -111,6 +111,9 @@
/* 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 @@
/* 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 @@
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 @@
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 6f8846f..6c45ca9 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -814,6 +814,31 @@
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 @@
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 @@
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;