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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add SCCP_Tests_RAW for testing the actual SCCP implementation<br><br>Using SCCP_Tests_RAW.ttcn we can trasnceive decoded MTP3 primitives<br>containing decoded SCCP messages against a remote SCCP implementation.<br><br>Related: OS#4343<br>Change-Id: I07c43cfac9cdbdeccf102cd08309ca9ec64968cc<br>---<br>A sccp/SCCP_CodecPort.ttcn<br>M sccp/SCCP_Tests.cfg<br>A sccp/SCCP_Tests_RAW.ttcn<br>3 files changed, 248 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sccp/SCCP_CodecPort.ttcn b/sccp/SCCP_CodecPort.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..838517a</span><br><span>--- /dev/null</span><br><span>+++ b/sccp/SCCP_CodecPort.ttcn</span><br><span>@@ -0,0 +1,73 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module SCCP_CodecPort {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Simple SCCP Codec Port, translating between raw MTP3 primitives with</span><br><span style="color: hsl(120, 100%, 40%);">+ * octetstring payload towards the MTP3 provider, and MTP3-SCCP primitives</span><br><span style="color: hsl(120, 100%, 40%);">+ * which carry the decoded SCCP data types as payload.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2019 by Harald Welte <laforge@gnumonks.org></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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from MTP3asp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MTP3asp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* MTP3asp_Types.Types.MessageTypes.ASP_MTP3_TRANSFERind with PDU_SCCP instead of octetstring */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SCCP_MTP3_TRANSFERind {</span><br><span style="color: hsl(120, 100%, 40%);">+  MTP3_Field_sio  sio,</span><br><span style="color: hsl(120, 100%, 40%);">+  integer         opc,</span><br><span style="color: hsl(120, 100%, 40%);">+  integer         dpc,</span><br><span style="color: hsl(120, 100%, 40%);">+  integer         sls,</span><br><span style="color: hsl(120, 100%, 40%);">+  PDU_SCCP        data</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%);">+/* MTP3asp_Types.Types.MessageTypes.ASP_MTP3_TRANSFERreq with PDU_SCCP instead of octetstring */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SCCP_MTP3_TRANSFERreq {</span><br><span style="color: hsl(120, 100%, 40%);">+     MTP3_Field_sio  sio,</span><br><span style="color: hsl(120, 100%, 40%);">+  integer         opc,</span><br><span style="color: hsl(120, 100%, 40%);">+  integer         dpc,</span><br><span style="color: hsl(120, 100%, 40%);">+  integer         sls,</span><br><span style="color: hsl(120, 100%, 40%);">+  PDU_SCCP        data</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%);">+private function f_dec_TRANSFERind(in ASP_MTP3_TRANSFERind pin, out SCCP_MTP3_TRANSFERind pout) {</span><br><span style="color: hsl(120, 100%, 40%);">+ pout.sio := pin.sio;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.opc := pin.opc;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.dpc := pin.dpc;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.sls := pin.sls;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.data := dec_PDU_SCCP(pin.data);</span><br><span style="color: hsl(120, 100%, 40%);">+  //port.setstate(0);</span><br><span style="color: hsl(120, 100%, 40%);">+} with {extension "prototype(fast)" }</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%);">+private function f_enc_TRANSFERreq(in SCCP_MTP3_TRANSFERreq pin, out ASP_MTP3_TRANSFERreq pout) {</span><br><span style="color: hsl(120, 100%, 40%);">+   pout.sio := pin.sio;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.opc := pin.opc;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.dpc := pin.dpc;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.sls := pin.sls;</span><br><span style="color: hsl(120, 100%, 40%);">+  pout.data := enc_PDU_SCCP(pin.data);</span><br><span style="color: hsl(120, 100%, 40%);">+  //port.setstate(0);</span><br><span style="color: hsl(120, 100%, 40%);">+} with {extension "prototype(fast)" }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type port SCCP_CODEC_PT message {</span><br><span style="color: hsl(120, 100%, 40%);">+     out     SCCP_MTP3_TRANSFERreq;</span><br><span style="color: hsl(120, 100%, 40%);">+        in      SCCP_MTP3_TRANSFERind,</span><br><span style="color: hsl(120, 100%, 40%);">+                ASP_MTP3_PAUSE,</span><br><span style="color: hsl(120, 100%, 40%);">+               ASP_MTP3_RESUME,</span><br><span style="color: hsl(120, 100%, 40%);">+              ASP_MTP3_STATUS;</span><br><span style="color: hsl(120, 100%, 40%);">+} with { extension "internal user MTP3asp_PT</span><br><span style="color: hsl(120, 100%, 40%);">+   out(SCCP_MTP3_TRANSFERreq -> ASP_MTP3_TRANSFERreq: function(f_enc_TRANSFERreq))</span><br><span style="color: hsl(120, 100%, 40%);">+    in(ASP_MTP3_TRANSFERind -> SCCP_MTP3_TRANSFERind: function(f_dec_TRANSFERind);</span><br><span style="color: hsl(120, 100%, 40%);">+        ASP_MTP3_PAUSE -> ASP_MTP3_PAUSE: simple;</span><br><span style="color: hsl(120, 100%, 40%);">+          ASP_MTP3_RESUME -> ASP_MTP3_RESUME: simple;</span><br><span style="color: hsl(120, 100%, 40%);">+        ASP_MTP3_STATUS -> ASP_MTP3_STATUS: simple)"</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%);">+}</span><br><span>diff --git a/sccp/SCCP_Tests.cfg b/sccp/SCCP_Tests.cfg</span><br><span>index ab69a2d..8e51327 100644</span><br><span>--- a/sccp/SCCP_Tests.cfg</span><br><span>+++ b/sccp/SCCP_Tests.cfg</span><br><span>@@ -16,3 +16,4 @@</span><br><span> </span><br><span> [EXECUTE]</span><br><span> SCCP_Tests.control</span><br><span style="color: hsl(120, 100%, 40%);">+SCCP_Tests_RAW.control</span><br><span>diff --git a/sccp/SCCP_Tests_RAW.ttcn b/sccp/SCCP_Tests_RAW.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..78ce80f</span><br><span>--- /dev/null</span><br><span>+++ b/sccp/SCCP_Tests_RAW.ttcn</span><br><span>@@ -0,0 +1,174 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2019 by Harald Welte <laforge@gnumonks.org></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%);">+ * The idea is that these tests are executed against sccp_demo_user from</span><br><span style="color: hsl(120, 100%, 40%);">+ * libosmo-sccp.git in server mode.</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 SCCP_Tests_RAW {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from M3UA_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCPasp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCP_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCP_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCP_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from TELNETasp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_VTY_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCP_Tests all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type component SCCP_Test_RAW_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* VTY to sccp_demo_user (not used yet) */</span><br><span style="color: hsl(120, 100%, 40%);">+    port TELNETasp_PT SCCP_DEMO_USER_VTY;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* SCCP raw port runs on top of M3UA Emulation.</span><br><span style="color: hsl(120, 100%, 40%);">+        * "System Under Test" is libosmo-sccp's sccp_demo_user example program. */</span><br><span style="color: hsl(120, 100%, 40%);">+     var M3UA_CT vc_M3UA;</span><br><span style="color: hsl(120, 100%, 40%);">+  port SCCP_CODEC_PT MTP3;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_SCCP_MTP3_parameters g_param;</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%);">+private function f_init_raw(SCCP_Configuration cfg) runs on SCCP_Test_RAW_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    g_param := {</span><br><span style="color: hsl(120, 100%, 40%);">+          sio := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ni := substr(oct2bit(cfg.sio),0,2),</span><br><span style="color: hsl(120, 100%, 40%);">+                   prio := substr(oct2bit(cfg.sio),2,2),</span><br><span style="color: hsl(120, 100%, 40%);">+                 si := substr(oct2bit(cfg.sio),4,4)</span><br><span style="color: hsl(120, 100%, 40%);">+            },</span><br><span style="color: hsl(120, 100%, 40%);">+            opc := cfg.own_pc,</span><br><span style="color: hsl(120, 100%, 40%);">+            dpc := cfg.peer_pc,</span><br><span style="color: hsl(120, 100%, 40%);">+           sls := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+             sccp_serviceType := cfg.sccp_service_type,</span><br><span style="color: hsl(120, 100%, 40%);">+            ssn := cfg.own_ssn</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%);">+  map(self:SCCP_DEMO_USER_VTY, system:SCCP_DEMO_USER_VTY);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_set_prompts(SCCP_DEMO_USER_VTY);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_transceive(SCCP_DEMO_USER_VTY, "enable");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Create and connect test components */</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_M3UA := M3UA_CT.create;</span><br><span style="color: hsl(120, 100%, 40%);">+    connect(self:MTP3, vc_M3UA:MTP3_SP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+     map(vc_M3UA:SCTP_PORT, system:sctp);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        vc_M3UA.start(f_M3UA_Emulation(cfg.sctp_addr));</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%);">+private function f_cleanup() runs on SCCP_Test_RAW_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ all component.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+   unmap(vc_M3UA:SCTP_PORT, system:sctp);</span><br><span style="color: hsl(120, 100%, 40%);">+        disconnect(vc_M3UA:MTP3_SP_PORT, self:MTP3);</span><br><span style="color: hsl(120, 100%, 40%);">+  self.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%);">+/* connection oriented SCCP */</span><br><span style="color: hsl(120, 100%, 40%);">+const SCCP_param_ProtocolClass c_class2 := { class:='0010'B, messageHandling:='0000'B };//class 2</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function ts_SCCP_CR(OCT3 source_lref, SCCP_PAR_Address calling, SCCP_PAR_Address called)</span><br><span style="color: hsl(120, 100%, 40%);">+return template (value) PDU_SCCP {</span><br><span style="color: hsl(120, 100%, 40%);">+     var SCCP_param_CPartyAddressEnc calling_enc := ConvertASPAddressToEncodedAddress_itu(calling);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var template (value) PDU_SCCP ret := {</span><br><span style="color: hsl(120, 100%, 40%);">+                connrequest := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      messageType := cr,</span><br><span style="color: hsl(120, 100%, 40%);">+                    sourceLocRef := source_lref,</span><br><span style="color: hsl(120, 100%, 40%);">+                  protClass := c_class2,</span><br><span style="color: hsl(120, 100%, 40%);">+                        pointer1 := 2,</span><br><span style="color: hsl(120, 100%, 40%);">+                        pointer2 := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                      calledPAddress := ConvertASPAddressToEncodedAddress_itu(called),</span><br><span style="color: hsl(120, 100%, 40%);">+                      optionalPart := {</span><br><span style="color: hsl(120, 100%, 40%);">+                             credit := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               callingPAddress := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  paramName := con_SCCP_cgPA,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   paramLength := calling_enc.paramLength, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                                     addr := calling_enc.addr</span><br><span style="color: hsl(120, 100%, 40%);">+                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                            data := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                         hopCounter := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                           importance := omit</span><br><span style="color: hsl(120, 100%, 40%);">+                    },</span><br><span style="color: hsl(120, 100%, 40%);">+                    eop := { paramName:= con_SCCP_eop }</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%);">+     return ret;</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 (present) PDU_SCCP tr_SCCP_CC(template (present) OCT3 dest_lref,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  template (present) OCT3 source_lref) := {</span><br><span style="color: hsl(120, 100%, 40%);">+      connconfirm := {</span><br><span style="color: hsl(120, 100%, 40%);">+              messageType := cc,</span><br><span style="color: hsl(120, 100%, 40%);">+            destLocRef := dest_lref,</span><br><span style="color: hsl(120, 100%, 40%);">+              sourceLocRef := source_lref,</span><br><span style="color: hsl(120, 100%, 40%);">+          protClass := c_class2,</span><br><span style="color: hsl(120, 100%, 40%);">+                pointer1 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                optionalPart := *,</span><br><span style="color: hsl(120, 100%, 40%);">+            eop := *</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%);">+private function f_send_sccp(template PDU_SCCP sccp) runs on SCCP_Test_RAW_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var SCCP_MTP3_TRANSFERreq tx := {</span><br><span style="color: hsl(120, 100%, 40%);">+             sio := g_param.sio,</span><br><span style="color: hsl(120, 100%, 40%);">+           opc := g_param.opc,</span><br><span style="color: hsl(120, 100%, 40%);">+           dpc := g_param.dpc,</span><br><span style="color: hsl(120, 100%, 40%);">+           sls := g_param.sls,</span><br><span style="color: hsl(120, 100%, 40%);">+           data := valueof(sccp)</span><br><span style="color: hsl(120, 100%, 40%);">+ };</span><br><span style="color: hsl(120, 100%, 40%);">+    MTP3.send(tx);</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%);">+private function f_exp_sccp(template PDU_SCCP sccp) runs on SCCP_Test_RAW_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var SCCP_MTP3_TRANSFERind rx;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template SCCP_MTP3_TRANSFERind exp := {</span><br><span style="color: hsl(120, 100%, 40%);">+           sio := g_param.sio,</span><br><span style="color: hsl(120, 100%, 40%);">+           opc := g_param.dpc,</span><br><span style="color: hsl(120, 100%, 40%);">+           dpc := g_param.opc,</span><br><span style="color: hsl(120, 100%, 40%);">+           sls := g_param.sls,</span><br><span style="color: hsl(120, 100%, 40%);">+           data := sccp</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span style="color: hsl(120, 100%, 40%);">+    timer T := 10.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%);">+ [] MTP3.receive(exp) -> value rx {</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%);">+     [] MTP3.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Unexpected MTP/SCCP received");</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, "Timeout waiting for ", exp);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Verify sccp_demo_user answers a CR with a CC for PC and SSN set up to echo back */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cr_cc() runs on SCCP_Test_RAW_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var SCCP_PAR_Address calling, called;</span><br><span style="color: hsl(120, 100%, 40%);">+ called := valueof(ts_SccpAddr_PC_SSN(sccp_cfg[0].peer_pc, sccp_cfg[0].peer_ssn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            sccp_cfg[0].sio, sccp_cfg[0].sccp_service_type));</span><br><span style="color: hsl(120, 100%, 40%);">+        calling := valueof(ts_SccpAddr_PC_SSN(sccp_cfg[0].own_pc, sccp_cfg[0].own_ssn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             sccp_cfg[0].sio, sccp_cfg[0].sccp_service_type));</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_raw(sccp_cfg[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_send_sccp(ts_SCCP_CR('000001'O, calling, called));</span><br><span style="color: hsl(120, 100%, 40%);">+  f_exp_sccp(tr_SCCP_CC('000001'O, ?));</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%);">+control {</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_cr_cc() );</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%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16814">change 16814</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/+/16814"/><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: I07c43cfac9cdbdeccf102cd08309ca9ec64968cc </div>
<div style="display:none"> Gerrit-Change-Number: 16814 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Assignee: pespin <pespin@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-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>