<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17285">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Add RTP payload testing to performance tests<br><br>Add negotiation of RTP Ports for both directions and integrate RTP<br>emulation to simulate actual traffic.<br><br>Change-Id: I21a610533d5be2e1647cc6a72423e056b39d1217<br>Related: OS#4365<br>---<br>M bts/BTS_Tests.ttcn<br>M bts/BTS_Tests_perf.ttcn<br>A bts/RTP_CodecPort_CtrlFunct.ttcn<br>A bts/RTP_CodecPort_CtrlFunctDef.cc<br>M bts/gen_links.sh<br>M bts/regen_makefile.sh<br>6 files changed, 222 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/85/17285/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index 46c9647..61232d4 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -63,6 +63,10 @@</span><br><span> import from TELNETasp_PortType all;</span><br><span> import from BTS_Tests_LAPDm all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_CodecPort_CtrlFunct all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> friend module BTS_Tests_SMSCB;</span><br><span> friend module BTS_Tests_virtphy;</span><br><span> friend module BTS_Tests_LAPDm;</span><br><span>@@ -157,6 +161,14 @@</span><br><span>       var ChannelNrs g_AllChanTypes;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_rtpem_init(inout RTP_Emulation_CT comp_ref, integer i)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+        comp_ref := RTP_Emulation_CT.create("RTPEM" & int2str(i));</span><br><span style="color: hsl(120, 100%, 40%);">+      map(comp_ref:RTP, system:RTP);</span><br><span style="color: hsl(120, 100%, 40%);">+        map(comp_ref:RTCP, system:RTCP);</span><br><span style="color: hsl(120, 100%, 40%);">+      comp_ref.start(RTP_Emulation.f_main());</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* an individual call / channel */</span><br><span> type component ConnHdlr extends RSL_DchanHdlr, lapdm_test_CT {</span><br><span>         port L1CTL_PT L1CTL;</span><br><span>@@ -174,6 +186,10 @@</span><br><span> </span><br><span>      /* PCU Interface of BTS */</span><br><span>   port PCUIF_CODEC_PT PCU;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* RTP channels for audio payload testing */</span><br><span style="color: hsl(120, 100%, 40%);">+  var RTP_Emulation_CT vc_RTPEM[14];</span><br><span style="color: hsl(120, 100%, 40%);">+    port RTPEM_CTRL_PT RTPEM[14];</span><br><span> }</span><br><span> </span><br><span> function f_init_rsl(charstring id) runs on test_CT {</span><br><span>@@ -518,6 +534,13 @@</span><br><span> </span><br><span>    f_rslem_register(0, pars.chan_nr);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* Setup RTP emulation so that it is available if needed by the</span><br><span style="color: hsl(120, 100%, 40%);">+        * the testcase. */</span><br><span style="color: hsl(120, 100%, 40%);">+   for (var integer i := 0; i < sizeof(vc_RTPEM); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         f_rtpem_init(vc_RTPEM[i], i);</span><br><span style="color: hsl(120, 100%, 40%);">+         connect(vc_RTPEM[i]:CTRL, self:RTPEM[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* call the user-supplied test case function */</span><br><span>      fn.apply(id);</span><br><span> }</span><br><span>diff --git a/bts/BTS_Tests_perf.ttcn b/bts/BTS_Tests_perf.ttcn</span><br><span>index 1e70bc8..29d0ae1 100644</span><br><span>--- a/bts/BTS_Tests_perf.ttcn</span><br><span>+++ b/bts/BTS_Tests_perf.ttcn</span><br><span>@@ -32,14 +32,61 @@</span><br><span> </span><br><span> import from BTS_Tests all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_CodecPort_CtrlFunct all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPL4asp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPL4asp_Functions all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /***********************************************************************</span><br><span>  * Performance tests. Expect osmo-bts to be configured with all TRX as TCH/H.</span><br><span>  ***********************************************************************/</span><br><span> </span><br><span> modulepar {</span><br><span>       float mp_wait_time := 10.0;</span><br><span style="color: hsl(120, 100%, 40%);">+   charstring mp_rtpem_ip := "127.0.0.2";</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Convert an IP address from its 32-Bit integer representation into a string</span><br><span style="color: hsl(120, 100%, 40%);">+ * representation */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_uin32t2ip(uint32_t uint32t) return charstring</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   var integer octet_1;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_2;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_3;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_4;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        octet_1 := uint32t / 16777216;</span><br><span style="color: hsl(120, 100%, 40%);">+        octet_2 := (uint32t - octet_1 * 16777216) / 65536;</span><br><span style="color: hsl(120, 100%, 40%);">+    octet_3 := (uint32t - octet_1 * 16777216 - octet_2 * 65536) / 255;</span><br><span style="color: hsl(120, 100%, 40%);">+    octet_4 := (uint32t - octet_1 * 16777216 - octet_2 * 65536 - octet_3 * 255);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return int2str(octet_1) & "." & int2str(octet_2) & "." & int2str(octet_3) & "." & int2str(octet_4);</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%);">+/* Convert an IP address from its string representation into a 32-Bit integer</span><br><span style="color: hsl(120, 100%, 40%);">+ * representation */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_ip2uint32t(charstring ip) return uint32_t</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_1;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_2;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_3;</span><br><span style="color: hsl(120, 100%, 40%);">+  var integer octet_4;</span><br><span style="color: hsl(120, 100%, 40%);">+  var ro_integer segAddr := {};</span><br><span style="color: hsl(120, 100%, 40%);">+ var uint32_t addr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  segAddr := f_splitIpAddress(ip);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    octet_1 := segAddr[0];</span><br><span style="color: hsl(120, 100%, 40%);">+        octet_2 := segAddr[1];</span><br><span style="color: hsl(120, 100%, 40%);">+        octet_3 := segAddr[2];</span><br><span style="color: hsl(120, 100%, 40%);">+        octet_4 := segAddr[3];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      addr := octet_1 * 16777216 + octet_2 * 65536 + octet_3 * 255 + octet_4;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return addr;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> /* This test requires BTS with 1 TRX to be configured with following timeslots: TS[0]=CCCH+SDCCH4, TS[1..7]: TCH/H</span><br><span>  * One can simply take the osmo-bsc.cfg in the same dir and change TS1..7, that's all needed.</span><br><span>@@ -49,6 +96,11 @@</span><br><span>  * on with full load.</span><br><span>  */</span><br><span> function f_TC_highchanload_tchh(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      var RSL_Message rx;</span><br><span style="color: hsl(120, 100%, 40%);">+   var uint32_t bts_rtp_ip;</span><br><span style="color: hsl(120, 100%, 40%);">+      var uint16_t bts_rtp_port;</span><br><span style="color: hsl(120, 100%, 40%);">+    var uint16_t bts_ipa_conn_id;</span><br><span style="color: hsl(120, 100%, 40%);">+ var RtpemConfig rtp_cfg := c_RtpemDefaultCfg;</span><br><span>        var ChannelNrs chan_nr := { /* TS 1..7: TCH/H */</span><br><span>             valueof(ts_RslChanNr_Lm(1,0)), valueof(ts_RslChanNr_Lm(1,1)),</span><br><span>                valueof(ts_RslChanNr_Lm(2,0)), valueof(ts_RslChanNr_Lm(2,1)),</span><br><span>@@ -58,25 +110,61 @@</span><br><span>                 valueof(ts_RslChanNr_Lm(6,0)), valueof(ts_RslChanNr_Lm(6,1)),</span><br><span>                valueof(ts_RslChanNr_Lm(7,0)), valueof(ts_RslChanNr_Lm(7,1))</span><br><span>                 };</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer channels := sizeof(chan_nr);</span><br><span> </span><br><span>         log("Started");</span><br><span style="color: hsl(0, 100%, 40%);">-       for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < channels; i := i+1) {</span><br><span>                log("Registering ", chan_nr[i]);</span><br><span>           f_rslem_register(0, chan_nr[i]);</span><br><span>     }</span><br><span>    log("Registered");</span><br><span style="color: hsl(0, 100%, 40%);">-    for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < channels; i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Activate channel */</span><br><span>               f_rsl_transceive(ts_RSL_CHAN_ACT(chan_nr[i],</span><br><span style="color: hsl(0, 100%, 40%);">-                             ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM3 /* AMR*/)),</span><br><span style="color: hsl(120, 100%, 40%);">+                          ts_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1 /* AMR*/)),</span><br><span>                                 tr_RSL_CHAN_ACT_ACK(chan_nr[i]),</span><br><span>                             log2str("RSL CHAN ACT [", i, "]"));</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%);">+          /* Negotiate RTP RX (BTS) port for activated channel */</span><br><span style="color: hsl(120, 100%, 40%);">+               rx := f_rsl_transceive_ret(ts_RSL_IPA_CRCX(chan_nr[i]),</span><br><span style="color: hsl(120, 100%, 40%);">+                                          tr_RSL_IPA_CRCX_ACK(chan_nr[i], *, *, *),</span><br><span style="color: hsl(120, 100%, 40%);">+                                     log2str("RSL IPA CRCX [", i, "]"));</span><br><span style="color: hsl(120, 100%, 40%);">+            bts_ipa_conn_id := rx.ies[1].body.ipa_conn_id;</span><br><span style="color: hsl(120, 100%, 40%);">+                bts_rtp_ip := rx.ies[2].body.ipa_local_ip;</span><br><span style="color: hsl(120, 100%, 40%);">+            bts_rtp_port := rx.ies[3].body.ipa_local_port;</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%);">+            /* Netotiate RTP TX (BTS) port for activated channel */</span><br><span style="color: hsl(120, 100%, 40%);">+               f_rsl_transceive(ts_RSL_IPA_MDCX(chan_nr[i], bts_ipa_conn_id, f_ip2uint32t(mp_rtpem_ip), bts_rtp_port, 23),</span><br><span style="color: hsl(120, 100%, 40%);">+                            tr_RSL_IPA_MDCX_ACK(chan_nr[i], *, *, *, *),</span><br><span style="color: hsl(120, 100%, 40%);">+                          log2str("RSL IPA MDCX [", i, "]"));</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%);">+          /* Start local RTP emulation (transmit packets to BTS, receive</span><br><span style="color: hsl(120, 100%, 40%);">+                 * packets from BTS) */</span><br><span style="color: hsl(120, 100%, 40%);">+               f_rtpem_bind(RTPEM[i], mp_rtpem_ip, bts_rtp_port);</span><br><span style="color: hsl(120, 100%, 40%);">+            rtp_cfg.tx_payload_type := 23;</span><br><span style="color: hsl(120, 100%, 40%);">+                f_rtpem_configure(RTPEM[0], rtp_cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+         f_rtpem_connect(RTPEM[i], f_uin32t2ip(bts_rtp_ip), bts_rtp_port);</span><br><span style="color: hsl(120, 100%, 40%);">+             f_rtpem_mode(RTPEM[i], RTPEM_MODE_BIDIR);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  }</span><br><span>    log("Activated, now waiting ", mp_wait_time, " seconds");</span><br><span> </span><br><span>    f_sleep(mp_wait_time);</span><br><span>       log("sleep done, deactivating");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  for (var integer i := 0; i < sizeof(chan_nr); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Tear down channels and RTP traffic */</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer i := 0; i < channels; i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Remove RTP traffic and wait some time before removing the</span><br><span style="color: hsl(120, 100%, 40%);">+           * the channel to make sure all remaining packets reach</span><br><span style="color: hsl(120, 100%, 40%);">+                * their destination */</span><br><span style="color: hsl(120, 100%, 40%);">+               f_rtpem_mode(RTPEM[i], RTPEM_MODE_NONE);</span><br><span style="color: hsl(120, 100%, 40%);">+              f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Remove channels */</span><br><span>                f_rsl_transceive(ts_RSL_RF_CHAN_REL(chan_nr[i]),</span><br><span>                              tr_RSL_RF_CHAN_REL_ACK(chan_nr[i]),</span><br><span>                                  log2str("RF CHAN REL [", i, "]"),</span><br><span>diff --git a/bts/RTP_CodecPort_CtrlFunct.ttcn b/bts/RTP_CodecPort_CtrlFunct.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..9f6cad2</span><br><span>--- /dev/null</span><br><span>+++ b/bts/RTP_CodecPort_CtrlFunct.ttcn</span><br><span>@@ -0,0 +1,44 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module RTP_CodecPort_CtrlFunct {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  import from RTP_CodecPort all;</span><br><span style="color: hsl(120, 100%, 40%);">+  import from IPL4asp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  external function f_IPL4_listen(</span><br><span style="color: hsl(120, 100%, 40%);">+    inout RTP_CODEC_PT portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    in HostName locName,</span><br><span style="color: hsl(120, 100%, 40%);">+    in PortNumber locPort,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ProtoTuple proto,</span><br><span style="color: hsl(120, 100%, 40%);">+    in OptionList options := {}</span><br><span style="color: hsl(120, 100%, 40%);">+  ) return Result;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  external function f_IPL4_connect(</span><br><span style="color: hsl(120, 100%, 40%);">+    inout RTP_CODEC_PT portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    in HostName remName,</span><br><span style="color: hsl(120, 100%, 40%);">+    in PortNumber remPort,</span><br><span style="color: hsl(120, 100%, 40%);">+    in HostName locName,</span><br><span style="color: hsl(120, 100%, 40%);">+    in PortNumber locPort,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ConnectionId connId,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ProtoTuple proto,</span><br><span style="color: hsl(120, 100%, 40%);">+    in OptionList options := {}</span><br><span style="color: hsl(120, 100%, 40%);">+  ) return Result;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  external function f_IPL4_close(</span><br><span style="color: hsl(120, 100%, 40%);">+    inout RTP_CODEC_PT portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ConnectionId id,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ProtoTuple proto := { unspecified := {} }</span><br><span style="color: hsl(120, 100%, 40%);">+  ) return Result;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  external function f_IPL4_setUserData(</span><br><span style="color: hsl(120, 100%, 40%);">+    inout RTP_CODEC_PT portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ConnectionId id,</span><br><span style="color: hsl(120, 100%, 40%);">+    in UserData userData</span><br><span style="color: hsl(120, 100%, 40%);">+  ) return Result;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  external function f_IPL4_getUserData(</span><br><span style="color: hsl(120, 100%, 40%);">+    inout RTP_CODEC_PT portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    in ConnectionId id,</span><br><span style="color: hsl(120, 100%, 40%);">+    out UserData userData</span><br><span style="color: hsl(120, 100%, 40%);">+  ) return Result;</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/bts/RTP_CodecPort_CtrlFunctDef.cc b/bts/RTP_CodecPort_CtrlFunctDef.cc</span><br><span>new file mode 100644</span><br><span>index 0000000..ce8e176</span><br><span>--- /dev/null</span><br><span>+++ b/bts/RTP_CodecPort_CtrlFunctDef.cc</span><br><span>@@ -0,0 +1,56 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#include "IPL4asp_PortType.hh"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "RTP_CodecPort.hh"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "IPL4asp_PT.hh"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+namespace RTP__CodecPort__CtrlFunct {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  IPL4asp__Types::Result f__IPL4__listen(</span><br><span style="color: hsl(120, 100%, 40%);">+    RTP__CodecPort::RTP__CODEC__PT& portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::HostName& locName,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::PortNumber& locPort,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ProtoTuple& proto,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::OptionList& options)</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    return f__IPL4__PROVIDER__listen(portRef, locName, locPort, proto, options);</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%);">+  IPL4asp__Types::Result f__IPL4__connect(</span><br><span style="color: hsl(120, 100%, 40%);">+    RTP__CodecPort::RTP__CODEC__PT& portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::HostName& remName,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::PortNumber& remPort,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::HostName& locName,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::PortNumber& locPort,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ConnectionId& connId,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ProtoTuple& proto,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::OptionList& options)</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    return f__IPL4__PROVIDER__connect(portRef, remName, remPort,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      locName, locPort, connId, proto, options);</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%);">+  IPL4asp__Types::Result f__IPL4__close(</span><br><span style="color: hsl(120, 100%, 40%);">+    RTP__CodecPort::RTP__CODEC__PT& portRef, </span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ConnectionId& connId, </span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ProtoTuple& proto)</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+      return f__IPL4__PROVIDER__close(portRef, connId, proto);</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%);">+  IPL4asp__Types::Result f__IPL4__setUserData(</span><br><span style="color: hsl(120, 100%, 40%);">+    RTP__CodecPort::RTP__CODEC__PT& portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ConnectionId& connId,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::UserData& userData)</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    return f__IPL4__PROVIDER__setUserData(portRef, connId, userData);</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%);">+  IPL4asp__Types::Result f__IPL4__getUserData(</span><br><span style="color: hsl(120, 100%, 40%);">+    RTP__CodecPort::RTP__CODEC__PT& portRef,</span><br><span style="color: hsl(120, 100%, 40%);">+    const IPL4asp__Types::ConnectionId& connId,</span><br><span style="color: hsl(120, 100%, 40%);">+    IPL4asp__Types::UserData& userData)</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+    return f__IPL4__PROVIDER__getUserData(portRef, connId, userData);</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/bts/gen_links.sh b/bts/gen_links.sh</span><br><span>index aafe231..0eda78a 100755</span><br><span>--- a/bts/gen_links.sh</span><br><span>+++ b/bts/gen_links.sh</span><br><span>@@ -28,6 +28,10 @@</span><br><span> 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> gen_links $DIR $FILES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.RTP/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="RTP_EncDec.cc RTP_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DIR=$BASEDIR/titan.TestPorts.TELNETasp/src</span><br><span> FILES="TELNETasp_PT.cc  TELNETasp_PT.hh  TELNETasp_PortType.ttcn"</span><br><span> gen_links $DIR $FILES</span><br><span>@@ -42,7 +46,8 @@</span><br><span> FILES+="Native_Functions.ttcn Native_FunctionDefs.cc "</span><br><span> FILES+="TRXC_Types.ttcn TRXC_CodecPort.ttcn TRXC_CodecPort_CtrlFunct.ttcn TRXC_CodecPort_CtrlFunctDef.cc "</span><br><span> FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn "</span><br><span style="color: hsl(0, 100%, 40%);">-FILES+="IPA_Testing.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="IPA_Testing.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="RTP_CodecPort.ttcn RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_Emulation.ttcn IuUP_EncDec.cc"</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> ignore_pp_results</span><br><span>diff --git a/bts/regen_makefile.sh b/bts/regen_makefile.sh</span><br><span>index 9f1bf1d..f5b6fbb 100755</span><br><span>--- a/bts/regen_makefile.sh</span><br><span>+++ b/bts/regen_makefile.sh</span><br><span>@@ -1,6 +1,6 @@</span><br><span> #!/bin/sh</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-FILES="*.ttcn *.ttcnpp IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc Native_FunctionDefs.cc TRXC_CodecPort_CtrlFunctDef.cc L1CTL_PortType_CtrlFunctDef.cc TELNETasp_PT.cc"</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="*.ttcn *.ttcnpp IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc Native_FunctionDefs.cc TRXC_CodecPort_CtrlFunctDef.cc L1CTL_PortType_CtrlFunctDef.cc TELNETasp_PT.cc RTP_EncDec.cc RTP_CodecPort_CtrlFunctDef.cc IuUP_EncDec.cc "</span><br><span> </span><br><span> export CPPFLAGS_TTCN3="-DIPA_EMULATION_RSL -DIPA_EMULATION_OML -DIPA_EMULATION_CTRL"</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17285">change 17285</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/+/17285"/><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: I21a610533d5be2e1647cc6a72423e056b39d1217 </div>
<div style="display:none"> Gerrit-Change-Number: 17285 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>