<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16914">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hlr: add TC_MSLookup_mDNS_server<br><br>Send an mslookup mDNS request to OsmoHLR and verify the answer.<br><br>Related: SYS#4618<br>Change-Id: Ia7f92d33691f910549353b16a7b0efc18e521719<br>---<br>M hlr/HLR_Tests.cfg<br>M hlr/HLR_Tests.default<br>M hlr/HLR_Tests.ttcn<br>M hlr/gen_links.sh<br>M hlr/regen_makefile.sh<br>A library/MSLookup_mDNS_Emulation.ttcn<br>A library/MSLookup_mDNS_Templates.ttcn<br>A library/MSLookup_mDNS_Types.ttcn<br>8 files changed, 271 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/14/16914/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/hlr/HLR_Tests.cfg b/hlr/HLR_Tests.cfg</span><br><span>index 7416362..1ab6e87 100644</span><br><span>--- a/hlr/HLR_Tests.cfg</span><br><span>+++ b/hlr/HLR_Tests.cfg</span><br><span>@@ -12,6 +12,7 @@</span><br><span> </span><br><span> </span><br><span> [MODULE_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+HLR_Tests.mp_hlr_supports_dgsm := true</span><br><span> </span><br><span> [MAIN_CONTROLLER]</span><br><span> </span><br><span>diff --git a/hlr/HLR_Tests.default b/hlr/HLR_Tests.default</span><br><span>index 84d4ff3..2e9aac6 100644</span><br><span>--- a/hlr/HLR_Tests.default</span><br><span>+++ b/hlr/HLR_Tests.default</span><br><span>@@ -11,6 +11,11 @@</span><br><span> *.VTY.CTRL_CLIENT_CLEANUP_LINEFEED := "yes"</span><br><span> *.VTY.CTRL_DETECT_CONNECTION_ESTABLISHMENT_RESULT := "yes"</span><br><span> *.VTY.PROMPT1 := "OsmoHLR> "</span><br><span style="color: hsl(120, 100%, 40%);">+*.mDNS_UDP.debugging := "YES"</span><br><span style="color: hsl(120, 100%, 40%);">+*.mDNS_UDP.localPort := "4266"</span><br><span style="color: hsl(120, 100%, 40%);">+*.mDNS_UDP.localIPAddr := "239.192.23.42"</span><br><span style="color: hsl(120, 100%, 40%);">+*.mDNS_UDP.broadcast := "enabled"</span><br><span style="color: hsl(120, 100%, 40%);">+*.mDNS_UDP.reuseAddr := "enabled"</span><br><span> </span><br><span> [MODULE_PARAMETERS]</span><br><span> Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoHLR";</span><br><span>diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn</span><br><span>index 0c56bcd..3e9f69a 100644</span><br><span>--- a/hlr/HLR_Tests.ttcn</span><br><span>+++ b/hlr/HLR_Tests.ttcn</span><br><span>@@ -31,6 +31,11 @@</span><br><span> import from Osmocom_VTY_Functions all;</span><br><span> import from TELNETasp_PortType all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from DNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MSLookup_mDNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MSLookup_mDNS_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MSLookup_mDNS_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type component test_CT extends CTRL_Adapter_CT {</span><br><span>         var IPA_Emulation_CT vc_IPA;</span><br><span>         var IPA_CCM_Parameters ccm_pars;</span><br><span>@@ -43,6 +48,8 @@</span><br><span> </span><br><span>     port TELNETasp_PT VTY;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    var MSLookup_mDNS_Emulation_CT vc_MSLookup_mDNS;</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>@@ -50,6 +57,9 @@</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 style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Drop after osmo-hlr release > 1.2.0 */</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean mp_hlr_supports_dgsm := true;</span><br><span> };</span><br><span> </span><br><span> type record HlrSubscrAud2G {</span><br><span>@@ -77,6 +87,7 @@</span><br><span>  timer g_Tguard := 10.0;</span><br><span>      var HLR_ConnHdlrPars g_pars;</span><br><span>         port TELNETasp_PT VTY;</span><br><span style="color: hsl(120, 100%, 40%);">+        port MSLookup_mDNS_PT mDNS;</span><br><span> }</span><br><span> </span><br><span> type record HLR_ConnHdlrPars {</span><br><span>@@ -113,6 +124,9 @@</span><br><span>         map(self:VTY, system:VTY);</span><br><span>   f_vty_set_prompts(VTY);</span><br><span>      f_vty_transceive(VTY, "enable");</span><br><span style="color: hsl(120, 100%, 40%);">+    if (mp_hlr_supports_dgsm) {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_vty_config(VTY, "mslookup", "no mdns bind");</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> }</span><br><span> </span><br><span> private altstep as_Tguard() runs on test_CT {</span><br><span>@@ -164,6 +178,11 @@</span><br><span>   }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_init_mslookup() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_MSLookup_mDNS := MSLookup_mDNS_Emulation_CT.create;</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_MSLookup_mDNS.start(MSLookup_mDNS_Emulation.f_main());</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_init(boolean legacy := true) runs on test_CT {</span><br><span> </span><br><span>      /* activate default guard timer to ensure all tests eventually terminate */</span><br><span>@@ -172,6 +191,7 @@</span><br><span> </span><br><span>        f_init_gsup("HLR_Test", legacy);</span><br><span>   f_init_vty();</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_mslookup();</span><br><span> </span><br><span>       f_ipa_ctrl_start(mp_hlr_ip, mp_hlr_ctrl_port);</span><br><span> }</span><br><span>@@ -183,6 +203,7 @@</span><br><span>    vc_conn := HLR_ConnHdlr.create(id);</span><br><span>  connect(vc_conn:GSUP, vc_GSUP:GSUP_CLIENT);</span><br><span>  connect(vc_conn:GSUP_PROC, vc_GSUP:GSUP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+        connect(vc_conn:mDNS, vc_MSLookup_mDNS:mDNS);</span><br><span> </span><br><span>    vc_conn.start(f_handler_init(fn, id, pars));</span><br><span>         return vc_conn;</span><br><span>@@ -1455,6 +1476,63 @@</span><br><span>     vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Send an mslookup mDNS request to OsmoHLR and verify the answer */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_MSLookup_mDNS_server() runs on HLR_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T;</span><br><span style="color: hsl(120, 100%, 40%);">+      var MSLookup_mDNS vl_rmsg;</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer id := f_rnd_int(65535); /* mDNS packet ID */</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 charstring domain := "sip.voice." & hex2str(msisdn) & ".msisdn.mdns.osmocom.org";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Create subscriber */</span><br><span style="color: hsl(120, 100%, 40%);">+       g_pars.sub.msisdn := msisdn;</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_subscr_create(VTY, g_pars.sub);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Send mDNS query, expect timeout */</span><br><span style="color: hsl(120, 100%, 40%);">+ mDNS.send(t_MSLookup_mDNS_query(id, domain));</span><br><span style="color: hsl(120, 100%, 40%);">+ T.start(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] mDNS.receive(tr_MSLookup_mDNS_result_IPv4(id, domain, '42424242'O, 5060)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "OsmoHLR answered to mDNS query before subscriber did LU");</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] mDNS.receive(MSLookup_mDNS:?) -> value vl_rmsg {</span><br><span style="color: hsl(120, 100%, 40%);">+                repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</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 style="color: hsl(120, 100%, 40%);">+   /* Location update */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_perform_UL(g_pars.sub.imsi, msisdn, dom := OSMO_GSUP_CN_DOMAIN_CS);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Send mDNS query again, expect result */</span><br><span style="color: hsl(120, 100%, 40%);">+    mDNS.send(t_MSLookup_mDNS_query(id, domain));</span><br><span style="color: hsl(120, 100%, 40%);">+ T.start(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] mDNS.receive(tr_MSLookup_mDNS_result_IPv4(id, domain, '42424242'O, 5060)) {</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%);">+     [] mDNS.receive(MSLookup_mDNS:?) -> value vl_rmsg {</span><br><span style="color: hsl(120, 100%, 40%);">+                repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "OsmoHLR did not answer to mDNS query");</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 style="color: hsl(120, 100%, 40%);">+testcase TC_MSLookup_mDNS_server() 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 HLR_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+     var HLR_ConnHdlrPars pars := valueof(t_Pars(imsi));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init(false);</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%);">+       f_vty_config2(VTY, {"mslookup", "server"}, "service sip.voice at 66.66.66.66 5060");</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_MSLookup_mDNS_server), 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%);">+</span><br><span> /* TODO:</span><br><span>   * UL with ISD error</span><br><span>   * UL with ISD timeout</span><br><span>@@ -1499,6 +1577,10 @@</span><br><span>  execute( TC_subscr_create_on_demand_check_imei_early() );</span><br><span>    execute( TC_subscr_create_on_demand_ul() );</span><br><span>  execute( TC_subscr_create_on_demand_sai() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (mp_hlr_supports_dgsm) {</span><br><span style="color: hsl(120, 100%, 40%);">+           execute( TC_MSLookup_mDNS_server() );</span><br><span style="color: hsl(120, 100%, 40%);">+ }</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 872820d..14a3f8d 100755</span><br><span>--- a/hlr/gen_links.sh</span><br><span>+++ b/hlr/gen_links.sh</span><br><span>@@ -35,11 +35,20 @@</span><br><span> FILES+="SS_DataTypes.asn SS_Errors.asn SS_Operations.asn SS_PDU_Defs.asn SS_Protocol.asn SS_Types.ttcn SS_EncDec.cc"</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.DNS/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="DNS_EncDec.cc DNS_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.TestPorts.UDPasp/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="UDPasp_PT.cc  UDPasp_PT.hh  UDPasp_PortType.ttcn  UDPasp_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DIR=../library</span><br><span> FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp GSUP_Types.ttcn GSUP_Emulation.ttcn "</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(120, 100%, 40%);">+FILES+="MSLookup_mDNS_Types.ttcn MSLookup_mDNS_Emulation.ttcn MSLookup_mDNS_Templates.ttcn"</span><br><span> </span><br><span> </span><br><span> gen_links $DIR $FILES</span><br><span>diff --git a/hlr/regen_makefile.sh b/hlr/regen_makefile.sh</span><br><span>index 1a1d812..14b05da 100755</span><br><span>--- a/hlr/regen_makefile.sh</span><br><span>+++ b/hlr/regen_makefile.sh</span><br><span>@@ -2,7 +2,7 @@</span><br><span> </span><br><span> MAIN="HLR_Tests.ttcn"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-FILES="*.ttcn *.ttcnpp IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc TELNETasp_PT.cc TCCEncoding.cc SS_EncDec.cc MAP_EncDec.cc *.asn"</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="*.ttcn *.ttcnpp DNS_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc TELNETasp_PT.cc TCCEncoding.cc UDPasp_PT.cc SS_EncDec.cc MAP_EncDec.cc *.asn"</span><br><span> </span><br><span> export CPPFLAGS_TTCN3="-DIPA_EMULATION_GSUP -DIPA_EMULATION_CTRL"</span><br><span> </span><br><span>diff --git a/library/MSLookup_mDNS_Emulation.ttcn b/library/MSLookup_mDNS_Emulation.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..a1aa4e3</span><br><span>--- /dev/null</span><br><span>+++ b/library/MSLookup_mDNS_Emulation.ttcn</span><br><span>@@ -0,0 +1,43 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module MSLookup_mDNS_Emulation {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2020 sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</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%);">+import from DNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from UDPasp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from UDPasp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MSLookup_mDNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function f_main() runs on MSLookup_mDNS_Emulation_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     var MSLookup_mDNS vl_dnsmsg;</span><br><span style="color: hsl(120, 100%, 40%);">+  var ASP_UDP vl_udpmsg;</span><br><span style="color: hsl(120, 100%, 40%);">+        map(self:mDNS_UDP, system:UDP);</span><br><span style="color: hsl(120, 100%, 40%);">+       alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] mDNS_UDP.receive(ASP_UDP:?) -> value vl_udpmsg {</span><br><span style="color: hsl(120, 100%, 40%);">+                mDNS.send(MSLookup_mDNS: {</span><br><span style="color: hsl(120, 100%, 40%);">+                      dec_PDU_DNS(vl_udpmsg.data),</span><br><span style="color: hsl(120, 100%, 40%);">+                          vl_udpmsg.addressf,</span><br><span style="color: hsl(120, 100%, 40%);">+                   vl_udpmsg.portf</span><br><span style="color: hsl(120, 100%, 40%);">+             });</span><br><span style="color: hsl(120, 100%, 40%);">+           repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] mDNS.receive(MSLookup_mDNS:?) -> value vl_dnsmsg {</span><br><span style="color: hsl(120, 100%, 40%);">+              mDNS_UDP.send(ASP_UDP: {</span><br><span style="color: hsl(120, 100%, 40%);">+                       enc_PDU_DNS(vl_dnsmsg.dnsMessage, false, true),</span><br><span style="color: hsl(120, 100%, 40%);">+                       vl_dnsmsg.udpAddress,</span><br><span style="color: hsl(120, 100%, 40%);">+                         vl_dnsmsg.udpPort</span><br><span style="color: hsl(120, 100%, 40%);">+            });</span><br><span style="color: hsl(120, 100%, 40%);">+   repeat;</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%);">+     unmap(self:mDNS_UDP, system:UDP);</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>diff --git a/library/MSLookup_mDNS_Templates.ttcn b/library/MSLookup_mDNS_Templates.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..dd408c5</span><br><span>--- /dev/null</span><br><span>+++ b/library/MSLookup_mDNS_Templates.ttcn</span><br><span>@@ -0,0 +1,99 @@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2020 by sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</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%);">+module MSLookup_mDNS_Templates {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from DNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MSLookup_mDNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template MSLookup_mDNS t_MSLookup_mDNS_query(integer id, 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 := 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 := "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 style="color: hsl(120, 100%, 40%);">+template MSLookup_mDNS tr_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 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     rdLength := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        rData := {txt := {pattern "age=*"}}</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 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     rdLength := ?,</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 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     rdLength := ?,</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 := ?,</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 style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/library/MSLookup_mDNS_Types.ttcn b/library/MSLookup_mDNS_Types.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..dacbb2b</span><br><span>--- /dev/null</span><br><span>+++ b/library/MSLookup_mDNS_Types.ttcn</span><br><span>@@ -0,0 +1,31 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module MSLookup_mDNS_Types {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2020 sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</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%);">+import from DNS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from UDPasp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from UDPasp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record MSLookup_mDNS {</span><br><span style="color: hsl(120, 100%, 40%);">+     PDU_DNS       dnsMessage,</span><br><span style="color: hsl(120, 100%, 40%);">+     AddressType   udpAddress,</span><br><span style="color: hsl(120, 100%, 40%);">+     PortType      udpPort</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 port MSLookup_mDNS_PT message {</span><br><span style="color: hsl(120, 100%, 40%);">+      inout MSLookup_mDNS</span><br><span style="color: hsl(120, 100%, 40%);">+} with { extension "internal" }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type component MSLookup_mDNS_Emulation_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ port MSLookup_mDNS_PT mDNS;</span><br><span style="color: hsl(120, 100%, 40%);">+   port UDPasp_PT mDNS_UDP;</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></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16914">change 16914</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/+/16914"/><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: Ia7f92d33691f910549353b16a7b0efc18e521719 </div>
<div style="display:none"> Gerrit-Change-Number: 16914 </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>