<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24842">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS: equip ConnHdlr with the RTP emulation component<br><br>Change-Id: Icb04cb73d8d55eb75edc2af2f18bb99d2c3f24a5<br>---<br>M bts/BTS_Tests.ttcn<br>M bts/gen_links.sh<br>M bts/regen_makefile.sh<br>3 files changed, 70 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/42/24842/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 a7fdf16..64ee3d1 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -44,6 +44,7 @@</span><br><span> import from IPA_Emulation all;</span><br><span> import from IPA_Testing all;</span><br><span> import from RSL_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from RTP_Emulation all;</span><br><span> </span><br><span> import from IPL4asp_Types all;</span><br><span> import from TRXC_Types all;</span><br><span>@@ -93,6 +94,8 @@</span><br><span>      integer mp_ctrl_port := 4238;</span><br><span>        charstring mp_bsc_ctrl_ip := "127.0.0.1";</span><br><span>  integer mp_bsc_ctrl_port := 4249;</span><br><span style="color: hsl(120, 100%, 40%);">+     charstring mp_rtpem_bind_ip := "127.0.0.1";</span><br><span style="color: hsl(120, 100%, 40%);">+ integer mp_rtpem_bind_port := 6766;</span><br><span>  integer mp_tolerance_rxqual := 1;</span><br><span>    integer mp_tolerance_rxlev := 3;</span><br><span>     integer mp_tolerance_timing_offset_256syms := 0;</span><br><span>@@ -205,6 +208,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%);">+    var RTP_Emulation_CT vc_RTPEM;</span><br><span style="color: hsl(120, 100%, 40%);">+        port RTPEM_CTRL_PT RTPEM_CTRL;</span><br><span style="color: hsl(120, 100%, 40%);">+        port RTPEM_DATA_PT RTPEM_DATA;</span><br><span> }</span><br><span> </span><br><span> private function f_init_rsl(charstring id) runs on test_CT {</span><br><span>@@ -2285,6 +2292,62 @@</span><br><span>     g_first_meas_res := true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Initialize and start the RTP emulation component for a ConnHdlr */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_rtpem_activate(RtpemConfig cfg := c_RtpemDefaultCfg,</span><br><span style="color: hsl(120, 100%, 40%);">+                              RtpemMode mode := RTPEM_MODE_BIDIR)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on ConnHdlr return octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Step 0: initialize, connect and start the emulation component */</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_RTPEM := RTP_Emulation_CT.create(testcasename() & "-RTPEM");</span><br><span style="color: hsl(120, 100%, 40%);">+ map(vc_RTPEM:RTP, system:RTP);</span><br><span style="color: hsl(120, 100%, 40%);">+        map(vc_RTPEM:RTCP, system:RTCP);</span><br><span style="color: hsl(120, 100%, 40%);">+      connect(vc_RTPEM:CTRL, self:RTPEM_CTRL);</span><br><span style="color: hsl(120, 100%, 40%);">+      connect(vc_RTPEM:DATA, self:RTPEM_DATA);</span><br><span style="color: hsl(120, 100%, 40%);">+      vc_RTPEM.start(RTP_Emulation.f_main());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Step 1: configure the RTP parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+    var octetstring payload := '00'O;</span><br><span style="color: hsl(120, 100%, 40%);">+     var integer payload_len := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       select (g_pars.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+   case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM1)) /* TCH/FS */</span><br><span style="color: hsl(120, 100%, 40%);">+         { payload_len := 33; payload := 'D0'O; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case (tr_RSL_ChanMode(RSL_CHRT_TCH_H, RSL_CMOD_SP_GSM1)) /* TCH/HS */</span><br><span style="color: hsl(120, 100%, 40%);">+         { payload_len := 15; payload := '70'O; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case (tr_RSL_ChanMode(RSL_CHRT_TCH_F, RSL_CMOD_SP_GSM2)) /* TCH/EFS */</span><br><span style="color: hsl(120, 100%, 40%);">+                { payload_len := 31; payload := 'C0'O; }</span><br><span style="color: hsl(120, 100%, 40%);">+      case else { /* FIXME: also handle TCH/AFS and TCH/AHS */</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Unhandled RSL channel mode := ", g_pars.chan_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+               Misc_Helpers.f_shutdown(__BFILE__, __LINE__);</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%);">+   /* Add some randomeness to the payload and pad it */</span><br><span style="color: hsl(120, 100%, 40%);">+  payload := payload & f_rnd_octstring(4);</span><br><span style="color: hsl(120, 100%, 40%);">+  payload := f_pad_oct(payload, payload_len, '00'O);</span><br><span style="color: hsl(120, 100%, 40%);">+    cfg.tx_fixed_payload := payload;</span><br><span style="color: hsl(120, 100%, 40%);">+      f_rtpem_configure(RTPEM_CTRL, cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Step 2: bind the RTP emulation to the configured address */</span><br><span style="color: hsl(120, 100%, 40%);">+        var PortNumber rtpem_bind_port := mp_rtpem_bind_port;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rtpem_bind(RTPEM_CTRL, mp_rtpem_bind_ip, rtpem_bind_port);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Step 3: send CRCX with the configured address/port to the IUT */</span><br><span style="color: hsl(120, 100%, 40%);">+   var RSL_Message rsl_pdu := f_rsl_transceive_ret(</span><br><span style="color: hsl(120, 100%, 40%);">+              ts_RSL_IPA_CRCX(g_chan_nr, f_inet_addr(mp_rtpem_bind_ip), rtpem_bind_port),</span><br><span style="color: hsl(120, 100%, 40%);">+           tr_RSL_IPA_CRCX_ACK(g_chan_nr, ?, ?, ?),</span><br><span style="color: hsl(120, 100%, 40%);">+              "IPA CRCX ACK");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Step 4: connect to the IUT's address/port parsed from CRCX ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+      var HostName local_addr := f_inet_ntoa(rsl_pdu.ies[2].body.ipa_local_ip);</span><br><span style="color: hsl(120, 100%, 40%);">+     var PortNumber local_port := rsl_pdu.ies[3].body.ipa_local_port;</span><br><span style="color: hsl(120, 100%, 40%);">+      f_rtpem_connect(RTPEM_CTRL, local_addr, local_port);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Step 5: set the given RTP emulation mode */</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rtpem_mode(RTPEM_CTRL, mode);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return payload;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* establish DChan, verify existance + contents of measurement reports */</span><br><span> private function f_TC_meas_res_periodic(charstring id) runs on ConnHdlr {</span><br><span>       f_l1_tune(L1CTL);</span><br><span>diff --git a/bts/gen_links.sh b/bts/gen_links.sh</span><br><span>index cd8e379..c8c2b98 100755</span><br><span>--- a/bts/gen_links.sh</span><br><span>+++ b/bts/gen_links.sh</span><br><span>@@ -32,6 +32,10 @@</span><br><span> FILES="TELNETasp_PT.cc  TELNETasp_PT.hh  TELNETasp_PortType.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=../library</span><br><span> FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_VTY_Functions.ttcn GSM_SystemInformation.ttcn GSM_RestOctets.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "</span><br><span> #FILES+="BSSGP_Emulation.ttcn Osmocom_Gb_Types.ttcn "</span><br><span>@@ -40,6 +44,8 @@</span><br><span> FILES+="L3_Templates.ttcn L3_Common.ttcn "</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 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 style="color: hsl(120, 100%, 40%);">+FILES+="RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc "</span><br><span> FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn "</span><br><span> FILES+="IPA_Testing.ttcn"</span><br><span> gen_links $DIR $FILES</span><br><span>diff --git a/bts/regen_makefile.sh b/bts/regen_makefile.sh</span><br><span>index 8771500..42ad0f3 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 IuUP_EncDec.cc RTP_EncDec.cc RTP_CodecPort_CtrlFunctDef.cc"</span><br><span> </span><br><span> export CPPFLAGS_TTCN3="-DIPA_EMULATION_RSL -DIPA_EMULATION_OML -DIPA_EMULATION_CTRL -DIPA_EMULATION_OSMO_PCU"</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24842">change 24842</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/+/24842"/><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: Icb04cb73d8d55eb75edc2af2f18bb99d2c3f24a5 </div>
<div style="display:none"> Gerrit-Change-Number: 24842 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>