aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2023-05-26 18:45:29 +0700
committerfixeria <vyanitskiy@sysmocom.de>2023-09-04 20:27:44 +0000
commit981bc2cccb14094bc88adc37bfbda4484d7b34bd (patch)
tree9e0b226c98bba95dc53acd85826e1b47992537d3
parentfde1b81183e5ed573f1d0afc2fd6c8643700f822 (diff)
BTS_Tests: add TC_data_rtp_tch* for CSD
-rw-r--r--bts/BTS_Tests.ttcn211
-rw-r--r--bts/expected-results.xml6
2 files changed, 217 insertions, 0 deletions
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 888abf54..3fe6120a 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -8572,6 +8572,210 @@ testcase TC_speech_osmux_tchh() runs on test_CT {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
}
+/* CSD channel tests */
+private function f_TC_data_rtp_loopback(charstring id) runs on ConnHdlr {
+ var octetstring udata := ''O;
+ var integer payload_len;
+ var L1ctlMessage l1_dl;
+ timer Td;
+
+ log("Testing channel mode ", g_pars.chan_mode);
+
+ select (g_pars.chan_mode) {
+ case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_14k4, RSL_CMOD_CSD_NT_14k5)))
+ { payload_len := 290; }
+ case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_9k6, RSL_CMOD_CSD_NT_12k0)))
+ { payload_len := 4 * 60; }
+ case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_4k8, RSL_CMOD_CSD_NT_6k0)))
+ { payload_len := 2 * 60; }
+ case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, (RSL_CMOD_CSD_T_4k8, RSL_CMOD_CSD_NT_6k0)))
+ { payload_len := 4 * 60; }
+ case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, (RSL_CMOD_CSD_T_2k4, RSL_CMOD_CSD_T_1k2,
+ RSL_CMOD_CSD_T_600, RSL_CMOD_CSD_T_1200_75)))
+ { payload_len := 2 * 36; }
+ case (tr_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, (RSL_CMOD_CSD_T_2k4, RSL_CMOD_CSD_T_1k2,
+ RSL_CMOD_CSD_T_600, RSL_CMOD_CSD_T_1200_75)))
+ { payload_len := 4 * 36; }
+ case else {
+ setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+ }
+
+ /* Generate a pseudo-random payload */
+ for (var integer i := 0; i < payload_len; i := i + 1) {
+ udata := udata & int2oct(i mod 2, 1);
+ }
+
+ /* Activate the RTP emulation */
+ f_rtpem_activate(mode := RTPEM_MODE_LOOPBACK, rtp_pt := 120);
+
+ /* Tune to the dedicated channel */
+ f_l1_tune(L1CTL);
+ f_est_dchan();
+
+ /* Send a pseudo-random data frame on the Uplink */
+ log("Sending Uplink TCH (len=", lengthof(udata), "): ", udata);
+ L1CTL.send(ts_L1CTL_TRAFFIC_REQ(g_chan_nr, ts_RslLinkID_DCCH(0), udata));
+
+ /* Expect this frame to show up on the Downlink */
+ Td.start(4.0);
+ alt {
+ [] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr, frame := udata)) {
+ log("TCH received (len=", lengthof(udata), "): ", udata);
+ setverdict(pass);
+ Td.stop;
+ }
+ [] L1CTL.receive(tr_L1CTL_TRAFFIC_IND(g_chan_nr)) -> value l1_dl {
+ var octetstring ddata := l1_dl.payload.traffic_ind.data;
+ log("TCH received (len=", lengthof(ddata), "): ", ddata);
+ repeat;
+ }
+ [] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr)) -> value l1_dl {
+ var octetstring ddata := l1_dl.payload.data_ind.payload;
+ log("FACCH received: ", ddata);
+ repeat;
+ }
+ [] as_l1_sacch();
+ [] L1CTL.receive { repeat; }
+ [] Td.timeout {
+ setverdict(fail, "Timeout waiting for matching Downlink data frame");
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+ }
+
+ /* TODO: send and expect FACCH */
+
+ f_rtpem_mode(RTPEM_CTRL, RTPEM_MODE_NONE);
+ f_L1CTL_DM_REL_REQ(L1CTL, g_chan_nr);
+ f_rsl_chan_deact();
+ f_rslem_unregister(0, g_chan_nr);
+}
+testcase TC_data_rtp_tchf144() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/F14.4 (14k5 radio interface rate), transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_14k4)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ /* TS1, TCH/F14.4 (14k5 radio interface rate), non-transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_NT_14k5)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
+testcase TC_data_rtp_tchf96() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/F9.6 (12k radio interface rate), transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_9k6)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ /* TS1, TCH/F9.6 (12k radio interface rate), non-transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_NT_12k0)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
+testcase TC_data_rtp_tchf48() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/F4.8 (6k radio interface rate), transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_4k8)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ /* TS1, TCH/F4.8 (6k radio interface rate), non-transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_NT_6k0)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
+testcase TC_data_rtp_tchh48() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/H4.8 (6k radio interface rate), transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_T_4k8)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ /* TS1, TCH/H4.8 (6k radio interface rate), non-transparent service */
+ pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_NT_6k0)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
+testcase TC_data_rtp_tchf24() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/F2.4 (3k6 radio interface rate), transparent services only */
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_2k4)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ pars := valueof(t_Pars(ts_RslChanNr_Bm(1),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_F, RSL_CMOD_CSD_T_1k2)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
+testcase TC_data_rtp_tchh24() runs on test_CT {
+ var ConnHdlr vc_conn;
+ var ConnHdlrPars pars;
+
+ f_init();
+
+ /* TS1, TCH/H2.4 (3k6 radio interface rate), transparent services only */
+ pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_T_2k4)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ pars := valueof(t_Pars(ts_RslChanNr_Lm(5, 0),
+ ts_RSL_ChanMode_DATA(RSL_CHRT_TCH_H, RSL_CMOD_CSD_T_1k2)));
+ vc_conn := f_start_handler(refers(f_TC_data_rtp_loopback), pars);
+ vc_conn.done;
+
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+}
+
+
private function f_TC_early_immediate_assignment(charstring id) runs on ConnHdlr {
var GsmFrameNumber fn;
var ChannelDescription ch_desc;
@@ -9178,6 +9382,13 @@ control {
execute( TC_speech_osmux_tchf() );
execute( TC_speech_osmux_tchh() );
+ execute( TC_data_rtp_tchf144() );
+ execute( TC_data_rtp_tchf96() );
+ execute( TC_data_rtp_tchf48() );
+ execute( TC_data_rtp_tchh48() );
+ execute( TC_data_rtp_tchf24() );
+ execute( TC_data_rtp_tchh24() );
+
execute( TC_early_immediate_assignment() );
execute( TC_acch_overpower_rxqual_thresh() );
diff --git a/bts/expected-results.xml b/bts/expected-results.xml
index a78755ca..61c0b605 100644
--- a/bts/expected-results.xml
+++ b/bts/expected-results.xml
@@ -180,6 +180,12 @@
<testcase classname='BTS_Tests' name='TC_speech_rtp_tchh' time='MASKED'/>
<testcase classname='BTS_Tests' name='TC_speech_osmux_tchf' time='MASKED'/>
<testcase classname='BTS_Tests' name='TC_speech_osmux_tchh' time='MASKED'/>
+ <testcase classname='BTS_Tests' name='TC_data_rtp_tchf144' time='MASKED'/>
+ <testcase classname='BTS_Tests' name='TC_data_rtp_tchf96' time='MASKED'/>
+ <testcase classname='BTS_Tests' name='TC_data_rtp_tchf48' time='MASKED'/>
+ <testcase classname='BTS_Tests' name='TC_data_rtp_tchh48' time='MASKED'/>
+ <testcase classname='BTS_Tests' name='TC_data_rtp_tchf24' time='MASKED'/>
+ <testcase classname='BTS_Tests' name='TC_data_rtp_tchh24' time='MASKED'/>
<testcase classname='BTS_Tests' name='TC_early_immediate_assignment' time='MASKED'/>
<testcase classname='BTS_Tests' name='TC_acch_overpower_rxqual_thresh' time='MASKED'/>
<testcase classname='BTS_Tests' name='TC_acch_overpower_rxqual_thresh_dtx' time='MASKED'/>