<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18253">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Vadim Yanitskiy: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce TC_mo_ping_pong_with_ul_racap_egprs_only<br><br>Change-Id: I396dbd0ca200fbf9365c534f4d479f903d0417ff<br>---<br>M library/RLCMAC_Templates.ttcn<br>M pcu/PCU_Tests.ttcn<br>2 files changed, 90 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn</span><br><span>index be751d7..1774197 100644</span><br><span>--- a/library/RLCMAC_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_Templates.ttcn</span><br><span>@@ -93,6 +93,46 @@</span><br><span>                return CS_1;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ function f_rlcmac_block_ChCodingCommand2cs_mcs(ChCodingCommand chcc) return CodingScheme {</span><br><span style="color: hsl(120, 100%, 40%);">+            select (chcc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_CS1) { return CS_1; }</span><br><span style="color: hsl(120, 100%, 40%);">+                 case (CH_CODING_CS2) { return CS_2; }</span><br><span style="color: hsl(120, 100%, 40%);">+                 case (CH_CODING_CS3) { return CS_3; }</span><br><span style="color: hsl(120, 100%, 40%);">+                 case (CH_CODING_CS4) { return CS_4; }</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+             return CS_1;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   function f_rlcmac_block_EgprsChCodingCommand2cs_mcs(EgprsChCodingCommand echcc) return CodingScheme {</span><br><span style="color: hsl(120, 100%, 40%);">+         select (echcc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      case (CH_CODING_MCS1) { return MCS_1; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS2) { return MCS_2; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS3) { return MCS_3; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS4) { return MCS_4; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS5) { return MCS_5; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS6) { return MCS_6; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS7) { return MCS_7; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS8) { return MCS_8; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       case (CH_CODING_MCS9) { return MCS_9; }</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* CH_CODING_MCS5_7 */</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* CH_CODING_MCS6_9 */</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+             return MCS_1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* 1 -> CS_1 / MCS_1, 2 -> CS_2 / MCS_2, etc. */</span><br><span style="color: hsl(120, 100%, 40%);">+        function f_rlcmac_block_int2cs_mcs(integer n, boolean is_mcs) return CodingScheme {</span><br><span style="color: hsl(120, 100%, 40%);">+           var CodingScheme cs_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+              if (not is_mcs) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     int2enum(n - 1, cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+                      return cs_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      cs_mcs := MCS_0;</span><br><span style="color: hsl(120, 100%, 40%);">+                      int2enum(enum2int(cs_mcs) + n, cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+                       return cs_mcs;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* Coding and Puncturing Scheme indicator field for Header type 1 in EGPRS TBF or EC TBF or downlink EGPRS2 TBF */</span><br><span>   function f_rlcmac_cps_htype1_to_mcs(uint3_t cps) return CodingScheme {</span><br><span>               var CodingSchemeArray egprs_Header_type1_coding_puncturing_scheme_to_mcs := {</span><br><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 18189fa..81ff8be 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -262,6 +262,20 @@</span><br><span>    return 0; /* make compiler happy */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Get the Chan coding command from a dl block containing PACCH UL Assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_rlcmac_dl_block_get_assigned_ul_cs_mcs(RlcmacDlBlock dl_block)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT return CodingScheme {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(?)))) {</span><br><span style="color: hsl(120, 100%, 40%);">+            return f_rlcmac_block_ChCodingCommand2cs_mcs(dl_block.ctrl.payload.u.ul_assignment.gprs.ch_coding_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_EGPRS(?, tr_PktUlAssEgprsDynamic(?)))) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return f_rlcmac_block_EgprsChCodingCommand2cs_mcs(dl_block.ctrl.payload.u.ul_assignment.egprs.chan_coding_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     setverdict(fail, "DlBlock doesn't contain CS_MCS information:", dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      return CS_1; /* make compiler happy */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* TS 44.060 sec 12.3 Ack/Nack Description */</span><br><span> private function f_acknackdesc_ack_block(inout AckNackDescription desc, RlcmacDlBlock dl_block, BIT1 final_ack := '0'B)</span><br><span> {</span><br><span>@@ -1465,7 +1479,10 @@</span><br><span> /* Test scenario where MS wants to send some data on PDCH against SGSN and it is</span><br><span>  * answered, so TBFs for uplink and later for downlink are created.</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_TC_mo_ping_pong_2phase_access(template (value) MSRadioAccessCapabilityV ms_racap, template (present) CodingScheme exp_cs_mcs := ?) runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_mo_ping_pong_2phase_access(template (value) MSRadioAccessCapabilityV ms_racap,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           template (present) CodingScheme exp_ul_cs_mcs := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           template (present) CodingScheme exp_dl_cs_mcs := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT {</span><br><span>      var GsmRrMessage rr_imm_ass;</span><br><span>         var PacketUlAssign ul_tbf_ass;</span><br><span>       var PacketDlAssign dl_tbf_ass;</span><br><span>@@ -1477,6 +1494,7 @@</span><br><span>       var uint32_t dl_fn;</span><br><span>  var OCT4 tlli := '00000001'O;</span><br><span>        var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);</span><br><span style="color: hsl(120, 100%, 40%);">+   var CodingScheme cs_mcs;</span><br><span>     /* 0111 0xxx: Single block packet access; one block period on a PDCH is needed for two phase packet access or other RR signalling purpose. */</span><br><span>        var uint16_t ra := oct2int('70'O);</span><br><span> </span><br><span>@@ -1509,10 +1527,15 @@</span><br><span>             setverdict(fail, "Wrong TLLI ", dl_block.ctrl.payload.u.ul_assignment.identity.tlli, " received vs exp ", tlli);</span><br><span>                 f_shutdown(__BFILE__, __LINE__);</span><br><span>     }</span><br><span style="color: hsl(120, 100%, 40%);">+     cs_mcs := f_rlcmac_dl_block_get_assigned_ul_cs_mcs(dl_block);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not match(cs_mcs, exp_ul_cs_mcs)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Wrong CS_MCS ", cs_mcs, " received vs exp ", exp_ul_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> </span><br><span>        /* Send one UL block (without TLLI since we are in Second-Phase Access)</span><br><span>         and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">-    f_tx_rlcmac_ul_n_blocks(f_rlcmac_dl_block_get_tfi(dl_block), 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_tx_rlcmac_ul_n_blocks(f_rlcmac_dl_block_get_tfi(dl_block), 1);  /* TODO: send using cs_mcs */</span><br><span> </span><br><span>  //f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</span><br><span>     /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span>@@ -1528,7 +1551,7 @@</span><br><span>       f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span> </span><br><span>     /* After acking the dl assignment, dl tbf goes into FLOW state and PCU will provide DL data when BTS asks for it */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_rx_rlcmac_dl_block_exp_data(dl_block, dl_fn, data, 0, exp_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_rx_rlcmac_dl_block_exp_data(dl_block, dl_fn, data, 0, exp_dl_cs_mcs);</span><br><span> </span><br><span>  /* ACK the DL block */</span><br><span>       f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);</span><br><span>@@ -1544,9 +1567,29 @@</span><br><span>             gprsextendeddynalloccap := '0'B</span><br><span>      };</span><br><span>   var MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, omit)) };</span><br><span style="color: hsl(0, 100%, 40%);">-       var CodingScheme exp_cs_mcs := CS_2;</span><br><span style="color: hsl(120, 100%, 40%);">+  var CodingScheme exp_ul_cs_mcs := f_rlcmac_block_int2cs_mcs(g_mcs_initial_ul, false);</span><br><span style="color: hsl(120, 100%, 40%);">+ var CodingScheme exp_dl_cs_mcs := CS_2;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     f_TC_mo_ping_pong_2phase_access(ms_racap, exp_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_TC_mo_ping_pong_2phase_access(ms_racap, exp_ul_cs_mcs, exp_dl_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_mo_ping_pong_with_ul_racap_egprs_only() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Initialize the PCU interface abstraction with EGPRS-only */</span><br><span style="color: hsl(120, 100%, 40%);">+        g_egprs_only := true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       var MultislotCap_GPRS mscap_gprs := {</span><br><span style="color: hsl(120, 100%, 40%);">+         gprsmultislotclass := '00011'B,</span><br><span style="color: hsl(120, 100%, 40%);">+               gprsextendeddynalloccap := '0'B</span><br><span style="color: hsl(120, 100%, 40%);">+       };</span><br><span style="color: hsl(120, 100%, 40%);">+    var MultislotCap_EGPRS mscap_egprs := {</span><br><span style="color: hsl(120, 100%, 40%);">+               egprsmultislotclass := '00011'B,</span><br><span style="color: hsl(120, 100%, 40%);">+              egprsextendeddynalloccap := '0'B</span><br><span style="color: hsl(120, 100%, 40%);">+      };</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, mscap_egprs)) };</span><br><span style="color: hsl(120, 100%, 40%);">+      var CodingScheme exp_ul_cs_mcs := f_rlcmac_block_int2cs_mcs(g_mcs_initial_ul, true);</span><br><span style="color: hsl(120, 100%, 40%);">+  var CodingScheme exp_dl_cs_mcs := MCS_1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_TC_mo_ping_pong_2phase_access(ms_racap, exp_ul_cs_mcs, exp_dl_cs_mcs);</span><br><span> }</span><br><span> </span><br><span> /* Test scenario where SGSN wants to send some data against MS and it is</span><br><span>@@ -2108,6 +2151,8 @@</span><br><span>        execute( TC_egprs_pkt_chan_req_signalling() );</span><br><span>       execute( TC_egprs_pkt_chan_req_one_phase() );</span><br><span>        execute( TC_egprs_pkt_chan_req_two_phase() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_mo_ping_pong_with_ul_racap_egprs_only() );</span><br><span> }</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18253">change 18253</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18253"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I396dbd0ca200fbf9365c534f4d479f903d0417ff </div>
<div style="display:none"> Gerrit-Change-Number: 18253 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>