<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22959">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pcu: Introduce test TC_nacc_outbound_pkt_cell_chg_notif_nonassigned_dl_tbf<br><br>Triggers osmo-pcu assert in nacc_fsm.c due to scheduler not checking if<br>tbf has TFI assigned before deciding to transmit NACC related messages.<br><br>Related: osmo-pcu.git Change-Id I72b2dff28aacdb04909c098c94834ff79f55b31d<br>Related: SYS#4909<br>Change-Id: Id293e41e6b4380f2794007779ad430544bbe578a<br>---<br>M pcu/GPRS_Components.ttcn<br>M pcu/PCU_Tests.ttcn<br>2 files changed, 103 insertions(+), 1 deletion(-)<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/59/22959/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn</span><br><span>index 34406b9..5266743 100644</span><br><span>--- a/pcu/GPRS_Components.ttcn</span><br><span>+++ b/pcu/GPRS_Components.ttcn</span><br><span>@@ -819,6 +819,22 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ms_gtfi_tmpl(inout GprsMS ms)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MS_BTS_IFACE_CT return template (present) GlobalTfi {</span><br><span style="color: hsl(120, 100%, 40%);">+    var template (present) GlobalTfi gtfi;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (ispresent(ms.ul_tbf) and ispresent(ms.dl_tbf)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          gtfi := ({ is_dl_tfi := false, tfi := ms.ul_tbf.tfi },</span><br><span style="color: hsl(120, 100%, 40%);">+                         { is_dl_tfi := true, tfi := ms.dl_tbf.tfi });</span><br><span style="color: hsl(120, 100%, 40%);">+        } else if (ispresent(ms.ul_tbf)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            gtfi := { is_dl_tfi := false, tfi := ms.ul_tbf.tfi };</span><br><span style="color: hsl(120, 100%, 40%);">+ } else if (ispresent(ms.dl_tbf)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            gtfi := { is_dl_tfi := true, tfi := ms.dl_tbf.tfi };</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              gtfi := ?;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     return gtfi;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> altstep as_ms_rx_pkt_neighbor_cell_data(inout GprsMS ms, octetstring exp_si,</span><br><span>                                    inout uint5_t exp_container_idx /* := 0 */,</span><br><span>                                  inout integer si_offset /* := 0 */,</span><br><span>@@ -827,7 +843,7 @@</span><br><span> runs on MS_BTS_IFACE_CT {</span><br><span>       var integer len;</span><br><span>     var octetstring exp_si_chunk;</span><br><span style="color: hsl(0, 100%, 40%);">-   var GlobalTfi gtfi := { is_dl_tfi := false, tfi := ms.ul_tbf.tfi };</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (present) GlobalTfi gtfi := f_ms_gtfi_tmpl(ms);</span><br><span>         var BTS_PDTCH_Block data_msg;</span><br><span>        var boolean do_repeat := true;</span><br><span> </span><br><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index 4699d3e..5ab208b 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -4890,6 +4890,91 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Test MS sending Pkt Cell Change Notification on an MS with an existing but unassigned (no TFI) DL TBF */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_nacc_outbound_pkt_cell_chg_notif_unassigned_dl_tbf() runs on RAW_PCU_Test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var PollFnCtx pollctx;</span><br><span style="color: hsl(120, 100%, 40%);">+        var GprsMS ms;</span><br><span style="color: hsl(120, 100%, 40%);">+        var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default);</span><br><span style="color: hsl(120, 100%, 40%);">+        var template (value) RlcmacUlCtrlMsg cell_chf_notif;</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 sched_fn, dl_fn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var CtrlMessage rx_ctrl;</span><br><span style="color: hsl(120, 100%, 40%);">+      var GsmArfcn req_arfcn := 862;</span><br><span style="color: hsl(120, 100%, 40%);">+        var uint6_t req_bsic := 43;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Initialize osmo-bsc emulation neighbor resolution CTRL port */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port);</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%);">+       /* Initialize GPRS MS side */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_gprs_ms();</span><br><span style="color: hsl(120, 100%, 40%);">+     ms := g_ms[0]; /* We only use first MS in this test */</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%);">+       /* Make sure we are not affected by full cache from previous tests */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_pcuvty_flush_neigh_caches();</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(TLLI_UNUSED, ms.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Send PACKET RESOURCE REQUEST */</span><br><span style="color: hsl(120, 100%, 40%);">+    pollctx := f_ms_establish_ul_tbf_2phase_access(ms, ts_RlcMacUlCtrl_PKT_RES_REQ(ms.tlli, ms_racap_gprs_def));</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Pkt Uplink Assignment above sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Start NACC from MS side */</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* osmo-pcu should now ask for resolution: */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ipa_ctrl_wait_link_up();</span><br><span style="color: hsl(120, 100%, 40%);">+    var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                 int2str(info_ind.lac) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                               int2str(info_ind.cell_id) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                   int2str(req_arfcn) & "." &</span><br><span style="color: hsl(120, 100%, 40%);">+                                  int2str(req_bsic);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5");</span><br><span style="color: hsl(120, 100%, 40%);">+       /* RIM procedure: */</span><br><span style="color: hsl(120, 100%, 40%);">+  as_outbound_nacc_rim_resolve(info_ind);</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+ /* Make sure we leave some time for SGSN->PCU data to arrive to PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(0.1);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* rx DL assignment, don't ack it yet (keep TBF in state ASSIGN): */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ms_rx_pkt_ass_pacch(ms, sched_fn, tr_RLCMAC_DL_PACKET_ASS);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* NACC: scheduler selects tx Pkt Cell Neighbor Data. Receive first one: */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ms_handle_pkt_neighbor_cell_data(ms, si_default, single_step := true);</span><br><span style="color: hsl(120, 100%, 40%);">+      /* ACK DL assignment (we do it here on purpose to test tx Pkt Neigh Cell</span><br><span style="color: hsl(120, 100%, 40%);">+       * Data with unassigned DL TBF in line above): */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Continue receiving Pkt Cell Neighbor Data */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ms_handle_pkt_neighbor_cell_data(ms, si_default, f_ms_tx_TsTrxBtsNum(ms), 1, 16);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Obtain a Downlink block and make sure it is a Pkt Cell Chg Continue */</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rx_rlcmac_dl_block(dl_block, sched_fn);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (not match(dl_block, tr_RLCMAC_DL_CTRL(?, tr_RlcMacDlCtrl_PKT_CELL_CHG_CONTINUE))) {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Rx unexpected DL block: ", dl_block);</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%);">+     /* PKT CELL CHG CONTINUE ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (dl_block.ctrl.mac_hdr.rrbp_valid) {</span><br><span style="color: hsl(120, 100%, 40%);">+               sched_fn := f_rrbp_ack_fn(sched_fn, dl_block.ctrl.mac_hdr.rrbp);</span><br><span style="color: hsl(120, 100%, 40%);">+              f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn);</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%);">+   /* Now that we confirmed the new assignment in the dl-tbf, lets receive the data and ack it */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rx_rlcmac_dl_block_exp_data(dl_block, dl_fn, data, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_acknackdesc_ack_block(ms.dl_tbf.acknack_desc, dl_block, '1'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ms_tx_ul_block(ms, ts_RLCMAC_DL_ACK_NACK(ms.dl_tbf.tfi, ms.dl_tbf.acknack_desc),</span><br><span style="color: hsl(120, 100%, 40%);">+                     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%);">+</span><br><span> /* Send a RIM RAN info request to the PCU and verify the response, we expect</span><br><span>  * getting the system information back which we have transfered to the PCU via</span><br><span>  * PCUIF on startup. */</span><br><span>@@ -5127,6 +5212,7 @@</span><br><span>      execute( TC_nacc_outbound_pkt_cell_chg_notif_twice3() );</span><br><span>     execute( TC_nacc_outbound_pkt_cell_chg_notif_twice4() );</span><br><span>     execute( TC_nacc_outbound_pkt_cell_chg_notif_twice5() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_nacc_outbound_pkt_cell_chg_notif_unassigned_dl_tbf() );</span><br><span> </span><br><span>      execute( TC_rim_ran_info_req_single_rep() );</span><br><span>         execute( TC_rim_ran_info_req_single_rep_no_si() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22959">change 22959</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/+/22959"/><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: Id293e41e6b4380f2794007779ad430544bbe578a </div>
<div style="display:none"> Gerrit-Change-Number: 22959 </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>