<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17064">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hlr: new test: TC_MSLookup_GSUP_proxy<br><br>Let OsmoHLR act as proxy between MSC and another HLR during Location<br>Update.<br><br>Related: OS#4380<br>Change-Id: I945e651f1346e56dbe3c02d9d08ccd95cc8d6626<br>---<br>M hlr/HLR_Tests.ttcn<br>M hlr/gen_links.sh<br>M library/MSLookup_mDNS_Templates.ttcn<br>3 files changed, 137 insertions(+), 1 deletion(-)<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/64/17064/1</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 2becad8..04b257d 100644</span><br><span>--- a/hlr/HLR_Tests.ttcn</span><br><span>+++ b/hlr/HLR_Tests.ttcn</span><br><span>@@ -34,6 +34,7 @@</span><br><span> import from MSLookup_mDNS_Types all;</span><br><span> import from MSLookup_mDNS_Emulation all;</span><br><span> import from MSLookup_mDNS_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from DNS_Helpers all;</span><br><span> </span><br><span> type component test_CT extends CTRL_Adapter_CT {</span><br><span>  /* emulated GSUP client (MSC/SGSN) */</span><br><span>@@ -1651,6 +1652,57 @@</span><br><span>       vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Let OsmoHLR act as proxy between MSC and another HLR during UL */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_MSLookup_GSUP_proxy() runs on HLR_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      var MSLookup_mDNS mdns_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+   var integer id;</span><br><span style="color: hsl(120, 100%, 40%);">+       var hexstring imsi := g_pars.sub.imsi;</span><br><span style="color: hsl(120, 100%, 40%);">+        var hexstring msisdn := g_pars.sub.msisdn;</span><br><span style="color: hsl(120, 100%, 40%);">+    var charstring domain := "gsup.hlr." & hex2str(imsi) & ".imsi.mdns.osmocom.org";</span><br><span style="color: hsl(120, 100%, 40%);">+  var octetstring destination_name := char2oct(ccm_pars_client.ser_nr) & '00'O; /* TS-MSC IPA name */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* [GSUP] TS-MSC  => HLR proxy: Update Location Request with unknown IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+       GSUP.send(valueof(ts_GSUP_UL_REQ(imsi, OSMO_GSUP_CN_DOMAIN_CS))) to vc_GSUP_client;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* [GSUP] TS-HLR: expect GSUP messages with that IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+      f_create_gsup_expect_explicit(hex2str(imsi), vc_GSUP_server);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* [mDNS] TS-HLR <=  HLR proxy: query for GSUP server who knows the IMSI */</span><br><span style="color: hsl(120, 100%, 40%);">+        mDNS.receive(tr_MSLookup_mDNS_query(domain)) -> value mdns_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* [mDNS] TS-HLR  => HLR proxy: result with IP/port of TS GSUP server */</span><br><span style="color: hsl(120, 100%, 40%);">+   id := mdns_msg.dnsMessage.header.id;</span><br><span style="color: hsl(120, 100%, 40%);">+  mDNS.send(t_MSLookup_mDNS_result_IPv4(id, domain, f_enc_IPv4(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%);">+       /* [GSUP] TS-HLR <=> HLR proxy <=> TS-MSC: finish up UL */</span><br><span style="color: hsl(120, 100%, 40%);">+        GSUP.receive(tr_GSUP_UL_REQ(imsi)) from vc_GSUP_server;</span><br><span style="color: hsl(120, 100%, 40%);">+       GSUP.send(valueof(ts_GSUP_ISD_REQ(imsi, msisdn, destination_name))) to vc_GSUP_server;</span><br><span style="color: hsl(120, 100%, 40%);">+        GSUP.receive(tr_GSUP_ISD_REQ(imsi, g_pars.sub.msisdn)) from vc_GSUP_client;</span><br><span style="color: hsl(120, 100%, 40%);">+   GSUP.send(valueof(ts_GSUP_ISD_RES(imsi, destination_name))) to vc_GSUP_server;</span><br><span style="color: hsl(120, 100%, 40%);">+        GSUP.receive(tr_GSUP_ISD_RES(imsi)) from vc_GSUP_client;</span><br><span style="color: hsl(120, 100%, 40%);">+      GSUP.send(valueof(ts_GSUP_UL_RES(imsi, destination_name))) to vc_GSUP_server;</span><br><span style="color: hsl(120, 100%, 40%);">+ GSUP.receive(tr_GSUP_UL_RES(imsi)) from vc_GSUP_client;</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+testcase TC_MSLookup_GSUP_proxy() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var hexstring imsi := f_rnd_imsi('26242'H);</span><br><span style="color: hsl(120, 100%, 40%);">+   var hexstring msisdn := '49161'H & f_rnd_hexstring(7, 9);</span><br><span style="color: hsl(120, 100%, 40%);">+ var HLR_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     var HLR_ConnHdlrPars pars := valueof(t_Pars(imsi, msisdn));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init(false, true);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_config(VTY, "mslookup", "mdns bind");</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_TC_MSLookup_GSUP_proxy), pars, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   timer T := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] vc_conn.done {}</span><br><span style="color: hsl(120, 100%, 40%);">+    [] T.timeout { setverdict(fail, "Timeout"); mtc.stop; };</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> /* TODO:</span><br><span>   * UL with ISD error</span><br><span>   * UL with ISD timeout</span><br><span>@@ -1699,6 +1751,7 @@</span><br><span> </span><br><span>   if (mp_hlr_supports_dgsm) {</span><br><span>          execute( TC_MSLookup_mDNS_server() );</span><br><span style="color: hsl(120, 100%, 40%);">+         execute( TC_MSLookup_GSUP_proxy() );</span><br><span>         }</span><br><span> };</span><br><span> </span><br><span>diff --git a/hlr/gen_links.sh b/hlr/gen_links.sh</span><br><span>index 14a3f8d..c77920d 100755</span><br><span>--- a/hlr/gen_links.sh</span><br><span>+++ b/hlr/gen_links.sh</span><br><span>@@ -48,7 +48,7 @@</span><br><span> FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn "</span><br><span> FILES+="Osmocom_VTY_Functions.ttcn "</span><br><span> FILES+="SS_Templates.ttcn USSD_Helpers.ttcn "</span><br><span style="color: hsl(0, 100%, 40%);">-FILES+="MSLookup_mDNS_Types.ttcn MSLookup_mDNS_Emulation.ttcn MSLookup_mDNS_Templates.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="MSLookup_mDNS_Types.ttcn MSLookup_mDNS_Emulation.ttcn MSLookup_mDNS_Templates.ttcn DNS_Helpers.ttcn "</span><br><span> </span><br><span> </span><br><span> gen_links $DIR $FILES</span><br><span>diff --git a/library/MSLookup_mDNS_Templates.ttcn b/library/MSLookup_mDNS_Templates.ttcn</span><br><span>index e2426fa..e8158eb 100644</span><br><span>--- a/library/MSLookup_mDNS_Templates.ttcn</span><br><span>+++ b/library/MSLookup_mDNS_Templates.ttcn</span><br><span>@@ -45,6 +45,38 @@</span><br><span>      udpPort := 4266</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template MSLookup_mDNS tr_MSLookup_mDNS_query(charstring domain) := {</span><br><span style="color: hsl(120, 100%, 40%);">+       dnsMessage := {</span><br><span style="color: hsl(120, 100%, 40%);">+               header := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   id := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                      qr := DNS_QUERY,</span><br><span style="color: hsl(120, 100%, 40%);">+                      opCode := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                  aa := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  tc := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  rd := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  ra := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  z := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                  rCode := DNS_NO_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                        qdCount := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+                 anCount := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                 nsCount := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                 arCount := 0</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            queries := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  {</span><br><span style="color: hsl(120, 100%, 40%);">+                             qName := domain,</span><br><span style="color: hsl(120, 100%, 40%);">+                              qType := 255,</span><br><span style="color: hsl(120, 100%, 40%);">+                         qClass := DNS_IN</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%);">+            answers := {},</span><br><span style="color: hsl(120, 100%, 40%);">+                nameServerRecords := {},</span><br><span style="color: hsl(120, 100%, 40%);">+              additionalRecords := {}</span><br><span style="color: hsl(120, 100%, 40%);">+       },</span><br><span style="color: hsl(120, 100%, 40%);">+    udpAddress := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+      udpPort := ?</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> template MSLookup_mDNS tr_MSLookup_mDNS_result_IPv4(integer id, charstring domain, UInt32 ip_v4, integer port_v4) := {</span><br><span>  dnsMessage := {</span><br><span>              header := {</span><br><span>@@ -96,4 +128,55 @@</span><br><span>    udpPort := ?</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template MSLookup_mDNS t_MSLookup_mDNS_result_IPv4(integer id, charstring domain, UInt32 ip_v4, integer port_v4) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  dnsMessage := {</span><br><span style="color: hsl(120, 100%, 40%);">+               header := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   id := id,</span><br><span style="color: hsl(120, 100%, 40%);">+                     qr := DNS_RESPONSE,</span><br><span style="color: hsl(120, 100%, 40%);">+                   opCode := DNS_OP_QUERY,</span><br><span style="color: hsl(120, 100%, 40%);">+                       aa := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  tc := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  rd := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  ra := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                  z := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                  rCode := DNS_NO_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                        qdCount := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                 anCount := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+                 nsCount := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                 arCount := 0</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            queries := {},</span><br><span style="color: hsl(120, 100%, 40%);">+                answers := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  {</span><br><span style="color: hsl(120, 100%, 40%);">+                             name := domain,</span><br><span style="color: hsl(120, 100%, 40%);">+                               rrType := DNS_TXT,</span><br><span style="color: hsl(120, 100%, 40%);">+                            rrClass := DNS_IN,</span><br><span style="color: hsl(120, 100%, 40%);">+                            ttl := '00000000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                           rdLength := 6,</span><br><span style="color: hsl(120, 100%, 40%);">+                                rData := {txt := {"age=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%);">+                             name := domain,</span><br><span style="color: hsl(120, 100%, 40%);">+                               rrType := DNS_A,</span><br><span style="color: hsl(120, 100%, 40%);">+                              rrClass := DNS_IN,</span><br><span style="color: hsl(120, 100%, 40%);">+                            ttl := '00000000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                           rdLength := 4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                rData := {a := ip_v4}</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%);">+                             name := domain,</span><br><span style="color: hsl(120, 100%, 40%);">+                               rrType := DNS_TXT,</span><br><span style="color: hsl(120, 100%, 40%);">+                            rrClass := DNS_IN,</span><br><span style="color: hsl(120, 100%, 40%);">+                            ttl := '00000000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                           rdLength := 1 + lengthof("port=" & int2str(port_v4)),</span><br><span style="color: hsl(120, 100%, 40%);">+                           rData := {txt := {"port=" & int2str(port_v4)}}</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%);">+            nameServerRecords := {},</span><br><span style="color: hsl(120, 100%, 40%);">+              additionalRecords := {}</span><br><span style="color: hsl(120, 100%, 40%);">+       },</span><br><span style="color: hsl(120, 100%, 40%);">+    udpAddress := "239.192.23.42",</span><br><span style="color: hsl(120, 100%, 40%);">+      udpPort := 4266</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/+/17064">change 17064</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/+/17064"/><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: I945e651f1346e56dbe3c02d9d08ccd95cc8d6626 </div>
<div style="display:none"> Gerrit-Change-Number: 17064 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>