<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9204">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">MSC_Tests: add test to try two LU from different BSCs<br><br>Currently we are only able to simulate a Location Update from a<br>single BSC. However, as a preperation for inter BSC handover tests<br>we need to be able to communicate to the MSC from two independed<br>BSC instances. A location update is a simple operation to try out<br>the multi-bsc functionality<br><br>- Add support to create multiple BSC instances in independed ports<br>- Add test to simulate a LU from two different BSCs<br><br>Change-Id: Ib3eabf8537066f43faed8fb983d9e1f4092ec515<br>Related: OS#1609<br>---<br>M library/BSSMAP_Emulation.ttcn<br>M msc/BSC_ConnectionHandler.ttcn<br>M msc/MSC_Tests.ttcn<br>M msc/expected-results.xml<br>4 files changed, 69 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/04/9204/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/BSSMAP_Emulation.ttcn b/library/BSSMAP_Emulation.ttcn</span><br><span>index 95b39f3..74c6ed0 100644</span><br><span>--- a/library/BSSMAP_Emulation.ttcn</span><br><span>+++ b/library/BSSMAP_Emulation.ttcn</span><br><span>@@ -47,8 +47,11 @@</span><br><span> type component BSSAP_ConnHdlr {</span><br><span> /* port towards MSC Emulator core / SCCP connection dispatchar */</span><br><span> port BSSAP_Conn_PT BSSAP;</span><br><span style="color: hsl(120, 100%, 40%);">+ port BSSAP_Conn_PT BSSAP_1;</span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span> /* procedure based port to register for incoming connections */</span><br><span> port BSSMAPEM_PROC_PT BSSAP_PROC;</span><br><span style="color: hsl(120, 100%, 40%);">+ port BSSMAPEM_PROC_PT BSSAP_PROC_1;</span><br><span> }</span><br><span> </span><br><span> /* Auxiliary primitive that can happen on the port between per-connection client and this dispatcher */</span><br><span>diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn</span><br><span>index b7a4f50..69608bd 100644</span><br><span>--- a/msc/BSC_ConnectionHandler.ttcn</span><br><span>+++ b/msc/BSC_ConnectionHandler.ttcn</span><br><span>@@ -44,10 +44,16 @@</span><br><span> boolean expect_ciph</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-type record BSC_ConnHdlrPars {</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSC_ConnHdlrBscPars {</span><br><span> SCCP_PAR_Address sccp_addr_own,</span><br><span> SCCP_PAR_Address sccp_addr_peer,</span><br><span style="color: hsl(0, 100%, 40%);">- BSSMAP_IE_CellIdentifier cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSMAP_IE_CellIdentifier cell_id</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%);">+type record of BSC_ConnHdlrBscPars BSC_ConnHdlrBscParsTable;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record BSC_ConnHdlrPars {</span><br><span style="color: hsl(120, 100%, 40%);">+ BSC_ConnHdlrBscParsTable bsc,</span><br><span> hexstring imei,</span><br><span> hexstring imsi,</span><br><span> hexstring msisdn,</span><br><span>@@ -173,15 +179,16 @@</span><br><span> };</span><br><span> </span><br><span> /* Encode 'l3' and ask BSSMAP_Emulation to create new connection with COMPL L3 INFO */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_bssap_compl_l3(PDU_ML3_MS_NW l3)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_bssap_compl_l3(PDU_ML3_MS_NW l3, integer bsc_num := 0, BSSAP_Conn_PT BSSAP_PT := BSSAP)</span><br><span> runs on BSC_ConnHdlr {</span><br><span> log("Sending COMPL L3: ", l3);</span><br><span> var octetstring l3_enc := enc_PDU_ML3_MS_NW(l3);</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, g_pars.sccp_addr_own,</span><br><span style="color: hsl(0, 100%, 40%);">- valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, l3_enc))));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP_PT.send(ts_BSSAP_Conn_Req(g_pars.bsc[bsc_num].sccp_addr_peer, g_pars.bsc[bsc_num].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+ valueof(ts_BSSMAP_ComplL3(g_pars.bsc[bsc_num].cell_id, l3_enc))));</span><br><span> alt {</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP_PT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP_PT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {</span><br><span> setverdict(fail, "DISC.ind from SCCP");</span><br><span> self.stop;</span><br><span> }</span><br><span>@@ -297,7 +304,7 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_perform_lu()</span><br><span style="color: hsl(120, 100%, 40%);">+function f_perform_lu(integer bsc_num := 0, BSSAP_Conn_PT BSSAP_PT := BSSAP)</span><br><span> runs on BSC_ConnHdlr {</span><br><span> var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)</span><br><span> var PDU_DTAP_MT dtap_mt;</span><br><span>@@ -306,10 +313,10 @@</span><br><span> f_create_gsup_expect(hex2str(g_pars.imsi));</span><br><span> </span><br><span> /* Send BSSAP_Conn_Req with COMPL L3 INFO to MSC */</span><br><span style="color: hsl(0, 100%, 40%);">- f_bssap_compl_l3(l3_lu);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_bssap_compl_l3(l3_lu, bsc_num, BSSAP_PT);</span><br><span> </span><br><span> if (g_pars.send_early_cm) {</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP_PT.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));</span><br><span> }</span><br><span> </span><br><span> f_mm_common();</span><br><span>@@ -321,7 +328,7 @@</span><br><span> GSUP.send(ts_GSUP_UL_RES(g_pars.imsi));</span><br><span> </span><br><span> alt {</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) -> value dtap_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP_PT.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) -> value dtap_mt {</span><br><span> var PDU_ML3_LocationUpdateAccept lu_acc := dtap_mt.dtap.msgs.mm.locationUpdateAccept;</span><br><span> if (g_pars.net.expect_tmsi) {</span><br><span> if (not ispresent(lu_acc.mobileIdentityTLV) or</span><br><span>@@ -330,7 +337,7 @@</span><br><span> self.stop;</span><br><span> } else {</span><br><span> g_pars.tmsi := lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets;</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_TmsiRealloc_Cmpl));</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP_PT.send(ts_PDU_DTAP_MO(ts_ML3_MO_TmsiRealloc_Cmpl));</span><br><span> }</span><br><span> } else {</span><br><span> if (ispresent(lu_acc.mobileIdentityTLV) and</span><br><span>@@ -340,15 +347,15 @@</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- [] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP_PT.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {</span><br><span> setverdict(fail, "Expected LU ACK, but received LU REJ");</span><br><span> self.stop;</span><br><span> }</span><br><span> }</span><br><span> /* FIXME: there could be pending SMS or other common procedures by the MSC, let's ignore them */</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.receive(tr_BSSMAP_ClearCommand);</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_BSSMAP_ClearComplete);</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP_PT.receive(tr_BSSMAP_ClearCommand);</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP_PT.send(ts_BSSMAP_ClearComplete);</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP_PT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);</span><br><span> setverdict(pass);</span><br><span> }</span><br><span> </span><br><span>diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn</span><br><span>index edaa61b..ebf0081 100644</span><br><span>--- a/msc/MSC_Tests.ttcn</span><br><span>+++ b/msc/MSC_Tests.ttcn</span><br><span>@@ -434,10 +434,22 @@</span><br><span> expect_auth := false,</span><br><span> expect_ciph := false</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSC_ConnHdlrBscParsTable bsc_pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ sccp_addr_own := g_bssap[0].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+ sccp_addr_peer := g_bssap[0].sccp_addr_peer,</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 23, 42))</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%);">+ sccp_addr_own := g_bssap[1].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+ sccp_addr_peer := g_bssap[1].sccp_addr_peer,</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 24, 43))</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> var BSC_ConnHdlrPars pars := {</span><br><span style="color: hsl(0, 100%, 40%);">- sccp_addr_own := g_bssap[0].sccp_addr_own,</span><br><span style="color: hsl(0, 100%, 40%);">- sccp_addr_peer := g_bssap[0].sccp_addr_peer,</span><br><span style="color: hsl(0, 100%, 40%);">- cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 23, 42)),</span><br><span style="color: hsl(120, 100%, 40%);">+ bsc := bsc_pars,</span><br><span> imei := f_gen_imei(imsi_suffix),</span><br><span> imsi := f_gen_imsi(imsi_suffix),</span><br><span> msisdn := f_gen_msisdn(imsi_suffix),</span><br><span>@@ -449,6 +461,9 @@</span><br><span> net := net_pars,</span><br><span> send_early_cm := true</span><br><span> };</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> return pars;</span><br><span> }</span><br><span> </span><br><span>@@ -460,6 +475,8 @@</span><br><span> /* BSSMAP part / A interface */</span><br><span> connect(vc_conn:BSSAP, g_bssap[0].vc_BSSMAP:CLIENT);</span><br><span> connect(vc_conn:BSSAP_PROC, g_bssap[0].vc_BSSMAP:PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(vc_conn:BSSAP_1, g_bssap[1].vc_BSSMAP:CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(vc_conn:BSSAP_PROC_1, g_bssap[1].vc_BSSMAP:PROC);</span><br><span> /* MNCC part */</span><br><span> connect(vc_conn:MNCC, vc_MNCC:MNCC_CLIENT);</span><br><span> connect(vc_conn:MNCC_PROC, vc_MNCC:MNCC_PROC);</span><br><span>@@ -1106,8 +1123,8 @@</span><br><span> f_init_handler(pars);</span><br><span> </span><br><span> /* Send Complete L3 Info with empty L3 frame */</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, g_pars.sccp_addr_own,</span><br><span style="color: hsl(0, 100%, 40%);">- valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, ''O))));</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP.send(ts_BSSAP_Conn_Req(g_pars.bsc[0].sccp_addr_peer, g_pars.bsc[0].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+ valueof(ts_BSSMAP_ComplL3(g_pars.bsc[0].cell_id, ''O))));</span><br><span> </span><br><span> timer T := 5.0;</span><br><span> T.start;</span><br><span>@@ -1140,8 +1157,8 @@</span><br><span> var octetstring payl := f_rnd_octstring(len);</span><br><span> </span><br><span> /* Send Complete L3 Info with empty L3 frame */</span><br><span style="color: hsl(0, 100%, 40%);">- BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, g_pars.sccp_addr_own,</span><br><span style="color: hsl(0, 100%, 40%);">- valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, payl))));</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP.send(ts_BSSAP_Conn_Req(g_pars.bsc[0].sccp_addr_peer, g_pars.bsc[0].sccp_addr_own,</span><br><span style="color: hsl(120, 100%, 40%);">+ valueof(ts_BSSMAP_ComplL3(g_pars.bsc[0].cell_id, payl))));</span><br><span> </span><br><span> timer T := 5.0;</span><br><span> T.start;</span><br><span>@@ -1847,6 +1864,23 @@</span><br><span> setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_lu_two(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.net.expect_tmsi := false;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_handler(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu(0, BSSAP);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_lu(1, BSSAP_1);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_lu_two() runs on MTC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Like TC_lu_imsi_noauth_notmsi, but with two different BSC */</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init(2);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_config(MSCVTY, "msc", "no assign-tmsi");</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_lu_two), 2);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /***********************************************************************</span><br><span> * SMS Testing</span><br><span> ***********************************************************************/</span><br><span>@@ -2173,6 +2207,7 @@</span><br><span> execute( TC_mo_release_timeout() );</span><br><span> execute( TC_lu_and_mt_call_no_dlcx_resp() );</span><br><span> execute( TC_reset_two() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_lu_two() );</span><br><span> </span><br><span> execute( TC_lu_and_mt_call() );</span><br><span> </span><br><span>diff --git a/msc/expected-results.xml b/msc/expected-results.xml</span><br><span>index 0b192d0..cade469 100644</span><br><span>--- a/msc/expected-results.xml</span><br><span>+++ b/msc/expected-results.xml</span><br><span>@@ -70,6 +70,7 @@</span><br><span> <testcase classname='MSC_Tests' name='TC_mo_release_timeout' time='MASKED'/></span><br><span> <testcase classname='MSC_Tests' name='TC_lu_and_mt_call_no_dlcx_resp' time='MASKED'/></span><br><span> <testcase classname='MSC_Tests' name='TC_reset_two' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+ <testcase classname='MSC_Tests' name='TC_lu_two' time='MASKED'/></span><br><span> <testcase classname='MSC_Tests' name='TC_lu_and_mt_call' time='MASKED'/></span><br><span> <testcase classname='MSC_Tests' name='TC_lu_and_mo_sms' time='MASKED'/></span><br><span> <testcase classname='MSC_Tests' name='TC_lu_and_mt_sms' time='MASKED'/></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9204">change 9204</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/9204"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ib3eabf8537066f43faed8fb983d9e1f4092ec515 </div>
<div style="display:none"> Gerrit-Change-Number: 9204 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>