<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/14142">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc-nat: Introduce Osmux test<br><br>Depends: openbsc.git Iadc004064a5a237c93009f242cb943ebc4d2d7e6<br>Change-Id: I35f206aab713ccf0a4e074872e291c349c903b9d<br>---<br>M bsc-nat/BSCNAT_Tests.default<br>M bsc-nat/BSCNAT_Tests.ttcn<br>M bsc-nat/BSC_MS_ConnectionHandler.ttcn<br>M bsc-nat/BSC_MS_Simulation.ttcn<br>M bsc-nat/gen_links.sh<br>M bsc-nat/regen_makefile.sh<br>6 files changed, 80 insertions(+), 12 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc-nat/BSCNAT_Tests.default b/bsc-nat/BSCNAT_Tests.default</span><br><span>index 37c1048..3374bcf 100644</span><br><span>--- a/bsc-nat/BSCNAT_Tests.default</span><br><span>+++ b/bsc-nat/BSCNAT_Tests.default</span><br><span>@@ -4,8 +4,19 @@</span><br><span> </span><br><span> [TESTPORT_PARAMETERS]</span><br><span> #*.*.udpReuseAddress := "yes";</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_MODE := "client"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_HOSTNAME := "127.0.0.1"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_PORTNUM := "4244"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_LOGIN_SKIPPED := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_DETECT_SERVER_DISCONNECTED := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_READMODE := "buffered"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_CLIENT_CLEANUP_LINEFEED := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.CTRL_DETECT_CONNECTION_ESTABLISHMENT_RESULT := "yes"</span><br><span style="color: hsl(120, 100%, 40%);">+*.BSCNATVTY.PROMPT1 := "OsmoBSCNAT> "</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> [MODULE_PARAMETERS]</span><br><span style="color: hsl(120, 100%, 40%);">+Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoBSCNAT";</span><br><span> mp_bsc_port := 49999;</span><br><span> mp_bsc_ip   := "127.0.0.1";</span><br><span> mp_msc_port := 5100;</span><br><span>@@ -22,4 +33,3 @@</span><br><span> mp_mgw_udp_port := 2427;</span><br><span> </span><br><span> [EXECUTE]</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/bsc-nat/BSCNAT_Tests.ttcn b/bsc-nat/BSCNAT_Tests.ttcn</span><br><span>index b9b031f..2fab4a3 100644</span><br><span>--- a/bsc-nat/BSCNAT_Tests.ttcn</span><br><span>+++ b/bsc-nat/BSCNAT_Tests.ttcn</span><br><span>@@ -26,6 +26,9 @@</span><br><span> import from MSC_Simulation all;</span><br><span> import from BSC_MS_Simulation all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_VTY_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from TELNETasp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> const integer NUM_MSC := 1;</span><br><span> const integer NUM_BSC := 1;</span><br><span> </span><br><span>@@ -46,6 +49,8 @@</span><br><span>    var MscState msc[NUM_MSC];</span><br><span>   var BscState bsc[NUM_BSC];</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        port TELNETasp_PT BSCNATVTY;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       var boolean g_initialized := false;</span><br><span>  var octetstring g_sio := '83'O;</span><br><span> }</span><br><span>@@ -112,10 +117,31 @@</span><br><span>         msc_st.sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(opc, local_ssn));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_init() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_vty_allow_osmux(boolean allow) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (allow) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_vty_config(BSCNATVTY, "mgcp", "osmux on");</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_vty_config(BSCNATVTY, "mgcp", "osmux off");</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%);">+function f_init_vty(charstring id := "foo") runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (BSCNATVTY.checkstate("Mapped")) {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* skip initialization if already executed once */</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%);">+     map(self:BSCNATVTY, system:BSCNATVTY);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_vty_set_prompts(BSCNATVTY);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_transceive(BSCNATVTY, "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%);">+function f_init(boolean use_osmux) runs on test_CT {</span><br><span>  var integer i;</span><br><span>       var charstring id;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_vty("VirtBSCNAT");</span><br><span style="color: hsl(120, 100%, 40%);">+   f_vty_allow_osmux(use_osmux);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      for (i := 0; i < NUM_MSC; i := i+1) {</span><br><span>             f_init_MscState(msc[i], mp_msc_pc +i, mp_bsc_pc, mp_msc_ssn, mp_bsc_ssn);</span><br><span>            id := "MSC" & int2str(i);</span><br><span>@@ -125,22 +151,23 @@</span><br><span> </span><br><span>  /* Wait for bsc_nat to attach to MSC. Before that all BSC connections will be dropped */</span><br><span>     f_sleep(5.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      for (i := 0; i < NUM_BSC; i := i+1) {</span><br><span>             f_init_BscState(bsc[i], mp_bsc_pc +i, mp_msc_pc, mp_bsc_ssn, mp_msc_ssn);</span><br><span>            id := "BSC" & int2str(i);</span><br><span>              bsc[i].BSC := BSC_CT.create(id);</span><br><span>             bsc[i].BSC.start(BSC_MS_Simulation.main(mp_nat_ip, mp_nat_port, mp_bsc_ip, mp_bsc_port+i,</span><br><span>                                                    bsc[i].sccp_pars, bsc[i].sccp_addr_own,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 bsc[i].sccp_addr_peer, id));</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  bsc[i].sccp_addr_peer, use_osmux, id));</span><br><span>      }</span><br><span> </span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_recv_dump() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_TC_recv_dump(boolean use_osmux := false) runs on test_CT {</span><br><span>       var integer i;</span><br><span>       timer T := 30.0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init(use_osmux);</span><br><span> </span><br><span>       alt {</span><br><span>                /* wait for BSC to stop. The idea is that the BSC components terminate first */</span><br><span>@@ -155,8 +182,17 @@</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_recv_dump() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_recv_dump();</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_recv_dump_osmux() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_recv_dump(true);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> control {</span><br><span>      execute( TC_recv_dump() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_recv_dump_osmux() );</span><br><span> }</span><br><span> </span><br><span> }</span><br><span>diff --git a/bsc-nat/BSC_MS_ConnectionHandler.ttcn b/bsc-nat/BSC_MS_ConnectionHandler.ttcn</span><br><span>index 7777f03..f9f4db0 100644</span><br><span>--- a/bsc-nat/BSC_MS_ConnectionHandler.ttcn</span><br><span>+++ b/bsc-nat/BSC_MS_ConnectionHandler.ttcn</span><br><span>@@ -63,6 +63,7 @@</span><br><span>  decode_dtap := false,</span><br><span>        role_ms := true,</span><br><span>     protocol := RAN_PROTOCOL_BSSAP,</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Always false. We don't want to enable Osmux signalling in SCCPLite messages: */</span><br><span>       use_osmux := false,</span><br><span>  sccp_addr_local := omit,</span><br><span>     sccp_addr_peer := omit</span><br><span>@@ -89,11 +90,12 @@</span><br><span> }</span><br><span> </span><br><span> /* main function processing various incoming events */</span><br><span style="color: hsl(0, 100%, 40%);">-function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote)</span><br><span style="color: hsl(120, 100%, 40%);">+function main(SCCP_PAR_Address sccp_addr_own, SCCP_PAR_Address sccp_addr_remote, boolean use_osmux)</span><br><span> runs on BSC_MS_ConnHdlr {</span><br><span>    var PDU_BSSAP bssap;</span><br><span>         var MgcpCommand mgcp_cmd;</span><br><span style="color: hsl(0, 100%, 40%);">-       var MgcpResponse mgcp_resp;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template MgcpResponse mgcp_resp;</span><br><span style="color: hsl(120, 100%, 40%);">+  var MgcpOsmuxCID osmux_cid;</span><br><span> </span><br><span>      log("Starting main of BSC_MS_ConnHdlr");</span><br><span> </span><br><span>@@ -127,7 +129,19 @@</span><br><span>                                                  valueof(ts_SDP_ptime(20)) }));</span><br><span>                     /* respond with CRCX_ACK */</span><br><span>                  g_state := BSC_STATE_WAIT_MDCX;</span><br><span style="color: hsl(0, 100%, 40%);">-                 BSSAP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, g_mgcp_conn_id, g_sdp));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (use_osmux != f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                             setverdict(fail, log2str("Received Osmux CID presence doesn't match presence expectancy (", use_osmux, ")"));</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%);">+                   if (use_osmux) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+                           mgcp_resp := ts_CRCX_ACK_osmux(mgcp_cmd.line.trans_id, g_mgcp_conn_id, osmux_cid, g_sdp);</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              mgcp_resp := ts_CRCX_ACK(mgcp_cmd.line.trans_id, g_mgcp_conn_id, g_sdp);</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+                     BSSAP.send(valueof(mgcp_resp));</span><br><span>                      }</span><br><span> </span><br><span>                /* MDCX -> OK */</span><br><span>diff --git a/bsc-nat/BSC_MS_Simulation.ttcn b/bsc-nat/BSC_MS_Simulation.ttcn</span><br><span>index ed6e92d..d4e37a4 100644</span><br><span>--- a/bsc-nat/BSC_MS_Simulation.ttcn</span><br><span>+++ b/bsc-nat/BSC_MS_Simulation.ttcn</span><br><span>@@ -33,6 +33,7 @@</span><br><span> </span><br><span>     var SCCP_PAR_Address g_sccp_addr_own;</span><br><span>        var SCCP_PAR_Address g_sccp_addr_remote;</span><br><span style="color: hsl(120, 100%, 40%);">+      var boolean g_use_osmux;</span><br><span> </span><br><span>         var charstring g_bsc_num_str;</span><br><span> }</span><br><span>@@ -45,7 +46,8 @@</span><br><span>               charstring local_ip, PortNumber local_port,</span><br><span>          MSC_SCCP_MTP3_parameters sccp_pars,</span><br><span>          SCCP_PAR_Address sccp_addr_own,</span><br><span style="color: hsl(0, 100%, 40%);">-         SCCP_PAR_Address sccp_addr_remote, charstring id) runs on BSC_CT</span><br><span style="color: hsl(120, 100%, 40%);">+              SCCP_PAR_Address sccp_addr_remote,</span><br><span style="color: hsl(120, 100%, 40%);">+            boolean use_osmux, charstring id) runs on BSC_CT</span><br><span> {</span><br><span>        var integer i := 0;</span><br><span>  timer T := 1.0;</span><br><span>@@ -54,6 +56,7 @@</span><br><span> </span><br><span>      g_sccp_addr_own := sccp_addr_own;</span><br><span>    g_sccp_addr_remote := sccp_addr_remote;</span><br><span style="color: hsl(120, 100%, 40%);">+       g_use_osmux := use_osmux;</span><br><span> </span><br><span>        /* create components for IPA/SCCP/BSS[M]AP stack */</span><br><span>  vc_IPA := IPA_Emulation_CT.create(id & "-IPA");</span><br><span>@@ -98,7 +101,7 @@</span><br><span>   /* connect client BSSAP port to BSSAP dispatcher */</span><br><span>  connect(vc_conn:BSSAP, vc_BSSMAP:CLIENT);</span><br><span>    /* start component */</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn.start(BSC_MS_ConnectionHandler.main(g_sccp_addr_own, g_sccp_addr_remote));</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn.start(BSC_MS_ConnectionHandler.main(g_sccp_addr_own, g_sccp_addr_remote, g_use_osmux));</span><br><span>      /* blocking wait until component terminates.  If you want to start MSs in parallel,</span><br><span>   * you have to remove this statement here */</span><br><span>         vc_conn.done;</span><br><span>diff --git a/bsc-nat/gen_links.sh b/bsc-nat/gen_links.sh</span><br><span>index 7b7f928..01d4c7b 100755</span><br><span>--- a/bsc-nat/gen_links.sh</span><br><span>+++ b/bsc-nat/gen_links.sh</span><br><span>@@ -20,6 +20,11 @@</span><br><span> 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> gen_links $DIR $FILES</span><br><span> </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> # required by SCCP Emulation</span><br><span> DIR=$BASEDIR/titan.TestPorts.MTP3asp/src</span><br><span> FILES="MTP3asp_PortType.ttcn  MTP3asp_Types.ttcn"</span><br><span>@@ -47,7 +52,7 @@</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> DIR=../library</span><br><span style="color: hsl(0, 100%, 40%);">-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 L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+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 L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_VTY_Functions.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> ignore_pp_results</span><br><span>diff --git a/bsc-nat/regen_makefile.sh b/bsc-nat/regen_makefile.sh</span><br><span>index f49df7e..0f3cfab 100755</span><br><span>--- a/bsc-nat/regen_makefile.sh</span><br><span>+++ b/bsc-nat/regen_makefile.sh</span><br><span>@@ -2,7 +2,7 @@</span><br><span> </span><br><span> MAIN=BSCNAT_Tests.ttcn</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-FILES="*.ttcn *.ttcnpp SCCP_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc RTP_EncDec.cc SDP_EncDec.cc *.c MGCP_CodecPort_CtrlFunctDef.cc"</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="*.ttcn *.ttcnpp SCCP_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc RTP_EncDec.cc SDP_EncDec.cc *.c MGCP_CodecPort_CtrlFunctDef.cc TELNETasp_PT.cc"</span><br><span> </span><br><span> export CPPFLAGS_TTCN3="-DIPA_EMULATION_SCCP -DIPA_EMULATION_MGCP -DRAN_EMULATION_BSSAP -DRAN_EMULATION_MGCP -DUSE_MTP3_DISTRIBUTOR"</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14142">change 14142</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/14142"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I35f206aab713ccf0a4e074872e291c349c903b9d </div>
<div style="display:none"> Gerrit-Change-Number: 14142 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>