<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>