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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU_Tests: verify handling of frequency hopping parameters<br><br>Change-Id: I1beda9224998848f9243237413e5ae3e0ddab8a5<br>Related: SYS#4868, OS#4547<br>---<br>M pcu/PCU_Tests.ttcn<br>1 file changed, 271 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index dab87e0..1c77256 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -2069,6 +2069,266 @@</span><br><span>         f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_pcuif_fh_check_imm_ass(in PCUIF_info_ind info_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         in GsmRrMessage rr_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       var ImmediateAssignment ia := rr_msg.payload.imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+ var PCUIF_InfoTrxTs ts := info_ind.trx.v10[0].ts[ia.pkt_chan_desc.tn];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PacketChannelDescription tr_pkt_chan_desc := {</span><br><span style="color: hsl(120, 100%, 40%);">+           channel_Type_spare := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+              tn := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+              tsc := ts.tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+                presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             zero := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         one := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      maio := ts.maio,</span><br><span style="color: hsl(120, 100%, 40%);">+                      hsn := ts.hsn</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%);">+  if (not match(ia.pkt_chan_desc, tr_pkt_chan_desc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          setverdict(fail, "Packet Channel Description does not match: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                        ia.pkt_chan_desc, " vs ", tr_pkt_chan_desc);</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%);">+   var MobileAllocation tr_ma := { len := 0, ma := ''B };</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring ma_oct := bit2oct(ts.ma);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Calculate length of the useful part of Mobile Allocation */</span><br><span style="color: hsl(120, 100%, 40%);">+        for (var integer i := 0; i < lengthof(ma_oct); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (ma_oct[i] != '00'O) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     tr_ma.len := i + 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Strip zero bytes from the right side of MA */</span><br><span style="color: hsl(120, 100%, 40%);">+      tr_ma.ma := substr(ts.ma, 0, tr_ma.len * 8);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (not match(ia.mobile_allocation, tr_ma)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Mobile Allocation does not match: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                         ia.mobile_allocation, " vs ", tr_ma);</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%);">+   setverdict(pass);</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%);">+/* Make sure that Immediate (UL EGPRS TBF) Assignment contains hopping parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcuif_fh_imm_ass_ul_egprs() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;</span><br><span style="color: hsl(120, 100%, 40%);">+        var GprsMS ms := valueof(t_GprsMS_def);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Enable frequency hopping of TRX0/TS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+    info_ind.trx.v10[0].ts[7] := ts_PCUIF_InfoTrxTsH1(</span><br><span style="color: hsl(120, 100%, 40%);">+            tsc := f_rnd_int(7),</span><br><span style="color: hsl(120, 100%, 40%);">+          hsn := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+         maio := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+                ma := f_rnd_bitstring(32));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* EGPRS Packet Channel Request (cause=Signalling) */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_use_ra(ms, bit2int('11001101010'B), ra_is_11bit := 1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Establish an Uplink EGPRS TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_TC_pcuif_fh_check_imm_ass(valueof(info_ind), ms.ul_tbf.rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown(__BFILE__, __LINE__, final := true);</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%);">+/* Make sure that Immediate (UL TBF) Assignment contains hopping parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcuif_fh_imm_ass_ul() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;</span><br><span style="color: hsl(120, 100%, 40%);">+        var GprsMS ms := valueof(t_GprsMS_def);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Enable frequency hopping of TRX0/TS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+    info_ind.trx.v10[0].ts[7] := ts_PCUIF_InfoTrxTsH1(</span><br><span style="color: hsl(120, 100%, 40%);">+            tsc := f_rnd_int(7),</span><br><span style="color: hsl(120, 100%, 40%);">+          hsn := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+         maio := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+                ma := f_rnd_bitstring(32));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Establish an Uplink TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_TC_pcuif_fh_check_imm_ass(valueof(info_ind), ms.ul_tbf.rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown(__BFILE__, __LINE__, final := true);</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%);">+/* Make sure that Immediate (DL TBF) Assignment contains hopping parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcuif_fh_imm_ass_dl() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;</span><br><span style="color: hsl(120, 100%, 40%);">+        var GprsMS ms := valueof(t_GprsMS_def);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Enable frequency hopping of TRX0/TS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+    info_ind.trx.v10[0].ts[7] := ts_PCUIF_InfoTrxTsH1(</span><br><span style="color: hsl(120, 100%, 40%);">+            tsc := f_rnd_int(7),</span><br><span style="color: hsl(120, 100%, 40%);">+          hsn := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+         maio := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+                ma := f_rnd_bitstring(16));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize NS/BSSGP side */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_bssgp();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Establish BSSGP connection to the PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_bssgp_establish();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_bssgp_client_llgmm_assign('FFFFFFFF'O, ms.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* SGSN sends some DL data, PCU will page on CCCH (PCH) */</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, f_rnd_octstring(12)));</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ms_exp_dl_tbf_ass_ccch(ms, PCU_IF_SAPI_PCH);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_pcuif_fh_check_imm_ass(valueof(info_ind), ms.dl_tbf.rr_imm_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_shutdown(__BFILE__, __LINE__, final := true);</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_TC_pcuif_fh_check_pkt_ass(in PCUIF_info_ind info_ind,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             in FrequencyParameters fp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    /* FIXME: TRX0/TS7 is a hard-coded expectation, make it configurable */</span><br><span style="color: hsl(120, 100%, 40%);">+       var PCUIF_InfoTrxTs ts := info_ind.trx.v10[0].ts[7];</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer ma_bit_len := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Calculate length of the useful part of Mobile Allocation */</span><br><span style="color: hsl(120, 100%, 40%);">+        for (var integer i := 0; i < lengthof(ts.ma); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ts.ma[i] == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       ma_bit_len := i + 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Table 12.8.1: Frequency Parameters information elements */</span><br><span style="color: hsl(120, 100%, 40%);">+ var template FrequencyParameters tr_fp := {</span><br><span style="color: hsl(120, 100%, 40%);">+           tsc := ts.tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+                presence := '10'B, /* Direct encoding 1 */</span><br><span style="color: hsl(120, 100%, 40%);">+            arfcn := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                indirect := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             direct1 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  maio := ts.maio,</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* Table 12.10a.1: GPRS Mobile Allocation information elements */</span><br><span style="color: hsl(120, 100%, 40%);">+                     mobile_allocation := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                hsn := ts.hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                rfl_number_list_present := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                              rfl_number_list := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              ma_present := '0'B, /* inverted logic */</span><br><span style="color: hsl(120, 100%, 40%);">+                              ma_length := ma_bit_len,</span><br><span style="color: hsl(120, 100%, 40%);">+                              ma_bitmap := substr(ts.ma, 0, ma_bit_len)</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%);">+            direct2 := 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%);">+  if (not match(fp, tr_fp)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Frequency Parameters IE does not match: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                           fp, " vs ", tr_fp);</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%);">+   setverdict(pass);</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%);">+/* Make sure that Packet Uplink Assignment contains hopping parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcuif_fh_pkt_ass_ul() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;</span><br><span style="color: hsl(120, 100%, 40%);">+        var GprsMS ms := valueof(t_GprsMS_def);</span><br><span style="color: hsl(120, 100%, 40%);">+       var uint32_t poll_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Enable frequency hopping of TRX0/TS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+    info_ind.trx.v10[0].ts[7] := ts_PCUIF_InfoTrxTsH1(</span><br><span style="color: hsl(120, 100%, 40%);">+            tsc := f_rnd_int(7),</span><br><span style="color: hsl(120, 100%, 40%);">+          hsn := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+         maio := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+                ma := f_rnd_bitstring(33));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Establish an Uplink TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Send Packet Resource Request, so the network will allocate an Uplink resource */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(ts_RlcMacUlCtrl_PKT_RES_REQ(ms.tlli, omit)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Expect an RLC/MAC block with Packet Uplink Assignment on PACCH (see 11.2.29) */</span><br><span style="color: hsl(120, 100%, 40%);">+    var RlcmacDlBlock blk := f_ms_rx_pkt_ass_pacch(ms, poll_fn, tr_RLCMAC_UL_PACKET_ASS);</span><br><span style="color: hsl(120, 100%, 40%);">+ var PacketUlAssignment ua := blk.ctrl.payload.u.ul_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 3GPP TS 44.060, section 12.8 "Frequency Parameters" */</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (omit) FrequencyParameters fp;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ua.is_egprs == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+            fp := ua.egprs.freq_par;</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              fp := ua.gprs.freq_par;</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%);">+   /* This is an optional IE, so it's worth to check its presence */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(fp, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Frequency Parameters IE is not present");</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 style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_TC_pcuif_fh_check_pkt_ass(valueof(info_ind), valueof(fp));</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown(__BFILE__, __LINE__, final := true);</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%);">+/* Make sure that Packet Downlink Assignment contains hopping parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_pcuif_fh_pkt_ass_dl() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring data := f_rnd_octstring(10);</span><br><span style="color: hsl(120, 100%, 40%);">+  var GprsMS ms := valueof(t_GprsMS_def);</span><br><span style="color: hsl(120, 100%, 40%);">+       var RlcmacDlBlock dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+   var uint32_t poll_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Enable frequency hopping of TRX0/TS7 */</span><br><span style="color: hsl(120, 100%, 40%);">+    info_ind.trx.v10[0].ts[7] := ts_PCUIF_InfoTrxTsH1(</span><br><span style="color: hsl(120, 100%, 40%);">+            tsc := f_rnd_int(7),</span><br><span style="color: hsl(120, 100%, 40%);">+          hsn := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+         maio := f_rnd_int(63),</span><br><span style="color: hsl(120, 100%, 40%);">+                ma := f_rnd_bitstring(33));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize NS/BSSGP side */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_bssgp();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Initialize the PCU interface abstraction */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(testcasename(), info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Establish BSSGP connection to the PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_bssgp_establish();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_bssgp_client_llgmm_assign('FFFFFFFF'O, ms.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Establish an Uplink TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_establish_ul_tbf(ms);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Send an Uplink block, so this TBF becomes "active" */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ms_tx_ul_data_block(ms, data, with_tlli := true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), poll_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* SGSN sends some DL data, PCU will assign Downlink resource on PACCH */</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Expect an RLC/MAC block with Packet Downlink Assignment on PACCH (see 11.2.29) */</span><br><span style="color: hsl(120, 100%, 40%);">+  dl_block := f_ms_rx_pkt_ass_pacch(ms, poll_fn, tr_RLCMAC_DL_PACKET_ASS);</span><br><span style="color: hsl(120, 100%, 40%);">+      var PacketDlAssignment da := dl_block.ctrl.payload.u.dl_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* This is an optional IE, so it's worth to check its presence */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not ispresent(da.freq_par)) {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Frequency Parameters IE is not present");</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 style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_TC_pcuif_fh_check_pkt_ass(valueof(info_ind), da.freq_par);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> control {</span><br><span>    execute( TC_pcuif_suspend() );</span><br><span>       execute( TC_ta_ptcch_idle() );</span><br><span>@@ -2109,6 +2369,17 @@</span><br><span>      execute( TC_egprs_pkt_chan_req_reject_exhaustion() );</span><br><span> </span><br><span>    execute( TC_mo_ping_pong_with_ul_racap_egprs_only() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Frequency hopping specific test cases */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (PCUIF_Types.mp_pcuif_version >= 10) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Immediate Assignment on AGCH/PCH */</span><br><span style="color: hsl(120, 100%, 40%);">+                execute( TC_pcuif_fh_imm_ass_ul_egprs() );</span><br><span style="color: hsl(120, 100%, 40%);">+            execute( TC_pcuif_fh_imm_ass_ul() );</span><br><span style="color: hsl(120, 100%, 40%);">+          execute( TC_pcuif_fh_imm_ass_dl() );</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Packet Uplink/Downlink Assignment on PACCH */</span><br><span style="color: hsl(120, 100%, 40%);">+              execute( TC_pcuif_fh_pkt_ass_ul() );</span><br><span style="color: hsl(120, 100%, 40%);">+          execute( TC_pcuif_fh_pkt_ass_dl() );</span><br><span style="color: hsl(120, 100%, 40%);">+  }</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/+/19324">change 19324</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/+/19324"/><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: I1beda9224998848f9243237413e5ae3e0ddab8a5 </div>
<div style="display:none"> Gerrit-Change-Number: 19324 </div>
<div style="display:none"> Gerrit-PatchSet: 11 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </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>