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