<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21031">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: add TC_ho_int_radio_link_failure<br><br>Change-Id: Ia94176a997dbdaf87d6b433cb24ffcfa06241d74<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 102 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/31/21031/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 8b92c99..a63d536 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -4451,6 +4451,107 @@</span><br><span>  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* intra-BSC hand-over with CONNection FAILure and cause Radio Link Failure: check RR release cause */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_int_radio_link_failure(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     const OCT8 kc := '0001020304050607'O;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_establish_fully(ass_cmd, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_bts_0_cfg(BSCVTY, {"neighbor bts 1"});</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  var HandoverState hs := {</span><br><span style="color: hsl(120, 100%, 40%);">+             rr_ho_cmpl_seen := false,</span><br><span style="color: hsl(120, 100%, 40%);">+             handover_done := false,</span><br><span style="color: hsl(120, 100%, 40%);">+               old_chan_nr := -</span><br><span style="color: hsl(120, 100%, 40%);">+      };</span><br><span style="color: hsl(120, 100%, 40%);">+    /* issue hand-over command on VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_handover(BSCVTY, 0, 0, g_chan_nr, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* temporarily suspend DChan processing on BTS1 to avoid race with RSLEM_register */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_rslem_suspend(RSL1_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* From the MGW perspective, a handover is is characterized by</span><br><span style="color: hsl(120, 100%, 40%);">+         * performing one MDCX operation with the MGW. So we expect to see</span><br><span style="color: hsl(120, 100%, 40%);">+     * one more MDCX during handover. */</span><br><span style="color: hsl(120, 100%, 40%);">+  g_media.mgcp_conn[0].mdcx_seen_exp := g_media.mgcp_conn[0].crcx_seen_exp + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       var RSL_Message rsl;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_ML3_NW_MS l3;</span><br><span style="color: hsl(120, 100%, 40%);">+ var RslChannelNr new_chan_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+ var GsmArfcn arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+   RSL.receive(tr_RSL_DATA_REQ(g_chan_nr)) -> value rsl {</span><br><span style="color: hsl(120, 100%, 40%);">+             l3 := dec_PDU_ML3_NW_MS(rsl.ies[2].body.l3_info.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (not ischosen(l3.msgs.rrm.handoverCommand)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      setverdict(fail, "Expected handoverCommand");</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%);">+     f_ChDesc2RslChanNr(l3.msgs.rrm.handoverCommand.channelDescription2,</span><br><span style="color: hsl(120, 100%, 40%);">+                      new_chan_nr, arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rslem_register(0, new_chan_nr, RSL1_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* resume processing of RSL DChan messages, which was temporarily suspended</span><br><span style="color: hsl(120, 100%, 40%);">+    * before performing a hand-over */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rslem_resume(RSL1_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+    RSL1.receive(tr_RSL_IPA_CRCX(new_chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Handover fails because no HANDO DET appears on the new lchan,</span><br><span style="color: hsl(120, 100%, 40%);">+       * and the old lchan reports a Radio Link Failure. */</span><br><span style="color: hsl(120, 100%, 40%);">+ RSL.send(ts_RSL_CONN_FAIL_IND(g_chan_nr, RSL_ERR_RADIO_LINK_FAIL));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_BSSAP rx_clear_request;</span><br><span style="color: hsl(120, 100%, 40%);">+       BSSAP.receive(tr_BSSMAP_ClearRequest) -> value rx_clear_request;</span><br><span style="color: hsl(120, 100%, 40%);">+   var BssmapCause cause := bit2int(rx_clear_request.pdu.bssmap.clearRequest.cause.causeValue);</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  var RR_Cause rr_cause := GSM48_RR_CAUSE_ABNORMAL_UNSPEC;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    var MgcpCommand mgcp;</span><br><span style="color: hsl(120, 100%, 40%);">+ interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE(int2oct(enum2int(rr_cause), 1)))) {}</span><br><span style="color: hsl(120, 100%, 40%);">+  [] RSL.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+      [] RSL.receive(tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 RSL.send(ts_RSL_RF_CHAN_REL_ACK(g_chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL1.receive(tr_RSL_DEACT_SACCH(new_chan_nr)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+   [] RSL1.receive(tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        RSL1.send(ts_RSL_RF_CHAN_REL_ACK(new_chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_BSSMAP_ClearComplete) {}</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_sleep(0.5);</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%);">+testcase TC_ho_int_radio_link_failure() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(2, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ctrs_bsc_and_bts_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn := f_start_handler(refers(f_tc_ho_int_radio_link_failure));</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* from f_establish_fully() */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "assignment:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "assignment:completed");</span><br><span style="color: hsl(120, 100%, 40%);">+  /* from handover */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ctrs_bsc_and_bts_add(0, "handover:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_ctrs_bsc_and_bts_add(0, "handover:stopped");</span><br><span style="color: hsl(120, 100%, 40%);">+      f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:attempted");</span><br><span style="color: hsl(120, 100%, 40%);">+        f_ctrs_bsc_and_bts_add(0, "intra_bsc_ho:stopped");</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_shutdown_helper();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</span><br><span> private function f_expect_dlcx_conns() runs on MSC_ConnHdlr {</span><br><span>   var MgcpCommand mgcp;</span><br><span>@@ -8344,6 +8445,7 @@</span><br><span>        execute( TC_err_84_unknown_msg() );</span><br><span> </span><br><span>      execute( TC_ho_int() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_ho_int_radio_link_failure() );</span><br><span> </span><br><span>       execute( TC_ho_out_of_this_bsc() );</span><br><span>  execute( TC_ho_out_fail_no_msc_response() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21031">change 21031</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/+/21031"/><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: Ia94176a997dbdaf87d6b433cb24ffcfa06241d74 </div>
<div style="display:none"> Gerrit-Change-Number: 21031 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>