<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23776">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: Introuce TC_srvcc_eutran_to_geran<br><br>Related: SYS#5337<br>Change-Id: If26cc9241b1b0eb4112f1227427008ece242bb41<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/MSC_ConnectionHandler.ttcn<br>M library/BSSMAP_Templates.ttcn<br>3 files changed, 72 insertions(+), 16 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/76/23776/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 f062274..1f8f951 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -1501,15 +1501,16 @@</span><br><span>         return ass_cmd;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_gen_handover_req(integer bssap_idx := 0, charstring aoip_tla := "1.2.3.4") return PDU_BSSAP {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_gen_handover_req(integer bssap_idx := 0, charstring aoip_tla := "1.2.3.4",</span><br><span style="color: hsl(120, 100%, 40%);">+                       template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit) return PDU_BSSAP {</span><br><span>         var PDU_BSSAP ho_req;</span><br><span>        if (mp_bssap_cfg[bssap_idx].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             var BSSMAP_IE_AoIP_TransportLayerAddress tla :=</span><br><span>                      valueof(f_ts_BSSMAP_IE_AoIP_TLA(aoip_tla, 2342));</span><br><span style="color: hsl(0, 100%, 40%);">-               ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla));</span><br><span style="color: hsl(120, 100%, 40%);">+              ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla, oldToNewBSSIEs := oldToNewBSSIEs));</span><br><span>   } else {</span><br><span>             var BSSMAP_IE_CircuitIdentityCode cic := valueof(ts_BSSMAP_IE_CIC(0,1));</span><br><span style="color: hsl(0, 100%, 40%);">-                ho_req := valueof(ts_BSSMAP_HandoverRequest(cic, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+              ho_req := valueof(ts_BSSMAP_HandoverRequest(cic, omit, oldToNewBSSIEs := oldToNewBSSIEs));</span><br><span>   }</span><br><span>    return ho_req;</span><br><span> }</span><br><span>@@ -5107,6 +5108,8 @@</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(120, 100%, 40%);">+  var template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit;</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>     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>@@ -5116,8 +5119,14 @@</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(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%);">+</span><br><span>  BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_bsc, g_pars.sccp_addr_msc,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     f_gen_handover_req(aoip_tla := g_pars.host_aoip_tla)));</span><br><span style="color: hsl(120, 100%, 40%);">+                               f_gen_handover_req(aoip_tla := g_pars.host_aoip_tla,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     oldToNewBSSIEs := oldToNewBSSIEs)));</span><br><span>         BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);</span><br><span> </span><br><span>     /* The RSL Emulation magically accepts the Chan Activ behind the scenes. */</span><br><span>@@ -5162,6 +5171,8 @@</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_perform_clear(RSL, exp_rr_rel_tmpl);</span><br><span>       setverdict(pass);</span><br><span> }</span><br><span> function f_tc_ho_into_this_bsc_main(TestHdlrParams pars) runs on test_CT {</span><br><span>@@ -5183,7 +5194,6 @@</span><br><span>         f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:attempted");</span><br><span>     f_ctrs_bsc_and_bts_add(0, "interbsc_ho_in:completed");</span><br><span>     f_ctrs_bsc_and_bts_verify();</span><br><span style="color: hsl(0, 100%, 40%);">-    f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span> testcase TC_ho_into_this_bsc() runs on test_CT {</span><br><span>@@ -5199,6 +5209,18 @@</span><br><span>   f_shutdown_helper();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Similar to TC_ho_into_this_bsc, but when in SRVCC, HO Req contains "Old BSS</span><br><span style="color: hsl(120, 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%);">+   channel is later released (RR CHannel Release), should trigger inclusion of</span><br><span style="color: hsl(120, 100%, 40%);">+   IE "Cell Selection Indicator after Release of all TCH and SDCCH" with E-UTRAN</span><br><span style="color: hsl(120, 100%, 40%);">+   neighbors. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_srvcc_eutran_to_geran() runs on test_CT {</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%);">+    pars.last_used_eutran_plmn := '323454'O;</span><br><span style="color: hsl(120, 100%, 40%);">+      f_tc_ho_into_this_bsc_main(pars);</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>@@ -6472,9 +6494,10 @@</span><br><span> template MobileIdentityLV ts_MI_TMSI_NRI_LV(integer nri_v, integer nri_bitlen := 10) :=</span><br><span>        ts_MI_TMSI_LV(tmsi := f_gen_tmsi(suffix := 0, nri_v := nri_v, nri_bitlen := nri_bitlen));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_expect_lchan_rel(RSL_DCHAN_PT rsl) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_expect_lchan_rel(RSL_DCHAN_PT rsl, template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MSC_ConnHdlr {</span><br><span>        interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE)) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch exp_rr_rel_tmpl)) {</span><br><span>                    f_logp(BSCVTY, "Got RSL RR Release");</span><br><span>              }</span><br><span>    [] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {</span><br><span>@@ -6488,11 +6511,12 @@</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_perform_clear(RSL_DCHAN_PT rsl) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_perform_clear(RSL_DCHAN_PT rsl, template PDU_ML3_NW_MS exp_rr_rel_tmpl := tr_RRM_RR_RELEASE)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on MSC_ConnHdlr {</span><br><span>         f_logp(BSCVTY, "MSC instructs BSC to clear channel");</span><br><span>      BSSAP.send(ts_BSSMAP_ClearCommand(0));</span><br><span>       interleave {</span><br><span style="color: hsl(0, 100%, 40%);">-    [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_RR_RELEASE)) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] rsl.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch exp_rr_rel_tmpl)) {</span><br><span>                    f_logp(BSCVTY, "Got RSL RR Release");</span><br><span>              }</span><br><span>    [] rsl.receive(tr_RSL_DEACT_SACCH(g_chan_nr)) {</span><br><span>@@ -8645,6 +8669,7 @@</span><br><span>      if (mp_bssap_cfg[0].transport == BSSAP_TRANSPORT_AoIP) {</span><br><span>             execute( TC_ho_into_this_bsc_tla_v6() );</span><br><span>     }</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_srvcc_eutran_to_geran() );</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/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index 5460e2c..245528f 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -587,7 +587,8 @@</span><br><span>     boolean         use_osmux,</span><br><span>   charstring      host_aoip_tla,</span><br><span>       TestHdlrParamsMSCPool mscpool,</span><br><span style="color: hsl(0, 100%, 40%);">-  boolean         media_mgw_offer_ipv6</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean         media_mgw_offer_ipv6,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT3            last_used_eutran_plmn optional</span><br><span> };</span><br><span> </span><br><span> /* Note: Do not use valueof() to get a value of this template, use</span><br><span>@@ -622,7 +623,8 @@</span><br><span>                 rsl_idx := 0,</span><br><span>                l3_info := omit</span><br><span>      },</span><br><span style="color: hsl(0, 100%, 40%);">-      media_mgw_offer_ipv6 := true</span><br><span style="color: hsl(120, 100%, 40%);">+  media_mgw_offer_ipv6 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ last_used_eutran_plmn := omit</span><br><span> }</span><br><span> </span><br><span> function f_create_chan_and_exp() runs on MSC_ConnHdlr {</span><br><span>diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn</span><br><span>index 458fa48..8049bb0 100644</span><br><span>--- a/library/BSSMAP_Templates.ttcn</span><br><span>+++ b/library/BSSMAP_Templates.ttcn</span><br><span>@@ -23,7 +23,16 @@</span><br><span> type integer SpeechVersion;</span><br><span> type integer Channel;</span><br><span> type integer ChannelMode;</span><br><span style="color: hsl(0, 100%, 40%);">-type octetstring oldToNewBSSIEs;</span><br><span style="color: hsl(120, 100%, 40%);">+//type octetstring BSSMAP_oldToNewBSSIEs;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// Old BSS to New BSS Information - 48.008 subclause 3.2.2.58</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSSMAP_oldToNewBSSIEs</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSAMAP_IE_LastUsedEUTRANPLMNId LastUsedEUTRANPLMNId optional</span><br><span style="color: hsl(120, 100%, 40%);">+  /* TODO: add other FIELDS here from specs */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+external function enc_BSSMAP_oldToNewBSSIEs(in BSSMAP_oldToNewBSSIEs val) return octetstring</span><br><span style="color: hsl(120, 100%, 40%);">+      with { extension "prototype(convert) encode(RAW)" };</span><br><span> </span><br><span> /* 48.008 3.2.2.5 - this actually belongs to BSSAP_Types.ttcn */</span><br><span> type enumerated myBSSMAP_Cause {</span><br><span>@@ -198,10 +207,29 @@</span><br><span>   channelMode := int2bit(cm, 4)</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(oldToNewBSSIEs val) := {</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) BSSMAP_oldToNewBSSIEs ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   LastUsedEUTRANPLMNId := last_used_eutran_plmn</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ts_BSSMAP_oldToNewBSSIEs(template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId last_used_eutran_plmn)</span><br><span style="color: hsl(120, 100%, 40%);">+   return template (omit) BSSMAP_oldToNewBSSIEs {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (istemplatekind(last_used_eutran_plmn, "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 ts_BSSMAP_oldToNewBSSIEs(last_used_eutran_plmn);</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 (value) BSSMAP_IE_OldToNewBSSInfo ts_BSSMAP_IE_OldToNewBSSInfo(template (value) BSSMAP_oldToNewBSSIEs val) := {</span><br><span>       elementIdentifier := '3A'O,</span><br><span>  lengthIndicator := 0,   /* overwritten by codec */</span><br><span style="color: hsl(0, 100%, 40%);">-      oldToNewBSSIEs := val</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_ts_BSSMAP_IE_OldToNewBSSInfo(template (omit) BSSMAP_oldToNewBSSIEs val)</span><br><span style="color: hsl(120, 100%, 40%);">+       return template (omit) BSSMAP_IE_OldToNewBSSInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+   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 ts_BSSMAP_IE_OldToNewBSSInfo(val);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> }</span><br><span> </span><br><span> template (value) BSSMAP_IE_Osmo_OsmuxSupport tr_BSSMAP_IE_Osmo_OsmuxSupport := {</span><br><span>@@ -907,7 +935,8 @@</span><br><span>                 template BSSMAP_IE_CircuitIdentityCode cic := omit,</span><br><span>          template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,</span><br><span>              template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),</span><br><span style="color: hsl(0, 100%, 40%);">-             template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1)</span><br><span style="color: hsl(120, 100%, 40%);">+            template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1),</span><br><span style="color: hsl(120, 100%, 40%);">+           template (omit) BSSMAP_oldToNewBSSIEs oldToNewBSSIEs := omit</span><br><span>                 )</span><br><span> modifies ts_BSSAP_BSSMAP := {</span><br><span>   pdu := {</span><br><span>@@ -941,7 +970,7 @@</span><br><span>                               talkerFlag := omit,</span><br><span>                          configurationEvolutionIndication := omit,</span><br><span>                            chosenEncryptionAlgorithm := 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>                           lSAInformation := omit,</span><br><span>                              lSAAccessControlSuppression := omit,</span><br><span>                                 serviceHandover := omit,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23776">change 23776</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/+/23776"/><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: If26cc9241b1b0eb4112f1227427008ece242bb41 </div>
<div style="display:none"> Gerrit-Change-Number: 23776 </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>