aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-09-01 17:51:26 +0700
committerfixeria <vyanitskiy@sysmocom.de>2023-09-04 20:27:44 +0000
commitfde1b81183e5ed573f1d0afc2fd6c8643700f822 (patch)
tree06f795d040e8392255675c6c62bc1b31b36c6994
parent4d728c9670f9ddd7a18c6c4c52952e551980b359 (diff)
BTS_Tests: decouple payload generation from f_rtpem_activate()
This function is going to be used by the upcoming testcases for CSD specific channel modes. Generating the Rx/Tx payload(s) now becomes the duty of the calling function. So far the only user of this API is f_TC_speech_rtp(), so move the speech payload generation there. Change-Id: I9e823c33b1dbbadd57bc63df25b8ddf368d76232 Related: OS#1572
-rw-r--r--bts/BTS_Tests.ttcn77
1 files changed, 36 insertions, 41 deletions
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index cd136887..888abf54 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2607,9 +2607,8 @@ private function get_start_amr_ft() runs on ConnHdlr return integer {
}
/* Initialize and start the RTP emulation component for a ConnHdlr */
-friend function f_rtpem_activate(inout octetstring payload,
- RtpemConfig cfg := c_RtpemDefaultCfg,
- RtpemMode mode := RTPEM_MODE_BIDIR,
+friend function f_rtpem_activate(RtpemConfig cfg := c_RtpemDefaultCfg,
+ RtpemMode mode := RTPEM_MODE_LOOPBACK,
uint7_t rtp_pt := 0)
runs on ConnHdlr {
/* Step 0: initialize, connect and start the emulation component */
@@ -2621,38 +2620,6 @@ runs on ConnHdlr {
vc_RTPEM.start(RTP_Emulation.f_main());
/* Step 1: configure the RTP parameters */
- var integer payload_len := 0;
- var octetstring hdr := ''O;
- var OCT1 pad := '00'O;
-
- select (g_pars.chan_mode) {
- case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */
- { payload_len := 33; hdr := 'D0'O; pad := 'FF'O; }
- case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */
- { payload_len := 15; hdr := '00'O; }
- case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */
- { payload_len := 31; hdr := 'C0'O; }
- case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)) /* TCH/AFS */
- {
- var integer amr_ft := get_start_amr_ft();
- payload_len := f_amrft_payload_len(amr_ft) + 2;
- hdr := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
- }
- case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)) /* TCH/AHS */
- {
- var integer amr_ft := get_start_amr_ft();
- payload_len := f_amrft_payload_len(amr_ft) + 2;
- hdr := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
- }
- case else {
- setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
- Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
- }
- }
-
- /* Pad the payload to conform the expected length */
- payload := f_pad_oct(hdr & payload, payload_len, pad);
- cfg.tx_payloads[0].fixed_payload := payload;
f_rtpem_configure(RTPEM_CTRL, cfg);
/* Step 2: bind the RTP emulation to the configured address */
@@ -8351,9 +8318,9 @@ testcase TC_speech_no_rtp_tchh() runs on test_CT {
/* Verify handling of Downlink and Uplink speech frames */
private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
+ var octetstring payload;
var L1ctlMessage l1_dl;
var PDU_RTP rtp_pdu;
- var octetstring pl;
timer Td, Tu;
log("Testing channel mode ", g_pars.chan_mode);
@@ -8361,9 +8328,37 @@ private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
f_l1_tune(L1CTL);
f_est_dchan();
+ select (g_pars.chan_mode) {
+ case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */
+ { payload := f_pad_oct('D0'O & f_rnd_octstring(6), 33, 'FF'O); }
+ case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */
+ { payload := f_pad_oct('00'O & f_rnd_octstring(6), 15, '00'O); }
+ case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */
+ { payload := f_pad_oct('C0'O & f_rnd_octstring(6), 31, '00'O); }
+ case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM3)) /* TCH/AFS */
+ {
+ var integer amr_ft := get_start_amr_ft();
+ var integer payload_len := f_amrft_payload_len(amr_ft) + 2;
+ payload := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
+ payload := f_pad_oct(payload & f_rnd_octstring(6), payload_len, '00'O);
+ }
+ case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3)) /* TCH/AHS */
+ {
+ var integer amr_ft := get_start_amr_ft();
+ var integer payload_len := f_amrft_payload_len(amr_ft) + 2;
+ payload := enc_RTP_AMR_Hdr(valueof(ts_RTP_AMR_Hdr(amr_ft, amr_ft, '1'B)));
+ payload := f_pad_oct(payload & f_rnd_octstring(6), payload_len, '00'O);
+ }
+ case else {
+ setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+ }
+
/* Activate the RTP emulation */
- pl := f_rnd_octstring(6);
- f_rtpem_activate(pl);
+ var RtpemConfig cfg := c_RtpemDefaultCfg;
+ cfg.tx_payloads[0].fixed_payload := payload;
+ f_rtpem_activate(cfg, RTPEM_MODE_BIDIR);
/* Give the scheduler some time to fill up the buffers */
f_sleep(2.0);
@@ -8373,7 +8368,7 @@ private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
/* Make sure that Downlink frames are received at the UE */
Td.start(2.0);
alt {
- [] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := pl)) -> value l1_dl {
+ [] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := payload)) -> value l1_dl {
var octetstring data := l1_dl.payload.traffic_ind.data;
log("TCH received (len=", lengthof(data), "): ", data);
L1CTL.send(ts_L1CTL_TRAFFIC_REQ(g_chan_nr, l1_dl.dl_info.link_id,
@@ -8383,7 +8378,7 @@ private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
[] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := ?)) -> value l1_dl {
setverdict(fail, "Rx unexpected Downlink speech frame ",
"(", l1_dl.payload.traffic_ind.data, ") ",
- "expected (", pl, ")");
+ "expected (", payload, ")");
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}
[] as_l1_sacch();
@@ -8401,7 +8396,7 @@ private function f_TC_speech_rtp(charstring id) runs on ConnHdlr {
[] as_l1_tch_loop();
[] as_l1_sacch();
[] RTPEM_DATA.receive(PDU_RTP:?) -> value rtp_pdu {
- if (rtp_pdu.data != pl)
+ if (rtp_pdu.data != payload)
{ repeat; }
}
[] RTPEM_DATA.receive { repeat; }