<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17706">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU: add test case for EGPRS Packet Channel Request (signalling)<br><br>Change-Id: Ib5732956ea160f93d82f06bf82bea45501f439d2<br>---<br>M library/GSM_RR_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>2 files changed, 153 insertions(+), 0 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/06/17706/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn</span><br><span>index 9d71f80..208513e 100644</span><br><span>--- a/library/GSM_RR_Types.ttcn</span><br><span>+++ b/library/GSM_RR_Types.ttcn</span><br><span>@@ -908,6 +908,37 @@</span><br><span>          }</span><br><span>    };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        template EgprsUlAss tr_EgprsUlAssDynamic(template BIT5 ext_ra := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            template EgprsUlAssignDyn dyn_ass := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         ext_ra := ext_ra,</span><br><span style="color: hsl(120, 100%, 40%);">+             ats_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+             ats := *,</span><br><span style="color: hsl(120, 100%, 40%);">+             presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             dynamic := dyn_ass,</span><br><span style="color: hsl(120, 100%, 40%);">+           multiblock := omit</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+    template EgprsUlAss tr_EgprsUlAssMultiblock(template BIT5 ext_ra := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    template EgprsUlAssignMultiblock mb_ass := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                ext_ra := ext_ra,</span><br><span style="color: hsl(120, 100%, 40%);">+             ats_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+             ats := *,</span><br><span style="color: hsl(120, 100%, 40%);">+             presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             dynamic := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              multiblock := mb_ass</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%);">+  template IaRestOctets tr_IaRestOctets_EGPRSULAss(template EgprsUlAss ul_ass) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             presence := '01'B, /* LH */</span><br><span style="color: hsl(120, 100%, 40%);">+           ll := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           lh := {</span><br><span style="color: hsl(120, 100%, 40%);">+                       presence := '00'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                    egprs_ul := ul_ass,</span><br><span style="color: hsl(120, 100%, 40%);">+                   multiblock_dl_ass := omit</span><br><span style="color: hsl(120, 100%, 40%);">+             },</span><br><span style="color: hsl(120, 100%, 40%);">+            hl := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           hh := omit</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         template (value) GsmRrMessage ts_IMM_ASS(uint8_t ra, GsmFrameNumber fn, TimingAdvance ta,</span><br><span>                                            ChannelDescription ch_desc, MobileAllocation ma) := {</span><br><span>                header := t_RrHeader(IMMEDIATE_ASSIGNMENT, 0),</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 8e1d349..49a7308 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -287,6 +287,9 @@</span><br><span>                               fn := fn, arfcn := 871,</span><br><span>                              qta := ta * 4));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* In case of 11-bit RACH, Request Reference in IA is set to 127 */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ra > oct2int('FF'O)) { ra := 127; }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         /* Expect Immediate (TBF) Assignment on TS0/AGCH */</span><br><span>  return f_pcuif_rx_imm_ass(rr_imm_ass, tr_IMM_TBF_ASS(?, ra, fn), bts_nr);</span><br><span> }</span><br><span>@@ -1562,6 +1565,122 @@</span><br><span>     f_tc_paging_ps_from_sgsn(mp_gb_cfg.bvci);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_egprs_pkt_chan_req(in EGPRSPktChRequest req,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         template GsmRrMessage t_imm_ass := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         PCUIF_BurstType bt := BURST_TYPE_1)</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 GsmRrMessage rr_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint16_t ra11;</span><br><span style="color: hsl(120, 100%, 40%);">+    var boolean ok;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ra11 := enc_EGPRSPktChRequest2uint(req);</span><br><span style="color: hsl(120, 100%, 40%);">+      log("Sending EGPRS Packet Channel Request (", ra11, "): ", req);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        ok := f_establish_tbf(rr_msg, ra := ra11, is_11bit := 1, burst_type := bt);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (not ok) {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Failed to establush an Uplink TBF");</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%);">+   if (not match(rr_msg, t_imm_ass)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Immediate Assignment does not match");</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%);">+   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%);">+testcase TC_egprs_pkt_chan_req_sign() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var template GsmRrMessage imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+    var template IaRestOctets rest;</span><br><span style="color: hsl(120, 100%, 40%);">+       var template EgprsUlAss ul_ass;</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());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var EGPRSPktChRequest req := {</span><br><span style="color: hsl(120, 100%, 40%);">+                /* NOTE: other fields are set in the loop */</span><br><span style="color: hsl(120, 100%, 40%);">+          signalling := { tag := '110011'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%);">+  for (var integer i := 0; i < 6; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              var BIT5 ext_ra := int2bit(f_rnd_int(32), 5);</span><br><span style="color: hsl(120, 100%, 40%);">+         req.signalling.random_bits := ext_ra;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* For signalling, do we expect Multiblock UL TBF Assignment?</span><br><span style="color: hsl(120, 100%, 40%);">+          * FIXME: somehow TITAN decodes different ext_ra value. */</span><br><span style="color: hsl(120, 100%, 40%);">+            ul_ass  := tr_EgprsUlAssMultiblock(ext_ra := ext_ra);</span><br><span style="color: hsl(120, 100%, 40%);">+         rest    := tr_IaRestOctets_EGPRSULAss(ul_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+                imm_ass := tr_IMM_TBF_ASS(dl := false, rest := rest);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               f_TC_egprs_pkt_chan_req(req, imm_ass);</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_egprs_pkt_chan_req_one_phase() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var template GsmRrMessage imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+    var template IaRestOctets rest;</span><br><span style="color: hsl(120, 100%, 40%);">+       var template EgprsUlAss ul_ass;</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());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var EGPRSPktChRequest req := {</span><br><span style="color: hsl(120, 100%, 40%);">+                /* NOTE: other fields are set in the loop */</span><br><span style="color: hsl(120, 100%, 40%);">+          one_phase := { tag := '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%);">+  for (var integer i := 0; i < 6; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              var BIT5 ext_ra := int2bit(f_rnd_int(32), 5);</span><br><span style="color: hsl(120, 100%, 40%);">+         var BIT5 mslot_class := int2bit(f_rnd_int(32), 5);</span><br><span style="color: hsl(120, 100%, 40%);">+            var BIT2 priority := substr(ext_ra, 0, 2);</span><br><span style="color: hsl(120, 100%, 40%);">+            var BIT3 rand := substr(ext_ra, 2, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              req.one_phase.multislot_class := mslot_class;</span><br><span style="color: hsl(120, 100%, 40%);">+         req.one_phase.priority := priority;</span><br><span style="color: hsl(120, 100%, 40%);">+           req.one_phase.random_bits := rand;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          /* For one phase access, do we expect Dynamic UL TBF Assignment?</span><br><span style="color: hsl(120, 100%, 40%);">+               * FIXME: somehow TITAN decodes different ext_ra value. */</span><br><span style="color: hsl(120, 100%, 40%);">+            ul_ass  := tr_EgprsUlAssDynamic(ext_ra := ext_ra);</span><br><span style="color: hsl(120, 100%, 40%);">+            rest    := tr_IaRestOctets_EGPRSULAss(ul_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+                imm_ass := tr_IMM_TBF_ASS(dl := false, rest := rest);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               f_TC_egprs_pkt_chan_req(req, imm_ass);</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_egprs_pkt_chan_req_two_phase() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var template GsmRrMessage imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+    var template IaRestOctets rest;</span><br><span style="color: hsl(120, 100%, 40%);">+       var template EgprsUlAss ul_ass;</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());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var EGPRSPktChRequest req := {</span><br><span style="color: hsl(120, 100%, 40%);">+                /* NOTE: other fields are set in the loop */</span><br><span style="color: hsl(120, 100%, 40%);">+          two_phase := { tag := '110000'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%);">+  for (var integer i := 0; i < 6; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              var BIT5 ext_ra := int2bit(f_rnd_int(32), 5);</span><br><span style="color: hsl(120, 100%, 40%);">+         var BIT2 priority := substr(ext_ra, 0, 2);</span><br><span style="color: hsl(120, 100%, 40%);">+            var BIT3 rand := substr(ext_ra, 2, 3);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              req.two_phase.priority := priority;</span><br><span style="color: hsl(120, 100%, 40%);">+           req.two_phase.random_bits := rand;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          /* For two phase access, do we expect Multiblock UL TBF Assignment?</span><br><span style="color: hsl(120, 100%, 40%);">+            * FIXME: somehow TITAN decodes different ext_ra value. */</span><br><span style="color: hsl(120, 100%, 40%);">+            ul_ass  := tr_EgprsUlAssMultiblock(ext_ra := ext_ra);</span><br><span style="color: hsl(120, 100%, 40%);">+         rest    := tr_IaRestOctets_EGPRSULAss(ul_ass);</span><br><span style="color: hsl(120, 100%, 40%);">+                imm_ass := tr_IMM_TBF_ASS(dl := false, rest := rest);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               f_TC_egprs_pkt_chan_req(req, imm_ass);</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> control {</span><br><span>  execute( TC_pcuif_suspend() );</span><br><span>       execute( TC_ta_ptcch_idle() );</span><br><span>@@ -1583,6 +1702,9 @@</span><br><span>       execute( TC_paging_ps_from_sgsn_sign_ptmsi() );</span><br><span>      execute( TC_paging_ps_from_sgsn_sign() );</span><br><span>    execute( TC_paging_ps_from_sgsn_ptp() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_egprs_pkt_chan_req_sign() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_egprs_pkt_chan_req_one_phase() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_egprs_pkt_chan_req_two_phase() );</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/+/17706">change 17706</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/+/17706"/><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: Ib5732956ea160f93d82f06bf82bea45501f439d2 </div>
<div style="display:none"> Gerrit-Change-Number: 17706 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>