fixeria has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33072?usp=email )

Change subject: BTS_Tests: add TC_data_rtp_tch* for CSD
......................................................................

BTS_Tests: add TC_data_rtp_tch* for CSD

Change-Id: I9a0dc0fcf722f862d8dcf04660d4448662210f44
Related: osmo-bts.git I08ffbf8e79ce76a586d61f5463890c6e72a6d9b9
Related: osmocom-bb.git I0d7389a9a5f7019b9316ab1c0115797ff54a0e41
Related: OS#1572, OS#4396
---
M bts/BTS_Tests.ttcn
M bts/expected-results.xml
2 files changed, 229 insertions(+), 0 deletions(-)

Approvals:
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  laforge: Looks good to me, approved




diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 888abf5..3fe6120 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -8572,6 +8572,210 @@
        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 @@
        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 a78755c..61c0b60 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'/>

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33072?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I9a0dc0fcf722f862d8dcf04660d4448662210f44
Gerrit-Change-Number: 33072
Gerrit-PatchSet: 4
Gerrit-Owner: fixeria <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to