<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17706">View Change</a></p><div style="white-space:pre-wrap">Approvals:
pespin: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCU: add test cases for EGPRS Packet Channel Request<br><br>This change introduces three similar test cases:<br><br> - TC_egprs_pkt_chan_req_signalling,<br> - TC_egprs_pkt_chan_req_one_phase,<br> - TC_egprs_pkt_chan_req_two_phase,<br><br>which basically send several 11 bit RACH.ind messages to the IUT<br>containing different variations of EGPRS Packet Channel Request.<br><br>Depending on the establisment cause, for each RACH.ind we expect<br>to receive an Immediate Assignment containing an EGPRS Packet<br>Uplink Assignment in its Rest Octets.<br><br>All test cases make sure that Request Reference in the received<br>Immediate Assignment messages is set to 127 as required by 3GPP<br>TS 44.018 (see table 9.1.8.1, note 2b), and the Extended RA IE in<br>the Rest Octets matches 5 LSBs of the RA value that was sent.<br><br>Change-Id: Ib5732956ea160f93d82f06bf82bea45501f439d2<br>Related: OS#1548<br>---<br>M library/GSM_RR_Types.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>2 files changed, 154 insertions(+), 0 deletions(-)<br><br></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 a7d927a..d8bf595 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 (present) 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 (present) 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..0e3597b 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,11 @@</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%);">+ /* 3GPP TS 44.018, table 9.1.8.1, note 2b: Request Reference shall be set to 127</span><br><span style="color: hsl(120, 100%, 40%);">+ * when Immediate Assignment is triggered by EGPRS Packet Channel Request. Here</span><br><span style="color: hsl(120, 100%, 40%);">+ * we assume that 11 bit RA always contains EGPRS Packet Channel Request. */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (is_11bit != 0) { 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 +1567,119 @@</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_signalling() 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%);">+ 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%);">+ 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%);">+ 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 +1701,11 @@</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* EGPRS specific test cases */</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_egprs_pkt_chan_req_signalling() );</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: 8 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <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>