<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23798">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: Introduce test TC_srvcc_eutran_to_geran_ho_out<br><br>Related: SYS#5337<br>Change-Id: Id34924bbf0a5cf08b4b6f5ea56a10cef6b69c877<br>---<br>M bsc/BSC_Tests.ttcn<br>M library/BSSMAP_Templates.ttcn<br>2 files changed, 88 insertions(+), 23 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/98/23798/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 869343a..ffef409 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -4767,19 +4767,12 @@</span><br><span>      BSSAP.receive(tr_BSSMAP_ClearComplete);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_ho_out_of_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-  g_pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       var PDU_BSSAP ass_req := f_gen_ass_req();</span><br><span style="color: hsl(0, 100%, 40%);">-       ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(0, 100%, 40%);">-  ass_req.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(0, 100%, 40%);">-        var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(0, 100%, 40%);">-  f_establish_fully(ass_req, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ho_out_of_this_bsc(template (omit) BSSMAP_oldToNewBSSIEs exp_oldToNewBSSIEs := omit) runs on MSC_ConnHdlr {</span><br><span> </span><br><span>   f_bts_0_cfg(BSCVTY, {"neighbor lac 99 arfcn 123 bsic any"});</span><br><span>       f_vty_transceive(BSCVTY, "handover any to arfcn 123 bsic any");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   BSSAP.receive(tr_BSSMAP_HandoverRequired);</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.receive(tr_BSSMAP_HandoverRequired(exp_oldToNewBSSIEs));</span><br><span> </span><br><span>   f_sleep(0.5);</span><br><span>        /* The MSC negotiates Handover Request and Handover Request Ack with</span><br><span>@@ -4820,7 +4813,18 @@</span><br><span> </span><br><span>    f_expect_dlcx_conns();</span><br><span>       setverdict(pass);</span><br><span style="color: hsl(0, 100%, 40%);">-       f_sleep(1.0);</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_tc_ho_out_of_this_bsc(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 PDU_BSSAP ass_req := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+             ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+                ass_req.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</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%);">+                f_establish_fully(ass_req, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              f_ho_out_of_this_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+               f_sleep(1.0);</span><br><span> }</span><br><span> testcase TC_ho_out_of_this_bsc() runs on test_CT {</span><br><span>     var MSC_ConnHdlr vc_conn;</span><br><span>@@ -5105,14 +5109,12 @@</span><br><span>  f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_ho_into_this_bsc(charstring id, template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit) runs on MSC_ConnHdlr {</span><br><span>   /* Hack: the proper way would be to wait for the BSSMAP Handover Request ACK and extract the</span><br><span>          * actual assigned chan_nr from its L3 (RR Handover Command) message. But osmo-bsc starts acting</span><br><span>      * on the lchan even before we get a chance to evaluate the BSSMAP Handover Request ACK. So we</span><br><span>        * need to assume that osmo-bsc will activate TS 1 and already set up this lchan's RSL emulation</span><br><span>          * before we get started. */</span><br><span style="color: hsl(0, 100%, 40%);">-    var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit;</span><br><span style="color: hsl(0, 100%, 40%);">-       var template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;</span><br><span>     var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));</span><br><span>       f_rslem_register(0, new_chan_nr);</span><br><span>    g_chan_nr := new_chan_nr;</span><br><span>@@ -5122,11 +5124,6 @@</span><br><span>   f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);</span><br><span>   activate(as_Media());</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       if (not istemplatekind(g_pars.last_used_eutran_plmn, "omit")) {</span><br><span style="color: hsl(0, 100%, 40%);">-               oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));</span><br><span style="color: hsl(0, 100%, 40%);">-             exp_rr_rel_tmpl := tr_RRM_RR_RELEASE_CellSelectInd;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_bsc, g_pars.sccp_addr_msc,</span><br><span>                                  f_gen_handover_req(aoip_tla := g_pars.host_aoip_tla,</span><br><span>                                                    oldToNewBSSIEs := oldToNewBSSIEs)));</span><br><span>@@ -5174,7 +5171,17 @@</span><br><span>                                enc_PDU_ML3_MS_NW(l3_tx)));</span><br><span> </span><br><span>      BSSAP.receive(tr_BSSMAP_HandoverComplete);</span><br><span style="color: hsl(120, 100%, 40%);">+    setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        var template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (not istemplatekind(g_pars.last_used_eutran_plmn, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+             oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));</span><br><span style="color: hsl(120, 100%, 40%);">+           exp_rr_rel_tmpl := tr_RRM_RR_RELEASE_CellSelectInd;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_ho_into_this_bsc(id, oldToNewBSSIEs);</span><br><span>      f_perform_clear(RSL, exp_rr_rel_tmpl);</span><br><span>       setverdict(pass);</span><br><span> }</span><br><span>@@ -5213,7 +5220,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Similar to TC_ho_into_this_bsc, but when in SRVCC, HO Req contains "Old BSS</span><br><span style="color: hsl(0, 100%, 40%);">-   to New BSS Information" IE with "Last Used E-UTRAN PLMN Id", whihch, when the</span><br><span style="color: hsl(120, 100%, 40%);">+   to New BSS Information" IE with "Last Used E-UTRAN PLMN Id", which, when the</span><br><span>    channel is later released (RR CHannel Release), should trigger inclusion of</span><br><span>    IE "Cell Selection Indicator after Release of all TCH and SDCCH" with E-UTRAN</span><br><span>    neighbors. */</span><br><span>@@ -5224,6 +5231,43 @@</span><br><span>   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_srvcc_eutran_to_geran_ho_out(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs;</span><br><span style="color: hsl(120, 100%, 40%);">+     oldToNewBSSIEs := f_ts_BSSMAP_oldToNewBSSIEs(ts_BSSMAP_LastUsedEUTRANPLMNId(g_pars.last_used_eutran_plmn));</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ho_into_this_bsc(id, oldToNewBSSIEs);</span><br><span style="color: hsl(120, 100%, 40%);">+       f_ho_out_of_this_bsc(oldToNewBSSIEs);</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%);">+/* First, HO into BSC from EUTRAN (SRVCC): HO Request contains "Old BSS to New</span><br><span style="color: hsl(120, 100%, 40%);">+   BSS Information" IE with "Last Used E-UTRAN PLMN Id".</span><br><span style="color: hsl(120, 100%, 40%);">+   Second, HO to another BSC: HO Required contains "Old BSS to New BSS Information"</span><br><span style="color: hsl(120, 100%, 40%);">+   IE with "Last Used E-UTRAN PLMN Id" from first step. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_srvcc_eutran_to_geran_ho_out() 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%);">+     var TestHdlrParams pars := f_gen_test_hdlr_pars();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_init(1, 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%);">+  pars.last_used_eutran_plmn := '323454'O;</span><br><span style="color: hsl(120, 100%, 40%);">+      pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+       pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;</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_srvcc_eutran_to_geran_ho_out), pars);</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%);">+       f_ctrs_bsc_and_bts_add(0, "handover:attempted", 2);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "handover:completed", 2);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted", 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:completed", 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:attempted", 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ctrs_bsc_and_bts_add(0, "interbsc_ho_out:completed", 1);</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> private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr {</span><br><span>       var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));</span><br><span>       f_rslem_register(0, new_chan_nr);</span><br><span>@@ -8673,6 +8717,7 @@</span><br><span>            execute( TC_ho_into_this_bsc_tla_v6() );</span><br><span>     }</span><br><span>    execute( TC_srvcc_eutran_to_geran() );</span><br><span style="color: hsl(120, 100%, 40%);">+        execute( TC_srvcc_eutran_to_geran_ho_out() );</span><br><span>        execute( TC_ho_in_fail_msc_clears() );</span><br><span>       execute( TC_ho_in_fail_msc_clears_after_ho_detect() );</span><br><span>       execute( TC_ho_in_fail_no_detect() );</span><br><span>diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn</span><br><span>index 8049bb0..2b99a5b 100644</span><br><span>--- a/library/BSSMAP_Templates.ttcn</span><br><span>+++ b/library/BSSMAP_Templates.ttcn</span><br><span>@@ -232,6 +232,24 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template BSSMAP_IE_OldToNewBSSInfo tr_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  elementIdentifier := '3A'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,   /* overwritten by codec */</span><br><span style="color: hsl(120, 100%, 40%);">+    oldToNewBSSIEs := enc_BSSMAP_oldToNewBSSIEs(valueof(val))</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+function f_tr_BSSMAP_IE_OldToNewBSSInfo(template BSSMAP_oldToNewBSSIEs val := *)</span><br><span style="color: hsl(120, 100%, 40%);">+         return template BSSMAP_IE_OldToNewBSSInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+  if (istemplatekind(val, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+             return *;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if (istemplatekind(val, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+              return ?;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if (istemplatekind(val, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+           return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              return tr_BSSMAP_IE_OldToNewBSSInfo(val);</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> template (value) BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := {</span><br><span>   elementIdentifier := 'F0'O</span><br><span> }</span><br><span>@@ -815,7 +833,8 @@</span><br><span> }</span><br><span> </span><br><span> template PDU_BSSAP ts_BSSMAP_HandoverRequired(BssmapCause cause,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            template BSSMAP_FIELD_CellIdentificationList cid_list)</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template BSSMAP_FIELD_CellIdentificationList cid_list,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit)</span><br><span> modifies ts_BSSAP_BSSMAP := {</span><br><span>         pdu := {</span><br><span>             bssmap := {</span><br><span>@@ -828,7 +847,7 @@</span><br><span>                            currentChannelType1 := omit,</span><br><span>                                 speechVersion := omit,</span><br><span>                               queueingIndicator := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-                              oldToNewBSSInfo := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              oldToNewBSSInfo := f_ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs),</span><br><span>                           sourceToTargetRNCTransparentInfo := omit,</span><br><span>                            sourceToTargetRNCTransparentInfoCDMA := omit,</span><br><span>                                gERANClassmark := omit,</span><br><span>@@ -841,11 +860,12 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template PDU_BSSAP tr_BSSMAP_HandoverRequired modifies tr_BSSAP_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP tr_BSSMAP_HandoverRequired(template BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := *) modifies tr_BSSAP_BSSMAP := {</span><br><span>     pdu := {</span><br><span>             bssmap := {</span><br><span>                  handoverRequired := {</span><br><span style="color: hsl(0, 100%, 40%);">-                           messageType := '11'O</span><br><span style="color: hsl(120, 100%, 40%);">+                          messageType := '11'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                                oldToNewBSSInfo := f_tr_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs)</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/+/23798">change 23798</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/+/23798"/><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: Id34924bbf0a5cf08b4b6f5ea56a10cef6b69c877 </div>
<div style="display:none"> Gerrit-Change-Number: 23798 </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>