<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20637">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 initial TTCN3 test for GbProxy<br><br>The first testcase, TC_BVC_bringup just waits for NS/BSSGP Emulation to<br>do their thing. If nothing fails there then we pass.<br><br>Related: SYS#5002<br>Change-Id: Ib3dc05fe5598b53e963ca863968e387cc36b9de3<br>---<br>M Makefile<br>A gbproxy/GBProxy_Tests.cfg<br>A gbproxy/GBProxy_Tests.default<br>A gbproxy/GBProxy_Tests.ttcn<br>A gbproxy/README.md<br>A gbproxy/gen_links.sh<br>A gbproxy/osmo-gbproxy.cfg<br>A gbproxy/regen_makefile.sh<br>8 files changed, 688 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Makefile b/Makefile</span><br><span>index b1a7e61..481dfb9 100644</span><br><span>--- a/Makefile</span><br><span>+++ b/Makefile</span><br><span>@@ -13,8 +13,8 @@</span><br><span> # See the License for the specific language governing permissions and</span><br><span> # limitations under the License.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-SUBDIRS=bsc bsc-nat bts ccid ggsn_tests hlr mgw mme msc pcu pgw remsim sccp selftest sgsn \</span><br><span style="color: hsl(0, 100%, 40%);">-     simtrace sip stp sysinfo smlc</span><br><span style="color: hsl(120, 100%, 40%);">+SUBDIRS=bsc bsc-nat bts ccid gbproxy ggsn_tests hlr mgw mme msc pcu pgw remsim \</span><br><span style="color: hsl(120, 100%, 40%);">+       sccp selftest sgsn simtrace sip stp sysinfo smlc</span><br><span> </span><br><span> NPROC=$(shell nproc 2>/dev/null)</span><br><span> ifeq ($(NPROC),)</span><br><span>diff --git a/gbproxy/GBProxy_Tests.cfg b/gbproxy/GBProxy_Tests.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..3209be6</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/GBProxy_Tests.cfg</span><br><span>@@ -0,0 +1,33 @@</span><br><span style="color: hsl(120, 100%, 40%);">+[ORDERED_INCLUDE]</span><br><span style="color: hsl(120, 100%, 40%);">+# Common configuration, shared between test suites</span><br><span style="color: hsl(120, 100%, 40%);">+"../Common.cfg"</span><br><span style="color: hsl(120, 100%, 40%);">+# testsuite specific configuration, not expected to change</span><br><span style="color: hsl(120, 100%, 40%);">+"./GBProxy_Tests.default"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Local configuration below</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[LOGGING]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[TESTPORT_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_HOSTNAME := "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[MODULE_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+GBProxy_Tests.mp_nsconfig_pcu := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {provider := { ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+            remote_ip := "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+    }}},</span><br><span style="color: hsl(120, 100%, 40%);">+  {provider := { ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+            remote_ip := "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+    }}},</span><br><span style="color: hsl(120, 100%, 40%);">+  {provider := { ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+            remote_ip := "127.0.0.1"</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%);">+[MAIN_CONTROLLER]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[EXECUTE]</span><br><span style="color: hsl(120, 100%, 40%);">+GBProxy_Tests.control</span><br><span>diff --git a/gbproxy/GBProxy_Tests.default b/gbproxy/GBProxy_Tests.default</span><br><span>new file mode 100644</span><br><span>index 0000000..799ac32</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/GBProxy_Tests.default</span><br><span>@@ -0,0 +1,27 @@</span><br><span style="color: hsl(120, 100%, 40%);">+[LOGGING]</span><br><span style="color: hsl(120, 100%, 40%);">+FileMask := LOG_ALL | TTCN_MATCHING;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+"IPA-CTRL-IPA".FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;</span><br><span style="color: hsl(120, 100%, 40%);">+"GBProxy-GSUP-IPA".FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;</span><br><span style="color: hsl(120, 100%, 40%);">+"GBProxy-Gb0-NS".FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;</span><br><span style="color: hsl(120, 100%, 40%);">+"GBProxy-Gb0-BSSGP".FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;</span><br><span style="color: hsl(120, 100%, 40%);">+"GBProxy-GSUP".FileMask := ERROR | WARNING | PARALLEL | VERDICTOP;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[TESTPORT_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_MODE := "client"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_HOSTNAME := "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_PORTNUM := "4246"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_LOGIN_SKIPPED := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_DETECT_SERVER_DISCONNECTED := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_READMODE := "buffered"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_CLIENT_CLEANUP_LINEFEED := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.CTRL_DETECT_CONNECTION_ESTABLISHMENT_RESULT := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.GBPVTY.PROMPT1 := "OsmoGbProxy> "</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_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoGbProxy";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[MAIN_CONTROLLER]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[EXECUTE]</span><br><span>diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..000f584</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -0,0 +1,480 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module GBProxy_Tests {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Osmocom GBProxy test suite in TTCN-3</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2020 sysmocom - s.f.m.c. GmbH</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%);">+ * Author: Daniel Willmann <dwillmann@sysmocom.de></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 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%);">+import from GSM_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Native_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from NS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from NS_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSGP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from BSSGP_Emulation 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 Osmocom_Gb_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_CommonIE_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_GMM_SM_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L3_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from L3_Common 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 LLC_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from LLC_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from GSM_RR_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+modulepar {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* IP/port on which we run our internal GSUP/HLR emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+ NSConfigurations_SGSN mp_nsconfig_sgsn := {</span><br><span style="color: hsl(120, 100%, 40%);">+           {</span><br><span style="color: hsl(120, 100%, 40%);">+                     provider := {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       address_family := AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    local_udp_port := 7777,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+                                    remote_udp_port := 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     remote_ip := "127.0.0.1"</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%);">+                    nsvci := 101,</span><br><span style="color: hsl(120, 100%, 40%);">+                 nsei := 101,</span><br><span style="color: hsl(120, 100%, 40%);">+                  role_sgsn := true,</span><br><span style="color: hsl(120, 100%, 40%);">+                    handle_sns := true</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%);">+    NSConfigurations_PCU mp_nsconfig_pcu := {</span><br><span style="color: hsl(120, 100%, 40%);">+             {</span><br><span style="color: hsl(120, 100%, 40%);">+                     provider := {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       address_family := AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    local_udp_port := 21010,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+                                    remote_udp_port := 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     remote_ip := "127.0.0.1"</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%);">+                    nsvci := 97,</span><br><span style="color: hsl(120, 100%, 40%);">+                  nsei := 96,</span><br><span style="color: hsl(120, 100%, 40%);">+                   role_sgsn := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                   handle_sns := false</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%);">+                     provider := {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       address_family := AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    local_udp_port := 21011,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+                                    remote_udp_port := 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     remote_ip := "127.0.0.1"</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%);">+                    nsvci := 98,</span><br><span style="color: hsl(120, 100%, 40%);">+                  nsei := 97,</span><br><span style="color: hsl(120, 100%, 40%);">+                   role_sgsn := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                   handle_sns := false</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%);">+                     provider := {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                       address_family := AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    local_udp_port := 21012,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+                                    remote_udp_port := 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     remote_ip := "127.0.0.1"</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%);">+                    nsvci := 99,</span><br><span style="color: hsl(120, 100%, 40%);">+                  nsei := 98,</span><br><span style="color: hsl(120, 100%, 40%);">+                   role_sgsn := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                   handle_sns := false</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%);">+const integer NUM_BVC_PER_NSE := 3;</span><br><span style="color: hsl(120, 100%, 40%);">+type record GbInstance {</span><br><span style="color: hsl(120, 100%, 40%);">+       NS_CT vc_NS,</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP_CT vc_BSSGP,</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSGP_BVC_CT vc_BSSGP_BVC[NUM_BVC_PER_NSE],</span><br><span style="color: hsl(120, 100%, 40%);">+   BssgpConfig cfg</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%);">+const integer NUM_PCU := 3;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(NUM_PCU) of GbInstance GbInstances_PCU;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(NUM_PCU) of NSConfiguration NSConfigurations_PCU;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(NUM_PCU) of BssgpCellId BssgpCellIds;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const integer NUM_SGSN := 1;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(NUM_SGSN) of GbInstance GbInstances_SGSN;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(NUM_SGSN) of NSConfiguration NSConfigurations_SGSN;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type component test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var GbInstances_PCU g_pcu;</span><br><span style="color: hsl(120, 100%, 40%);">+    var GbInstances_SGSN g_sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        port BSSGP_CT_PROC_PT PROC;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ port TELNETasp_PT GBPVTY;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean g_initialized := false;</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean g_use_echo := false;</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 component BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       port BSSGP_PT PCU[NUM_PCU];</span><br><span style="color: hsl(120, 100%, 40%);">+   port BSSGP_PT PCU_SIG[NUM_PCU];</span><br><span style="color: hsl(120, 100%, 40%);">+       port BSSGP_PROC_PT PCU_PROC[NUM_PCU];</span><br><span style="color: hsl(120, 100%, 40%);">+ port BSSGP_PT SGSN[NUM_SGSN];</span><br><span style="color: hsl(120, 100%, 40%);">+ port BSSGP_PT SGSN_SIG[NUM_SGSN];</span><br><span style="color: hsl(120, 100%, 40%);">+     port BSSGP_PROC_PT SGSN_PROC[NUM_SGSN];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     var BSSGP_ConnHdlrPars g_pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer g_Tguard;</span><br><span style="color: hsl(120, 100%, 40%);">+       var LLC_Entities llc;</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 record SGSN_ConnHdlrNetworkPars {</span><br><span style="color: hsl(120, 100%, 40%);">+    boolean expect_ptmsi,</span><br><span style="color: hsl(120, 100%, 40%);">+ boolean expect_auth,</span><br><span style="color: hsl(120, 100%, 40%);">+  boolean expect_ciph</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 record BSSGP_ConnHdlrPars {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* IMEI of the simulated ME */</span><br><span style="color: hsl(120, 100%, 40%);">+        hexstring imei,</span><br><span style="color: hsl(120, 100%, 40%);">+       /* IMSI of the simulated MS */</span><br><span style="color: hsl(120, 100%, 40%);">+        hexstring imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+       /* MSISDN of the simulated MS (probably unused) */</span><br><span style="color: hsl(120, 100%, 40%);">+    hexstring msisdn,</span><br><span style="color: hsl(120, 100%, 40%);">+     /* P-TMSI allocated to the simulated MS */</span><br><span style="color: hsl(120, 100%, 40%);">+    OCT4 p_tmsi optional,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT3 p_tmsi_sig optional,</span><br><span style="color: hsl(120, 100%, 40%);">+     /* TLLI of the simulated MS */</span><br><span style="color: hsl(120, 100%, 40%);">+        OCT4 tlli,</span><br><span style="color: hsl(120, 100%, 40%);">+    OCT4 tlli_old optional,</span><br><span style="color: hsl(120, 100%, 40%);">+       RoutingAreaIdentificationV ra optional,</span><br><span style="color: hsl(120, 100%, 40%);">+       BssgpCellIds bssgp_cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+   float t_guard</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_cellid_to_RAI(in BssgpCellId cell_id) return RoutingAreaIdentificationV {</span><br><span style="color: hsl(120, 100%, 40%);">+     /* mcc_mnc is encoded as of 24.008 10.5.5.15 */</span><br><span style="color: hsl(120, 100%, 40%);">+       var BcdMccMnc mcc_mnc := cell_id.ra_id.lai.mcc_mnc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var RoutingAreaIdentificationV ret := {</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit1 := mcc_mnc[0],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit2 := mcc_mnc[1],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit3 := mcc_mnc[2],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit3 := mcc_mnc[3],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit1 := mcc_mnc[4],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit2 := mcc_mnc[5],</span><br><span style="color: hsl(120, 100%, 40%);">+                lac := int2oct(cell_id.ra_id.lai.lac, 16),</span><br><span style="color: hsl(120, 100%, 40%);">+                rac := int2oct(cell_id.ra_id.rac, 8)</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%);">+private function f_init_gb_pcu(inout GbInstance gb, charstring id, integer offset) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      gb.vc_NS := NS_CT.create(id & "-NS(PCU)" & int2str(offset));</span><br><span style="color: hsl(120, 100%, 40%);">+        gb.vc_BSSGP := BSSGP_CT.create(id & "-BSSGP(PCU)" & int2str(offset));</span><br><span style="color: hsl(120, 100%, 40%);">+       /* connect lower end of BSSGP emulation with NS upper port */</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(gb.vc_BSSGP:BSCP, gb.vc_NS:NS_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  gb.vc_NS.start(NSStart(mp_nsconfig_pcu[offset]));</span><br><span style="color: hsl(120, 100%, 40%);">+     gb.vc_BSSGP.start(BssgpStart(gb.cfg, id));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < lengthof(gb.cfg.bvc); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+           connect(self:PROC, gb.vc_BSSGP:PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+         gb.vc_BSSGP_BVC[i] := f_bssgp_get_bvci_ct(gb.cfg.bvc[i].bvci, PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+          disconnect(self:PROC, gb.vc_BSSGP:PROC);</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_init_gb_sgsn(inout GbInstance gb, charstring id, integer offset) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ gb.vc_NS := NS_CT.create(id & "-NS(SGSN)" & int2str(offset));</span><br><span style="color: hsl(120, 100%, 40%);">+       gb.vc_BSSGP := BSSGP_CT.create(id & "-BSSGP(SGSN)" & int2str(offset));</span><br><span style="color: hsl(120, 100%, 40%);">+      /* connect lower end of BSSGP emulation with NS upper port */</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(gb.vc_BSSGP:BSCP, gb.vc_NS:NS_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  gb.vc_NS.start(NSStart(mp_nsconfig_sgsn[offset]));</span><br><span style="color: hsl(120, 100%, 40%);">+    gb.vc_BSSGP.start(BssgpStart(gb.cfg, id));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < lengthof(gb.cfg.bvc); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+           connect(self:PROC, gb.vc_BSSGP:PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+         gb.vc_BSSGP_BVC[i] := f_bssgp_get_bvci_ct(gb.cfg.bvc[i].bvci, PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+          disconnect(self:PROC, gb.vc_BSSGP:PROC);</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%);">+private function f_init_vty() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     map(self:GBPVTY, system:GBPVTY);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_set_prompts(GBPVTY);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_transceive(GBPVTY, "enable");</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%);">+/* mcc_mnc is 24.008 10.5.5.15 encoded. 262 42 */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      if (g_initialized == true) {</span><br><span style="color: hsl(120, 100%, 40%);">+          return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     g_initialized := true;</span><br><span style="color: hsl(120, 100%, 40%);">+        g_pcu[0].cfg := {</span><br><span style="color: hsl(120, 100%, 40%);">+             nsei := 96,</span><br><span style="color: hsl(120, 100%, 40%);">+           sgsn_role := false,</span><br><span style="color: hsl(120, 100%, 40%);">+           bvc := { {</span><br><span style="color: hsl(120, 100%, 40%);">+                    bvci := 196,</span><br><span style="color: hsl(120, 100%, 40%);">+                  cell_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          ra_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                              mcc_mnc := mcc_mnc, lac := 13135},</span><br><span style="color: hsl(120, 100%, 40%);">+                                            rac := 0</span><br><span style="color: hsl(120, 100%, 40%);">+                                      },</span><br><span style="color: hsl(120, 100%, 40%);">+                            cell_id := 20960</span><br><span style="color: hsl(120, 100%, 40%);">+                      },</span><br><span style="color: hsl(120, 100%, 40%);">+                    depth := BSSGP_DECODE_DEPTH_BSSGP</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%);">+    g_pcu[1].cfg := {</span><br><span style="color: hsl(120, 100%, 40%);">+             nsei := 97,</span><br><span style="color: hsl(120, 100%, 40%);">+           sgsn_role := false,</span><br><span style="color: hsl(120, 100%, 40%);">+           bvc := { {</span><br><span style="color: hsl(120, 100%, 40%);">+                    bvci := 210,</span><br><span style="color: hsl(120, 100%, 40%);">+                  cell_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          ra_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                              mcc_mnc := mcc_mnc, lac := 13200},</span><br><span style="color: hsl(120, 100%, 40%);">+                                            rac := 0</span><br><span style="color: hsl(120, 100%, 40%);">+                                      },</span><br><span style="color: hsl(120, 100%, 40%);">+                            cell_id := 20961</span><br><span style="color: hsl(120, 100%, 40%);">+                      },</span><br><span style="color: hsl(120, 100%, 40%);">+                    depth := BSSGP_DECODE_DEPTH_BSSGP</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%);">+    g_pcu[2].cfg := {</span><br><span style="color: hsl(120, 100%, 40%);">+             nsei := 98,</span><br><span style="color: hsl(120, 100%, 40%);">+           sgsn_role := false,</span><br><span style="color: hsl(120, 100%, 40%);">+           bvc := { {</span><br><span style="color: hsl(120, 100%, 40%);">+                    bvci := 220,</span><br><span style="color: hsl(120, 100%, 40%);">+                  cell_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          ra_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                              mcc_mnc := mcc_mnc, lac := 13300},</span><br><span style="color: hsl(120, 100%, 40%);">+                                            rac := 0</span><br><span style="color: hsl(120, 100%, 40%);">+                                      },</span><br><span style="color: hsl(120, 100%, 40%);">+                            cell_id := 20962</span><br><span style="color: hsl(120, 100%, 40%);">+                      },</span><br><span style="color: hsl(120, 100%, 40%);">+                    depth := BSSGP_DECODE_DEPTH_BSSGP</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%);">+  g_sgsn[0].cfg := {</span><br><span style="color: hsl(120, 100%, 40%);">+            nsei := 101,</span><br><span style="color: hsl(120, 100%, 40%);">+          sgsn_role := true,</span><br><span style="color: hsl(120, 100%, 40%);">+            bvc := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      {</span><br><span style="color: hsl(120, 100%, 40%);">+                             bvci := 196,</span><br><span style="color: hsl(120, 100%, 40%);">+                          cell_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ra_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      mcc_mnc := mcc_mnc, lac := 13135},</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    rac := 0</span><br><span style="color: hsl(120, 100%, 40%);">+                                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                                    cell_id := 20960</span><br><span style="color: hsl(120, 100%, 40%);">+                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                            depth := BSSGP_DECODE_DEPTH_BSSGP</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%);">+                             bvci := 210,</span><br><span style="color: hsl(120, 100%, 40%);">+                          cell_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ra_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      mcc_mnc := mcc_mnc, lac := 13200},</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    rac := 0</span><br><span style="color: hsl(120, 100%, 40%);">+                                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                                    cell_id := 20961</span><br><span style="color: hsl(120, 100%, 40%);">+                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                            depth := BSSGP_DECODE_DEPTH_BSSGP</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%);">+                             bvci := 220,</span><br><span style="color: hsl(120, 100%, 40%);">+                          cell_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  ra_id := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      mcc_mnc := mcc_mnc, lac := 13300},</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    rac := 0</span><br><span style="color: hsl(120, 100%, 40%);">+                                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                                    cell_id := 20962</span><br><span style="color: hsl(120, 100%, 40%);">+                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                            depth := BSSGP_DECODE_DEPTH_BSSGP</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%);">+  f_init_vty();</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_gb_sgsn(g_sgsn[0], "GbProxy_Test-SGSN0", 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_sleep(4.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_gb_pcu(g_pcu[0], "GbProxy_Test-PCU0", 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_gb_pcu(g_pcu[1], "GbProxy_Test-PCU1", 1);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_gb_pcu(g_pcu[2], "GbProxy_Test-PCU2", 2);</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%);">+function f_cleanup() runs on test_CT {</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%);">+type function void_fn(charstring id) runs on BSSGP_ConnHdlr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* helper function to create, connect and start a BSSGP_ConnHdlr component */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_start_handler(void_fn fn, charstring id, GbInstances_PCU pcu, GbInstances_SGSN sgsn, integer imsi_suffix,</span><br><span style="color: hsl(120, 100%, 40%);">+                   float t_guard := 30.0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT return BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      var BSSGP_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var BSSGP_ConnHdlrPars pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+              imei := f_gen_imei(imsi_suffix),</span><br><span style="color: hsl(120, 100%, 40%);">+              imsi := f_gen_imsi(imsi_suffix),</span><br><span style="color: hsl(120, 100%, 40%);">+              msisdn := f_gen_msisdn(imsi_suffix),</span><br><span style="color: hsl(120, 100%, 40%);">+          p_tmsi := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+               p_tmsi_sig := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           tlli := f_gprs_tlli_random(),</span><br><span style="color: hsl(120, 100%, 40%);">+         tlli_old := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             ra := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           bssgp_cell_id := { pcu[0].cfg.bvc[0].cell_id, pcu[1].cfg.bvc[0].cell_id, pcu[2].cfg.bvc[0].cell_id },</span><br><span style="color: hsl(120, 100%, 40%);">+         t_guard := t_guard</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_conn := BSSGP_ConnHdlr.create(id);</span><br><span style="color: hsl(120, 100%, 40%);">+ // PDU side</span><br><span style="color: hsl(120, 100%, 40%);">+   connect(vc_conn:PCU[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+     connect(vc_conn:PCU_SIG[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+     connect(vc_conn:PCU_PROC[0], pcu[0].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+      connect(vc_conn:PCU[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+     connect(vc_conn:PCU_SIG[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+     connect(vc_conn:PCU_PROC[1], pcu[1].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+      connect(vc_conn:PCU[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+     connect(vc_conn:PCU_SIG[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+     connect(vc_conn:PCU_PROC[2], pcu[2].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+      // SGSN side</span><br><span style="color: hsl(120, 100%, 40%);">+  connect(vc_conn:SGSN[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+   connect(vc_conn:SGSN_SIG[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+   connect(vc_conn:SGSN_PROC[0], sgsn[0].vc_BSSGP_BVC[0]:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  vc_conn.start(f_handler_init(fn, id, pars));</span><br><span style="color: hsl(120, 100%, 40%);">+  return vc_conn;</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 altstep as_Tguard() runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    [] g_Tguard.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+         setverdict(fail, "Tguard timeout");</span><br><span style="color: hsl(120, 100%, 40%);">+         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 style="color: hsl(120, 100%, 40%);">+/* first function called in every ConnHdlr */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_handler_init(void_fn fn, charstring id, BSSGP_ConnHdlrPars pars)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* do some common stuff like setting up g_pars */</span><br><span style="color: hsl(120, 100%, 40%);">+     g_pars := pars;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     llc := f_llc_create(false);</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%);">+       g_Tguard.start(pars.t_guard);</span><br><span style="color: hsl(120, 100%, 40%);">+ activate(as_Tguard());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* call the user-supplied test case function */</span><br><span style="color: hsl(120, 100%, 40%);">+       fn.apply(id);</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%);">+/* TODO:</span><br><span style="color: hsl(120, 100%, 40%);">+   * Detach without Attach</span><br><span style="color: hsl(120, 100%, 40%);">+   * SM procedures without attach / RAU</span><br><span style="color: hsl(120, 100%, 40%);">+   * ATTACH / RAU</span><br><span style="color: hsl(120, 100%, 40%);">+   ** with / without authentication</span><br><span style="color: hsl(120, 100%, 40%);">+   ** with / without P-TMSI allocation</span><br><span style="color: hsl(120, 100%, 40%);">+   * re-transmissions of LLC frames</span><br><span style="color: hsl(120, 100%, 40%);">+   * PDP Context activation</span><br><span style="color: hsl(120, 100%, 40%);">+   ** with different GGSN config in SGSN VTY</span><br><span style="color: hsl(120, 100%, 40%);">+   ** with different PDP context type (v4/v6/v46)</span><br><span style="color: hsl(120, 100%, 40%);">+   ** timeout from GGSN</span><br><span style="color: hsl(120, 100%, 40%);">+   ** multiple / secondary PDP context</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_TC_BVC_bringup(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       f_sleep(5.0);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_BVC_bringup() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var BSSGP_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init();</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_BVC_bringup), testcasename(), g_pcu, g_sgsn, 51);</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%);">+       f_cleanup();</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%);">+friend function f_bssgp_suspend(integer ran_idx := 0) runs on BSSGP_ConnHdlr return OCT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_BSSGP rx_pdu;</span><br><span style="color: hsl(120, 100%, 40%);">+ PCU_SIG[ran_idx].send(ts_BSSGP_SUSPEND(g_pars.tlli, g_pars.bssgp_cell_id[ran_idx].ra_id));</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%);">+ [] PCU_SIG[ran_idx].receive(tr_BSSGP_SUSPEND_ACK(g_pars.tlli, g_pars.bssgp_cell_id[ran_idx].ra_id, ?)) -> value rx_pdu {</span><br><span style="color: hsl(120, 100%, 40%);">+           return rx_pdu.pDU_BSSGP_SUSPEND_ACK.suspend_Reference_Number.suspend_Reference_Number_value;</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] PCU_SIG[ran_idx].receive(tr_BSSGP_SUSPEND_NACK(g_pars.tlli, g_pars.bssgp_cell_id[ran_idx].ra_id, ?)) -> value rx_pdu {</span><br><span style="color: hsl(120, 100%, 40%);">+          setverdict(fail, "SUSPEND-NACK in response to SUSPEND for TLLI ", g_pars.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+             mtc.stop;</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, "No SUSPEND-ACK in response to SUSPEND for TLLI ", g_pars.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+           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%);">+     return '00'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%);">+friend function f_bssgp_resume(OCT1 susp_ref, integer ran_idx := 0) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       PCU_SIG[ran_idx].send(ts_BSSGP_RESUME(g_pars.tlli, g_pars.bssgp_cell_id[ran_idx].ra_id, susp_ref));</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%);">+ [] PCU_SIG[ran_idx].receive(tr_BSSGP_RESUME_ACK(g_pars.tlli, g_pars.bssgp_cell_id[ran_idx].ra_id));</span><br><span style="color: hsl(120, 100%, 40%);">+   [] PCU_SIG[ran_idx].receive(tr_BSSGP_RESUME_NACK(g_pars.tlli, g_pars.bssgp_cell_id[ran_idx].ra_id,</span><br><span style="color: hsl(120, 100%, 40%);">+?)) {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "RESUME-NACK in response to RESUME for TLLI ", g_pars.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</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, "No RESUME-ACK in response to SUSPEND for TLLI ", g_pars.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+            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 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_BVC_bringup() );</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/gbproxy/README.md b/gbproxy/README.md</span><br><span>new file mode 100644</span><br><span>index 0000000..a86aad3</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/README.md</span><br><span>@@ -0,0 +1,18 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# GBProxy_Tests.ttcn</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* external interfaces</span><br><span style="color: hsl(120, 100%, 40%);">+    * Gb (emulates PCU side NS/BSSGP)</span><br><span style="color: hsl(120, 100%, 40%);">+    * Gb (emulates SGSN side NS/BSSGP)</span><br><span style="color: hsl(120, 100%, 40%);">+    * VTY</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+{% dot gbproxy_tests.svg</span><br><span style="color: hsl(120, 100%, 40%);">+digraph G {</span><br><span style="color: hsl(120, 100%, 40%);">+  rankdir=LR;</span><br><span style="color: hsl(120, 100%, 40%);">+  GBP [label="IUT\nosmo-gbproxy",shape="box"];</span><br><span style="color: hsl(120, 100%, 40%);">+  ATS [label="ATS\nGBProxy_Tests.ttcn"];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  ATS -> GBP [label="Gb (from SGSN)"];</span><br><span style="color: hsl(120, 100%, 40%);">+  GBP -> ATS [label="Gb (from PCU)"];</span><br><span style="color: hsl(120, 100%, 40%);">+  ATS -> SGSN [label="VTY"];</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+%}</span><br><span>diff --git a/gbproxy/gen_links.sh b/gbproxy/gen_links.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..46898f4</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/gen_links.sh</span><br><span>@@ -0,0 +1,94 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/bash</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BASEDIR=../deps</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+. ../gen_links.sh.inc</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#DIR=$BASEDIR/titan.TestPorts.UNIX_DOMAIN_SOCKETasp/src</span><br><span style="color: hsl(120, 100%, 40%);">+#FILES="UD_PT.cc  UD_PT.hh  UD_PortType.ttcn  UD_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.Libraries.TCCUsefulFunctions/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCConversion.hh TCCInterface.cc TCCInterface_ip.h"</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.Common_Components.Socket-API/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="Socket_API_Definitions.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.IPL4asp/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="IPL4asp_Functions.ttcn  IPL4asp_PT.cc  IPL4asp_PT.hh IPL4asp_PortType.ttcn  IPL4asp_Types.ttcn  IPL4asp_discovery.cc IPL4asp_protocol_L234.hh"</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.UNIX_DOMAIN_SOCKETasp/src</span><br><span style="color: hsl(120, 100%, 40%);">+#FILES="UD_PT.cc  UD_PT.hh  UD_PortType.ttcn  UD_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%);">+# for Osmocom_VTY</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.TestPorts.TELNETasp/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="TELNETasp_PT.cc  TELNETasp_PT.hh  TELNETasp_PortType.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.ProtocolModules.NS_v7.3.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="NS_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.ProtocolModules.BSSGP_v13.0.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="BSSGP_EncDec.cc  BSSGP_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.ProtocolModules.LLC_v7.1.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="LLC_EncDec.cc LLC_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.ProtocolModules.SNDCP_v7.0.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="SNDCP_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.ProtocolModules.MobileL3_v13.4.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="MobileL3_CC_Types.ttcn MobileL3_CommonIE_Types.ttcn MobileL3_GMM_SM_Types.ttcn MobileL3_MM_Types.ttcn MobileL3_RRM_Types.ttcn MobileL3_SMS_Types.ttcn MobileL3_SS_Types.ttcn MobileL3_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.ProtocolModules.GTP_v13.5.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="GTPC_EncDec.cc  GTPC_Types.ttcn  GTPU_EncDec.cc  GTPU_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%);">+# required by M3UA_Emulation</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.M3UA/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="M3UA_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%);">+# required by M3UA_Emulation</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.TestPorts.SCTPasp/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="SCTPasp_PT.cc  SCTPasp_PT.hh  SCTPasp_PortType.ttcn  SCTPasp_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%);">+# required by M3UA Emulation</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.TestPorts.MTP3asp/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="MTP3asp_PortType.ttcn  MTP3asp_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%);">+# required by SCCP Emulation</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolEmulations.M3UA/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="M3UA_Emulation.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.ProtocolEmulations.SCCP/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="SCCP_Emulation.ttcn  SCCP_EncDec.cc  SCCP_Mapping.ttcnpp  SCCP_Types.ttcn  SCCPasp_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=../library</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcnpp NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="PCUIF_Types.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="Osmocom_VTY_Functions.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+# IPA_Emulation + dependencies</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc Native_Functions.ttcn Native_FunctionDefs.cc GSUP_Types.ttcn GSUP_Emulation.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Emulation.ttcn</span><br><span style="color: hsl(120, 100%, 40%);">+GTP_Templates.ttcn IPCP_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%);">+ignore_pp_results</span><br><span>diff --git a/gbproxy/osmo-gbproxy.cfg b/gbproxy/osmo-gbproxy.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..350ddf5</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/osmo-gbproxy.cfg</span><br><span>@@ -0,0 +1,25 @@</span><br><span style="color: hsl(120, 100%, 40%);">+!</span><br><span style="color: hsl(120, 100%, 40%);">+! Osmocom Gb Proxy (0.9.0.404-6463) configuration saved from vty</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%);">+line vty</span><br><span style="color: hsl(120, 100%, 40%);">+ no login</span><br><span style="color: hsl(120, 100%, 40%);">+!</span><br><span style="color: hsl(120, 100%, 40%);">+gbproxy</span><br><span style="color: hsl(120, 100%, 40%);">+ sgsn nsei 101</span><br><span style="color: hsl(120, 100%, 40%);">+ns</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 101 nsvci 101</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 101 remote-role sgsn</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 101 encapsulation udp</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 101 remote-ip 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 101 remote-port 7777</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-block 3</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-block-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-reset 3</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-reset-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-test 30</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-alive 3</span><br><span style="color: hsl(120, 100%, 40%);">+ timer tns-alive-retries 10</span><br><span style="color: hsl(120, 100%, 40%);">+ encapsulation udp local-ip 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+ encapsulation udp local-port 23000</span><br><span style="color: hsl(120, 100%, 40%);">+ encapsulation framerelay-gre enabled 0</span><br><span>diff --git a/gbproxy/regen_makefile.sh b/gbproxy/regen_makefile.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..fbbd1b3</span><br><span>--- /dev/null</span><br><span>+++ b/gbproxy/regen_makefile.sh</span><br><span>@@ -0,0 +1,9 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/sh</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="*.ttcn *.ttcnpp BSSGP_EncDec.cc LLC_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc NS_CodecPort_CtrlFunctDef.cc RLCMAC_EncDec.cc Native_FunctionDefs.cc TELNETasp_PT.cc IPA_CodecPort_CtrlFunctDef.cc GTPU_EncDec.cc GTPC_EncDec.cc GTP_CodecPort_CtrlFunctDef.cc SCCP_EncDec.cc  SCTPasp_PT.cc "</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+export CPPFLAGS_TTCN3="-DIPA_EMULATION_GSUP -DIPA_EMULATION_CTRL -DUSE_MTP3_DISTRIBUTOR -DBSSGP_EM_L3"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+../regen-makefile.sh GBProxy_Tests.ttcn $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+sed -i -i 's/^LINUX_LIBS = -lxml2/LINUX_LIBS = -lxml2 -lsctp/' Makefile</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20637">change 20637</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/+/20637"/><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: Ib3dc05fe5598b53e963ca863968e387cc36b9de3 </div>
<div style="display:none"> Gerrit-Change-Number: 20637 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@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>