<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17061">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hlr: add emulated GSUP server (second HLR)<br><br>Prepare for upcoming D-GSM test, which needs to emulate a GSUP server.<br><br>Related: OS#4380<br>Change-Id: Idbfe8a145c90a524145089a06d9bbefac4d7edd8<br>---<br>M hlr/HLR_Tests.ttcn<br>M library/GSUP_Emulation.ttcn<br>2 files changed, 73 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn</span><br><span>index c1cc129..5e9eea6 100644</span><br><span>--- a/hlr/HLR_Tests.ttcn</span><br><span>+++ b/hlr/HLR_Tests.ttcn</span><br><span>@@ -36,6 +36,7 @@</span><br><span> import from MSLookup_mDNS_Templates all;</span><br><span> </span><br><span> type component test_CT extends CTRL_Adapter_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     /* emulated GSUP client (MSC/SGSN) */</span><br><span>        var IPA_Emulation_CT vc_IPA;</span><br><span>         var IPA_CCM_Parameters ccm_pars;</span><br><span>     /* legacy tests without ConnHdlr */</span><br><span>@@ -49,10 +50,15 @@</span><br><span> </span><br><span>        var MSLookup_mDNS_Emulation_CT vc_MSLookup_mDNS;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /* emulated GSUP server (second HLR) */</span><br><span style="color: hsl(120, 100%, 40%);">+       var IPA_Emulation_CT vc_IPA_server;</span><br><span style="color: hsl(120, 100%, 40%);">+   var GSUP_Emulation_CT vc_GSUP_server;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      timer g_Tguard := 10.0;</span><br><span> };</span><br><span> </span><br><span> modulepar {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* OsmoHLR */</span><br><span>        charstring mp_hlr_ip := "127.0.0.1";</span><br><span>       integer mp_hlr_gsup_port := 4222;</span><br><span>    integer mp_hlr_ctrl_port := 4259;</span><br><span>@@ -60,6 +66,10 @@</span><br><span>          when IE ts_GSUP_IE_NUM_VECTORS_REQ is absent */</span><br><span>   integer mp_default_num_auth_tuples := 5;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /* emulated GSUP server (second HLR) */</span><br><span style="color: hsl(120, 100%, 40%);">+       charstring mp_hlr_ts_ip := "127.0.0.99";</span><br><span style="color: hsl(120, 100%, 40%);">+    integer mp_hlr_ts_port := 4222;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* drop after osmo-hlr release > 1.2.0 */</span><br><span>         boolean mp_hlr_supports_dgsm := true;</span><br><span> };</span><br><span>@@ -90,6 +100,11 @@</span><br><span>    var HLR_ConnHdlrPars g_pars;</span><br><span>         port TELNETasp_PT VTY;</span><br><span>       port MSLookup_mDNS_PT mDNS;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Pass from test_CT for explicit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+       var GSUP_Emulation_CT vc_GSUP_server;</span><br><span style="color: hsl(120, 100%, 40%);">+ var GSUP_Emulation_CT vc_GSUP_client;</span><br><span style="color: hsl(120, 100%, 40%);">+ var IPA_CCM_Parameters ccm_pars_client;</span><br><span> }</span><br><span> </span><br><span> type record HLR_ConnHdlrPars {</span><br><span>@@ -138,6 +153,7 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* emulated GSUP client (MSC/SGSN) */</span><br><span> function f_init_gsup(charstring id, boolean legacy) runs on test_CT {</span><br><span>   id := id & "-GSUP";</span><br><span>    var GsupOps ops := {</span><br><span>@@ -180,12 +196,29 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* emulated GSUP server (second HLR) */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_init_gsup_server(charstring id) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     id := id & "-GSUP-server";</span><br><span style="color: hsl(120, 100%, 40%);">+      var GsupOps ops := {</span><br><span style="color: hsl(120, 100%, 40%);">+          create_cb := refers(GSUP_Emulation.ExpectedCreateCallback)</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%);">+   vc_GSUP_server := GSUP_Emulation_CT.create(id);</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_IPA_server := IPA_Emulation_CT.create(id & "-IPA");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        connect(vc_GSUP_server:GSUP, vc_IPA_server:IPA_GSUP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+    map(vc_IPA_server:IPA_PORT, system:IPA_CODEC_PT);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_GSUP_server.start(GSUP_Emulation.main(ops, id));</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_IPA_server.start(IPA_Emulation.main_server(mp_hlr_ts_ip, mp_hlr_ts_port));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_init_mslookup() runs on test_CT {</span><br><span>   vc_MSLookup_mDNS := MSLookup_mDNS_Emulation_CT.create;</span><br><span>       vc_MSLookup_mDNS.start(MSLookup_mDNS_Emulation.f_main());</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_init(boolean legacy := true) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_init(boolean legacy := true, boolean gsup_server := false) runs on test_CT {</span><br><span> </span><br><span>     /* activate default guard timer to ensure all tests eventually terminate */</span><br><span>  g_Tguard.start;</span><br><span>@@ -195,10 +228,20 @@</span><br><span>      f_init_vty();</span><br><span>        f_init_mslookup();</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        if (gsup_server) {</span><br><span style="color: hsl(120, 100%, 40%);">+            f_init_gsup_server("HLR_Test");</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  f_ipa_ctrl_start(mp_hlr_ip, mp_hlr_ctrl_port);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_start_handler(void_fn fn, HLR_ConnHdlrPars pars) runs on test_CT return HLR_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Start HLR_ConnHdlr from testCT in a separate thread.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param void_fn  function to run inside the thread.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param gsup_server  if true, connect the emulated GSUP server ports to the new HLR_ConnHdlr. Then both the emulated</span><br><span style="color: hsl(120, 100%, 40%);">+ *                     GSUP client (MSC/SGSN) and server (second HLR) are connected. Explicit addressing with "to" and</span><br><span style="color: hsl(120, 100%, 40%);">+ *                     "from" must be used, i.e. 'GSUP.receive(tr_GSUP_UL_REQ(...)) from vc_GSUP_server'. */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_start_handler(void_fn fn, HLR_ConnHdlrPars pars, boolean gsup_server := false) runs on test_CT</span><br><span style="color: hsl(120, 100%, 40%);">+return HLR_ConnHdlr {</span><br><span>        var HLR_ConnHdlr vc_conn;</span><br><span>    var charstring id := testcasename();</span><br><span> </span><br><span>@@ -207,7 +250,14 @@</span><br><span>      connect(vc_conn:GSUP_PROC, vc_GSUP:GSUP_PROC);</span><br><span>       connect(vc_conn:mDNS, vc_MSLookup_mDNS:mDNS);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       vc_conn.start(f_handler_init(fn, id, pars));</span><br><span style="color: hsl(120, 100%, 40%);">+  if (gsup_server) {</span><br><span style="color: hsl(120, 100%, 40%);">+            connect(vc_conn:GSUP, vc_GSUP_server:GSUP_CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+            connect(vc_conn:GSUP_PROC, vc_GSUP_server:GSUP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+         vc_conn.start(f_handler_init(fn, id, vc_GSUP_server, vc_GSUP, ccm_pars, pars));</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              vc_conn.start(f_handler_init(fn, id, omit, vc_GSUP, ccm_pars, pars));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return vc_conn;</span><br><span> }</span><br><span> </span><br><span>@@ -218,12 +268,23 @@</span><br><span> }</span><br><span> </span><br><span> /* first function inside ConnHdlr component; sets g_pars + starts function */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_handler_init(void_fn fn, charstring id, template (omit) HLR_ConnHdlrPars pars := omit)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_handler_init(void_fn fn, charstring id,</span><br><span style="color: hsl(120, 100%, 40%);">+                       template (omit) GSUP_Emulation_CT vc_GSUP_server_test_ct,</span><br><span style="color: hsl(120, 100%, 40%);">+                     GSUP_Emulation_CT vc_GSUP_client_test_ct,</span><br><span style="color: hsl(120, 100%, 40%);">+                     IPA_CCM_Parameters ccm_pars_client_test_ct,</span><br><span style="color: hsl(120, 100%, 40%);">+                   template (omit) HLR_ConnHdlrPars pars := omit)</span><br><span> runs on HLR_ConnHdlr</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Pass from test_CT for explicit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (isvalue(vc_GSUP_server_test_ct)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vc_GSUP_server := valueof(vc_GSUP_server_test_ct);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_GSUP_client := vc_GSUP_client_test_ct;</span><br><span style="color: hsl(120, 100%, 40%);">+     ccm_pars_client := ccm_pars_client_test_ct;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        if (isvalue(pars)) {</span><br><span>                 g_pars := valueof(pars);</span><br><span style="color: hsl(0, 100%, 40%);">-                f_create_gsup_expect(hex2str(g_pars.sub.imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+               f_create_gsup_expect_explicit(hex2str(g_pars.sub.imsi), vc_GSUP_client);</span><br><span>     }</span><br><span>    f_handler_init_vty();</span><br><span>        fn.apply();</span><br><span>diff --git a/library/GSUP_Emulation.ttcn b/library/GSUP_Emulation.ttcn</span><br><span>index 5695534..4a03359 100644</span><br><span>--- a/library/GSUP_Emulation.ttcn</span><br><span>+++ b/library/GSUP_Emulation.ttcn</span><br><span>@@ -295,4 +295,11 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Same as f_create_gsup_expect, but with explicit addressing. Needed when connecting multiple ports to GSUP_PROC. */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_create_gsup_expect_explicit(charstring imsi, GSUP_Emulation_CT ct) runs on GSUP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      GSUP_PROC.call(GSUPEM_register:{imsi, self}) to ct {</span><br><span style="color: hsl(120, 100%, 40%);">+          [] GSUP_PROC.getreply(GSUPEM_register:{?,?}) {};</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></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17061">change 17061</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/+/17061"/><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: Idbfe8a145c90a524145089a06d9bbefac4d7edd8 </div>
<div style="display:none"> Gerrit-Change-Number: 17061 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>