<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18239">View Change</a></p><div style="white-space:pre-wrap">Approvals:
laforge: Looks good to me, but someone else must approve
fixeria: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: use correct RA type to properly test 2phase access<br><br>Old code was not setting Single Block Packet Access type, and 2phase<br>access was not properly triggered.<br><br>Once it's triggered, message flow changes quite a lot from the 1phase<br>access, specially because the 2nd Ul Assignment arrives through PDCH<br>instead of CCCH, which means a different record is received and hence<br>code for 1phase cannot be easily re-used.<br><br>For similar reasons, f_tx_rlcmac_ul_n_blocks() is modified to receive<br>the only required tfi param instead of a full dl_block.<br><br>Some functions are also extended to support SingleBlock Allocation<br>instead of usual DynamicAllocation.<br><br>Change-Id: If636a4898dfa175fdbd6baf04f7f2c955a9c525d<br>---<br>M library/RLCMAC_CSN1_Templates.ttcn<br>M library/RLCMAC_Templates.ttcn<br>M pcu/PCU_Tests.ttcn<br>3 files changed, 152 insertions(+), 31 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/RLCMAC_CSN1_Templates.ttcn b/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>index 07f70b4..2c1bc04 100644</span><br><span>--- a/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_CSN1_Templates.ttcn</span><br><span>@@ -158,6 +158,36 @@</span><br><span> }</span><br><span> }</span><br><span> }</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_presence_bit_tfi(template uint5_t tfi) return BIT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (istemplatekind(tfi, "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> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ template PktUlAssGprs tr_PktUlAssGprsDynamic(template uint5_t tfi := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ch_coding_cmd := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tlli_block_chan_coding := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ pkt_ta := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ freq_par_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ freq_par := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ alloc_present := '01'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ dyn_block_alloc := {</span><br><span style="color: hsl(120, 100%, 40%);">+ extd_dyn_alloc := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ p0_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ p0 := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ pr_mode := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ usf_granularity := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ ul_tfi_ass_present := f_presence_bit_tfi(tfi),</span><br><span style="color: hsl(120, 100%, 40%);">+ ul_tfi_assignment := tfi,</span><br><span style="color: hsl(120, 100%, 40%);">+ reserved := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ tbf_starting_time_present := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tbf_starting_time := *,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_allocation := ?</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+ sgl_block_alloc := omit</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> } with { encode "RAW"; variant "FIELDORDER(msb)" variant "BYTEORDER(last)" };</span><br><span>diff --git a/library/RLCMAC_Templates.ttcn b/library/RLCMAC_Templates.ttcn</span><br><span>index dd1371f..0bd9792 100644</span><br><span>--- a/library/RLCMAC_Templates.ttcn</span><br><span>+++ b/library/RLCMAC_Templates.ttcn</span><br><span>@@ -436,6 +436,19 @@</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_GPRS(template uint3_t usf := ?, template PktUlAssGprs gprs := ?)</span><br><span style="color: hsl(120, 100%, 40%);">+ modifies tr_RLCMAC_UL_PACKET_ASS := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ctrl := {</span><br><span style="color: hsl(120, 100%, 40%);">+ payload := {</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%);">+ is_egprs := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ gprs := 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> </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>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 5ef53a9..5b822bb 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -243,12 +243,20 @@</span><br><span> receive_block_bitmap := '0000000000000000000000000000000000000000000000000000000000000000'B</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_rlcmac_dl_block_get_tfi(RlcmacDlBlock dl_block) return uint5_t {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_rlcmac_dl_block_get_tfi(RlcmacDlBlock dl_block)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on RAW_PCU_Test_CT return uint5_t {</span><br><span> if (ischosen(dl_block.data)) {</span><br><span> return dl_block.data.mac_hdr.hdr_ext.tfi;</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ } else if (ischosen(dl_block.data_egprs)) {</span><br><span> return dl_block.data_egprs.mac_hdr.tfi;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else { /* Ctrl block */</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 dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ul_tfi_assignment;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "DlBlock doesn't contain a TFI:", 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 0; /* make compiler happy */</span><br><span> }</span><br><span> </span><br><span> /* TS 44.060 sec 12.3 Ack/Nack Description */</span><br><span>@@ -381,11 +389,11 @@</span><br><span> bts_nr := bts_nr);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_imm_ass_verify_ul_tbf_ass(in GsmRrMessage rr_imm_ass, out PacketUlAssign ul_tbf_ass)</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_imm_ass_verify_ul_tbf_ass(in GsmRrMessage rr_imm_ass, out PacketUlAssign ul_tbf_ass, template PacketUlAssign ul_ass := tr_PacketUlDynAssign)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span> </span><br><span> /* Make sure we received an UL TBF Assignment */</span><br><span style="color: hsl(0, 100%, 40%);">- if (match(rr_imm_ass, tr_IMM_TBF_ASS(dl := false, rest := tr_IaRestOctets_ULAss(?)))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (match(rr_imm_ass, tr_IMM_TBF_ASS(dl := false, rest := tr_IaRestOctets_ULAss(ul_ass)))) {</span><br><span> ul_tbf_ass := rr_imm_ass.payload.imm_ass.rest_octets.hh.pa.uldl.ass.ul;</span><br><span> log("Rx Uplink TBF assignment: ", ul_tbf_ass);</span><br><span> setverdict(pass);</span><br><span>@@ -393,12 +401,6 @@</span><br><span> setverdict(fail, "Failed to match UL TBF Assignment");</span><br><span> f_shutdown(__BFILE__, __LINE__);</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Make sure we have got a TBF with Dynamic Block Allocation */</span><br><span style="color: hsl(0, 100%, 40%);">- if (ul_tbf_ass.dynamic == omit) {</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(fail, "Single Block Allocation is not handled by ", testcasename());</span><br><span style="color: hsl(0, 100%, 40%);">- f_shutdown(__BFILE__, __LINE__);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span> }</span><br><span> </span><br><span> private function f_imm_ass_verify_dl_tbf_ass(in GsmRrMessage rr_imm_ass, out PacketDlAssign dl_tbf_ass)</span><br><span>@@ -503,10 +505,10 @@</span><br><span> f_pcuif_tx_data_ind(data, lqual_cb, fn);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tx_rlcmac_ul_n_blocks(PacketUlAssign ul_tbf_ass, integer num_blocks := 1, template (omit) GprsTlli tlli := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tx_rlcmac_ul_n_blocks(uint5_t tfi, integer num_blocks := 1, template (omit) GprsTlli tlli := omit)</span><br><span> runs on RAW_PCU_Test_CT {</span><br><span> var template (value) RlcmacUlBlock ul_data := t_RLCMAC_UL_DATA(</span><br><span style="color: hsl(0, 100%, 40%);">- tfi := ul_tbf_ass.dynamic.tfi_assignment,</span><br><span style="color: hsl(120, 100%, 40%);">+ tfi := tfi,</span><br><span> cv := num_blocks - 1, /* num UL blocks to be sent (to be overridden in loop) */</span><br><span> bsn := 0, /* TODO: what should be here? */</span><br><span> blocks := { /* To be generated in loop */ });</span><br><span>@@ -589,6 +591,19 @@</span><br><span> poll_fn := f_rrbp_ack_fn(dl_fn, 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_dl_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_DL_PACKET_ASS())) {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "Failed to match Packet Downlink Assignment");</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%);">+ poll_fn := f_rrbp_ack_fn(dl_fn, 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> </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>@@ -1298,7 +1313,7 @@</span><br><span> </span><br><span> /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span> contention resoultion) and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">- f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1, tlli);</span><br><span> f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);</span><br><span> /* UL block should be received in SGSN */</span><br><span> BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));</span><br><span>@@ -1307,7 +1322,7 @@</span><br><span> f_sleep(int2float(info_ind.t3169) + 1.0);</span><br><span> </span><br><span> /* Send an UL block once again, the TBF should be gone by now so no ACK */</span><br><span style="color: hsl(0, 100%, 40%);">- f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1);</span><br><span> f_rx_rlcmac_dl_block_exp_dummy(dl_block);</span><br><span> </span><br><span> f_shutdown(__BFILE__, __LINE__, final := true);</span><br><span>@@ -1374,7 +1389,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%);">-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 style="color: hsl(120, 100%, 40%);">+private function f_TC_mo_ping_pong_1phase_access(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>@@ -1407,21 +1422,9 @@</span><br><span> /* Make sure we've got an Uplink TBF assignment */</span><br><span> f_imm_ass_verify_ul_tbf_ass(rr_imm_ass, ul_tbf_ass);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (not istemplatekind(ms_racap, "omit")) {</span><br><span style="color: hsl(0, 100%, 40%);">- /* Send PACKET RESOURCE REQUEST to upgrade to EGPRS</span><br><span style="color: hsl(0, 100%, 40%);">- * (see 3GPP TS 04.60 "7.1.3.1 Initiation of the Packet resource request procedure")</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 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(0, 100%, 40%);">- f_rx_rlcmac_dl_block_exp_pkt_ul_ass(dl_block, sched_fn);</span><br><span style="color: hsl(0, 100%, 40%);">- if (dl_block.ctrl.payload.u.ul_assignment.identity.tlli.tlli != tlli) {</span><br><span style="color: hsl(0, 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(0, 100%, 40%);">- f_shutdown(__BFILE__, __LINE__);</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%);">-</span><br><span> /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span> contention resoultion) and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">- f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1, tlli);</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> f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span>@@ -1453,9 +1456,84 @@</span><br><span> */</span><br><span> testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {</span><br><span> var CodingScheme exp_cs_mcs := CS_1;</span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_mo_ping_pong(omit, exp_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_mo_ping_pong_1phase_access(exp_cs_mcs);</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%);">+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%);">+ var GsmRrMessage rr_imm_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+ var PacketUlAssign ul_tbf_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+ var PacketDlAssign dl_tbf_ass;</span><br><span style="color: hsl(120, 100%, 40%);">+ var RlcmacDlBlock dl_block;</span><br><span style="color: hsl(120, 100%, 40%);">+ var PCUIF_Message pcu_msg;</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 boolean ok;</span><br><span style="color: hsl(120, 100%, 40%);">+ var uint32_t sched_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var uint32_t dl_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var OCT4 tlli := '00000001'O;</span><br><span style="color: hsl(120, 100%, 40%);">+ var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 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 style="color: hsl(120, 100%, 40%);">+ var uint16_t ra := oct2int('70'O);</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());</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, 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%);">+ ok := f_establish_tbf(rr_imm_ass, ra := ra);</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 establish TBF");</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%);">+ /* Make sure we've got an Uplink TBF assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_imm_ass_verify_ul_tbf_ass(rr_imm_ass, ul_tbf_ass, tr_PacketUlSglAssign);</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+ 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%);">+ /* Send one UL block (without TLLI since we are in Second-Phase Access)</span><br><span style="color: hsl(120, 100%, 40%);">+ and make sure it is ACKED fine */</span><br><span style="color: hsl(120, 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ //f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);</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_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* UL block should be received in SGSN */</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Now SGSN sends some DL data, PCU will page on PACCH */</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSGP[0].send(ts_BSSGP_DL_UD(tlli, data));</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rx_rlcmac_dl_block_exp_pkt_dl_ass(dl_block, sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* DL Ass sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 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(120, 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* ACK the DL block */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(f_rlcmac_dl_block_get_tfi(dl_block), ack_nack_desc),</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, f_dl_block_ack_fn(dl_block, dl_fn));</span><br><span style="color: hsl(120, 100%, 40%);">+</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> </span><br><span> testcase TC_mo_ping_pong_with_ul_racap() runs on RAW_PCU_Test_CT {</span><br><span> var MultislotCap_GPRS mscap_gprs := {</span><br><span>@@ -1465,7 +1543,7 @@</span><br><span> var MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, omit)) };</span><br><span> var CodingScheme exp_cs_mcs := CS_2;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- f_TC_mo_ping_pong(ms_racap, exp_cs_mcs);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_mo_ping_pong_2phase_access(ms_racap, exp_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>@@ -1522,7 +1600,7 @@</span><br><span> </span><br><span> /* Send one UL block (with TLLI since we are in One-Phase Access</span><br><span> contention resoultion) and make sure it is ACKED fine */</span><br><span style="color: hsl(0, 100%, 40%);">- f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1, tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_tx_rlcmac_ul_n_blocks(ul_tbf_ass.dynamic.tfi_assignment, 1, tlli);</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> f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/18239">change 18239</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/+/18239"/><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: If636a4898dfa175fdbd6baf04f7f2c955a9c525d </div>
<div style="display:none"> Gerrit-Change-Number: 18239 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </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: 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>