From fde1b81183e5ed573f1d0afc2fd6c8643700f822 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Fri, 1 Sep 2023 17:51:26 +0700 Subject: 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 --- bts/BTS_Tests.ttcn | 77 +++++++++++++++++++++++++----------------------------- 1 file 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; } -- cgit v1.2.3