<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17935">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce test TC_mo_ping_pong_with_ul_racap<br><br>Test sending MS RA capabilities through Packet Resource Request to<br>update GPRS multislot class.<br>EGPRS multislot will come in a later commit.<br><br>Change-Id: I5026d8b78a3fb82093956b65989d18fa6f6d5424<br>---<br>M library/L3_Templates.ttcn<br>M library/RLCMAC_CSN1_Types.ttcn<br>M library/RLCMAC_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>4 files changed, 178 insertions(+), 52 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/35/17935/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn</span><br><span>index 7c22415..8af9acc 100644</span><br><span>--- a/library/L3_Templates.ttcn</span><br><span>+++ b/library/L3_Templates.ttcn</span><br><span>@@ -20,6 +20,7 @@</span><br><span> import from MobileL3_CC_Types all;</span><br><span> import from MobileL3_GMM_SM_Types all;</span><br><span> import from MobileL3_SMS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RLCMAC_CSN1_Types all;</span><br><span> </span><br><span> /* TS 24.007 Table 11.3 TI Flag */</span><br><span> const BIT1 c_TIF_ORIG := '0'B;</span><br><span>@@ -2012,33 +2013,6 @@</span><br><span>   cnSpecificDRXCycleLength := '0000'B /* SI value used */</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template (value) AccessCapabilitiesStruct ts_AccesssCap := {</span><br><span style="color: hsl(0, 100%, 40%);">-   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(0, 100%, 40%);">- accessCapabilities := {</span><br><span style="color: hsl(0, 100%, 40%);">-         rfPowerCapability := '001'B, /* FIXME */</span><br><span style="color: hsl(0, 100%, 40%);">-                presenceBitA5 := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-          a5bits := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-         esind := '1'B,</span><br><span style="color: hsl(0, 100%, 40%);">-          psbit := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-          vgcs := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-           vbs := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-            presenceBitMultislot := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-           multislotcap := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-           accessCapAdditionsAfterRel97 := omit</span><br><span style="color: hsl(0, 100%, 40%);">-    },</span><br><span style="color: hsl(0, 100%, 40%);">-      spare_bits := omit</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att) := {</span><br><span style="color: hsl(0, 100%, 40%);">-       mSRACapabilityValues := {</span><br><span style="color: hsl(0, 100%, 40%);">-               mSRACapabilityValuesExclude1111 := {</span><br><span style="color: hsl(0, 100%, 40%);">-                    accessTechnType := '0001'B, /* E-GSM */</span><br><span style="color: hsl(0, 100%, 40%);">-                 accessCapabilities := ts_AccesssCap</span><br><span style="color: hsl(0, 100%, 40%);">-             }</span><br><span style="color: hsl(0, 100%, 40%);">-       },</span><br><span style="color: hsl(0, 100%, 40%);">-      presenceBitMSRACap := '0'B</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> template (value) MSRadioAccessCapabilityLV ts_MS_RaCapa := {</span><br><span>         lengthIndicator := 0, /* overwritten */</span><br><span>      msRadioAccessCapabilityV := {</span><br><span>diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn</span><br><span>index 9ceb339..45c1f3a 100644</span><br><span>--- a/library/RLCMAC_CSN1_Types.ttcn</span><br><span>+++ b/library/RLCMAC_CSN1_Types.ttcn</span><br><span>@@ -420,10 +420,9 @@</span><br><span>            variant (tlli) "BYTEORDER(first)"</span><br><span>  };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* 12.30 MS Radio Access Capability 2 (feature bitmask)</span><br><span style="color: hsl(0, 100%, 40%);">-  * (value part, see 3GPP TS 24.008, 10.5.5.12a) */</span><br><span style="color: hsl(120, 100%, 40%);">+    /* TS 44.060 sec 12.30 MS Radio Access Capability 2</span><br><span style="color: hsl(120, 100%, 40%);">+    * (for value part, see 3GPP TS 24.008 sec 10.5.5.12a and table 10.5.146) */</span><br><span>         type union MSRadioAccCap2 {</span><br><span style="color: hsl(0, 100%, 40%);">-             /* TODO: see table 10.5.146/3GPP TS 24.008 */</span><br><span>                MSRadioAccessCapabilityV     msRadioAccessCapabilityV</span><br><span>        };</span><br><span> </span><br><span>@@ -676,29 +675,107 @@</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_RES_REQ(</span><br><span style="color: hsl(0, 100%, 40%);">-           GprsTlli tlli, ChannelReqDescription ch_req_desc,</span><br><span style="color: hsl(0, 100%, 40%);">-               RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE</span><br><span style="color: hsl(0, 100%, 40%);">-        ) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        private function f_presece_bit_MultislotCap_GPRS(template (omit) MultislotCap_GPRS mscap_gprs) return BIT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+          if (istemplatekind(mscap_gprs, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   return '0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             return '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     private function f_presece_bit_MultislotCap_EGPRS(template (omit) MultislotCap_EGPRS mscap_egprs) return BIT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (istemplatekind(mscap_egprs, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  return '0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             return '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att := '0001'B /* E-GSM */, template (omit) MultislotCap_GPRS mscap_gprs := omit, template (omit) MultislotCap_EGPRS mscap_egprs := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           mSRACapabilityValues := {</span><br><span style="color: hsl(120, 100%, 40%);">+                     mSRACapabilityValuesExclude1111 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          accessTechnType := att, /* E-GSM */</span><br><span style="color: hsl(120, 100%, 40%);">+                           accessCapabilities := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                                       accessCapabilities := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                               rfPowerCapability := '001'B, /* FIXME */</span><br><span style="color: hsl(120, 100%, 40%);">+                                              presenceBitA5 := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                a5bits := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               esind := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                psbit := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                vgcs := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         vbs := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                          presenceBitMultislot := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         multislotcap := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     presenceBitHscsd := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     hscsdmultislotclass := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  presenceBitGprs := f_presece_bit_MultislotCap_GPRS(mscap_gprs),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       gprsmultislot := mscap_gprs,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  presenceBitSms := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       multislotCap_SMS := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     multislotCapAdditionsAfterRel97 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                  presenceBitEcsdmulti := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 ecsdmultislotclass := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   presenceBitEgprsmulti := f_presece_bit_MultislotCap_EGPRS(mscap_egprs),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                       multislotCap_EGPRS := mscap_egprs,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                    presenceBitDtmGprsmulti := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                      multislotCapdtmgprsmultislotsubclass := omit</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%);">+                                            accessCapAdditionsAfterRel97 := omit</span><br><span style="color: hsl(120, 100%, 40%);">+                                  },</span><br><span style="color: hsl(120, 100%, 40%);">+                                    spare_bits := omit</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 style="color: hsl(120, 100%, 40%);">+            presenceBitMSRACap := '0'B</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%);">+  private function f_presece_bit_MSRadioAccessCapabilityV(template (omit) MSRadioAccessCapabilityV ms_rac) return BIT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (istemplatekind(ms_rac, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       return '0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             return '1'B;</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%);">+   private function f_template_MSRadioAccessCapabilityV_to_MSRadioAccCap2(template (omit) MSRadioAccessCapabilityV ms_rac) return template (omit) MSRadioAccCap2 {</span><br><span style="color: hsl(120, 100%, 40%);">+               var template (omit) MSRadioAccCap2 ms_rac2 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (istemplatekind(ms_rac, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       return ms_rac2;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             ms_rac2 := { msRadioAccessCapabilityV := ms_rac };</span><br><span style="color: hsl(120, 100%, 40%);">+            return ms_rac2;</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%);">+   private const ChannelReqDescription c_ChReqDesc_default := {</span><br><span style="color: hsl(120, 100%, 40%);">+          peak_tput_class := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+         priority := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                rlc_mode := RLC_MODE_UNACKNOWLEDGED,</span><br><span style="color: hsl(120, 100%, 40%);">+          llc_pdu_type := LLC_PDU_IS_NOT_SACK_OR_ACK,</span><br><span style="color: hsl(120, 100%, 40%);">+           RlcOctetCount := 0</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%);">+   /* TS 44.060 sec 11.2.16 */</span><br><span style="color: hsl(120, 100%, 40%);">+   template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_RES_REQ(GprsTlli tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (omit) MSRadioAccessCapabilityV ms_rac,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              ChannelReqDescription ch_req_desc := c_ChReqDesc_default,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE)</span><br><span style="color: hsl(120, 100%, 40%);">+        := {</span><br><span>                 msg_type := PACKET_RESOURCE_REQUEST,</span><br><span>                 u := {</span><br><span>                       resource_req := {</span><br><span style="color: hsl(0, 100%, 40%);">-                               acc_type_presence := '1'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                              acc_type := acc_type,</span><br><span style="color: hsl(0, 100%, 40%);">-                           id_type := '1'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                                id := { tlli := tlli },</span><br><span style="color: hsl(0, 100%, 40%);">-                         ms_rac2_presence := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                               ms_rac2 := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-                                ch_req_desc := ch_req_desc,</span><br><span style="color: hsl(0, 100%, 40%);">-                             change_mark_presence := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                           change_mark := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-                            C_val := '000000'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                             sign_var_presence := '0'B,</span><br><span style="color: hsl(0, 100%, 40%);">-                              sign_var := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-                               I_levels := {</span><br><span style="color: hsl(0, 100%, 40%);">-                                   iNone, iNone, iNone, iNone,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     iNone, iNone, iNone, iNone</span><br><span style="color: hsl(0, 100%, 40%);">-                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                                     acc_type_presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    acc_type := acc_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 id_type := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      id := { tlli := tlli },</span><br><span style="color: hsl(120, 100%, 40%);">+                                       ms_rac2_presence := f_presece_bit_MSRadioAccessCapabilityV(ms_rac),</span><br><span style="color: hsl(120, 100%, 40%);">+                                   ms_rac2 := f_template_MSRadioAccessCapabilityV_to_MSRadioAccCap2(ms_rac),</span><br><span style="color: hsl(120, 100%, 40%);">+                                     ch_req_desc := ch_req_desc,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   change_mark_presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 change_mark := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  C_val := '000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   sign_var_presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    sign_var := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     I_levels := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 iNone, iNone, iNone, iNone,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   iNone, iNone, iNone, iNone</span><br><span style="color: hsl(120, 100%, 40%);">+                                    }</span><br><span>                    }</span><br><span>            }</span><br><span>    }</span><br><span>diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn</span><br><span>index dbcf4ae..086eb7b 100644</span><br><span>--- a/library/RLCMAC_Types.ttcn</span><br><span>+++ b/library/RLCMAC_Types.ttcn</span><br><span>@@ -13,6 +13,7 @@</span><br><span>       import from General_Types all;</span><br><span>       import from Osmocom_Types all;</span><br><span>       import from GSM_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+    import from MobileL3_GMM_SM_Types all;</span><br><span>       import from RLCMAC_CSN1_Types all;</span><br><span> </span><br><span>       /* TS 44.060 10.4.7 */</span><br><span>@@ -445,6 +446,32 @@</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template RlcmacDlBlock tr_RLCMAC_UL_PACKET_ASS(template uint3_t usf := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                ctrl := {</span><br><span style="color: hsl(120, 100%, 40%);">+                     mac_hdr := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          payload_type := (MAC_PT_RLCMAC_NO_OPT, MAC_PT_RLCMAC_OPT),</span><br><span style="color: hsl(120, 100%, 40%);">+                            rrbp:= ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                             rrbp_valid := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                              usf := usf</span><br><span style="color: hsl(120, 100%, 40%);">+                    },</span><br><span style="color: hsl(120, 100%, 40%);">+                    opt := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                     payload := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          msg_type := PACKET_UL_ASSIGNMENT,</span><br><span style="color: hsl(120, 100%, 40%);">+                             u := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        ul_assignment := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            page_mode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               persistence_levels_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              persistence_levels := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              identity := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                is_egprs := ?,  /* msg escape */</span><br><span style="color: hsl(120, 100%, 40%);">+                                              gprs := *</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 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 style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* Receive Template for Uplink ACK/NACK */</span><br><span>   template RlcmacDlBlock tr_RLCMAC_UL_ACK_NACK(template uint5_t ul_tfi, template GprsTlli tlli := ?) := {</span><br><span>              ctrl := {</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 8e1d349..7c525e2 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -26,6 +26,7 @@</span><br><span> import from Osmocom_VTY_Functions all;</span><br><span> import from TELNETasp_PortType all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_GMM_SM_Types all;</span><br><span> import from RLCMAC_CSN1_Types all;</span><br><span> import from RLCMAC_Types all;</span><br><span> </span><br><span>@@ -491,6 +492,20 @@</span><br><span>    poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_rx_rlcmac_dl_block_exp_pkt_ul_ass(out RlcmacDlBlock dl_block, out uint32_t poll_fn)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var uint32_t dl_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block(dl_block, dl_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (not match(dl_block, tr_RLCMAC_UL_PACKET_ASS())) {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Failed to match Packet Uplink Assignment");</span><br><span style="color: hsl(120, 100%, 40%);">+                mtc.stop;</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%);">+        poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);</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> private function f_rx_rlcmac_dl_block_exp_pkt_pag_req(out RlcmacDlBlock dl_block)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span>         var uint32_t dl_fn;</span><br><span>@@ -1164,7 +1179,7 @@</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%);">-testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_mo_ping_pong(template (omit) MSRadioAccessCapabilityV ms_racap := omit, template (present) CodingScheme exp_cs_mcs := ?) 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>@@ -1198,6 +1213,18 @@</span><br><span>              mtc.stop;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (not istemplatekind(ms_racap, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Send PACKET RESOURCE REQUEST to upgrade to EGPRS</span><br><span style="color: hsl(120, 100%, 40%);">+            * (see 3GPP TS 04.60 "7.1.3.1 Initiation of the Packet resource request procedure")</span><br><span style="color: hsl(120, 100%, 40%);">+                 */</span><br><span style="color: hsl(120, 100%, 40%);">+           f_tx_rlcmac_ul_block(ts_RLC_UL_CTRL_ACK(valueof(ts_RlcMacUlCtrl_PKT_RES_REQ(tlli, ms_racap))), 0);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_rx_rlcmac_dl_block_exp_pkt_ul_ass(dl_block, sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (dl_block.ctrl.payload.u.ul_assignment.identity.tlli.tlli != tlli) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       setverdict(fail, "Wrong TLLI ", dl_block.ctrl.payload.u.ul_assignment.identity.tlli, " received vs exp ", tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+                  mtc.stop;</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>  /* Send one UL block and make sure it is ACKED fine */</span><br><span>       f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);</span><br><span>      f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</span><br><span>@@ -1219,13 +1246,33 @@</span><br><span> </span><br><span>         /* Wait timer X2002 and DL block is available after CCCH IMM ASS: */</span><br><span>         f_sleep(X2002);</span><br><span style="color: hsl(0, 100%, 40%);">- f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0, exp_cs_mcs);</span><br><span> </span><br><span>  /* ACK the DL block */</span><br><span>       f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B);</span><br><span>     f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test scenario where MS wants to send some data on PDCH against SGSN and it is</span><br><span style="color: hsl(120, 100%, 40%);">+ * answered, so TBFs for uplink and later for downlink are created.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var CodingScheme exp_cs_mcs := CS_1;</span><br><span style="color: hsl(120, 100%, 40%);">+  f_TC_mo_ping_pong(omit, exp_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 style="color: hsl(120, 100%, 40%);">+testcase TC_mo_ping_pong_with_ul_racap() runs on RAW_PCU_Test_CT {</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 MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, omit)) };</span><br><span style="color: hsl(120, 100%, 40%);">+     var CodingScheme exp_cs_mcs := CS_2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        f_TC_mo_ping_pong(ms_racap, exp_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test scenario where SGSN wants to send some data against MS and it is</span><br><span>  * answered by the MS on PDCH, so TBFs for downlink and later for uplink are created.</span><br><span>  */</span><br><span>@@ -1573,6 +1620,7 @@</span><br><span>    execute( TC_t3169() );</span><br><span>       execute( TC_t3193() );</span><br><span>       execute( TC_mo_ping_pong() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_mo_ping_pong_with_ul_racap() );</span><br><span>  execute( TC_mt_ping_pong() );</span><br><span>        execute( TC_mt_ping_pong_with_dl_racap() );</span><br><span>  execute( TC_imm_ass_dl_block_retrans() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17935">change 17935</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/+/17935"/><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: I5026d8b78a3fb82093956b65989d18fa6f6d5424 </div>
<div style="display:none"> Gerrit-Change-Number: 17935 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>