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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">NS_Emulation: Add [optional] support for FrameRelay transport<br><br>This adds a NS_Provider_FR which interfaces between FrameRelay_Emulation<br>and NS_Emulation.  Include support for it only if enabled at compile<br>time to avoid pulling in a dependency on the FrameRelay stack for every<br>user of NS_Emulation.<br><br>Change-Id: I42ca811d23e383e362d2527c8ff2c916a62a5b42<br>---<br>R library/NS_Emulation.ttcnpp<br>A library/NS_Provider_FR.ttcn<br>M pcu/gen_links.sh<br>M sgsn/gen_links.sh<br>4 files changed, 94 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/NS_Emulation.ttcn b/library/NS_Emulation.ttcnpp</span><br><span>similarity index 92%</span><br><span>rename from library/NS_Emulation.ttcn</span><br><span>rename to library/NS_Emulation.ttcnpp</span><br><span>index a0b24c9..32746b4 100644</span><br><span>--- a/library/NS_Emulation.ttcn</span><br><span>+++ b/library/NS_Emulation.ttcnpp</span><br><span>@@ -12,9 +12,12 @@</span><br><span> module NS_Emulation {</span><br><span>    import from NS_Types all;</span><br><span>    import from BSSGP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+  import from Osmocom_Types all;</span><br><span>       import from Osmocom_Gb_Types all;</span><br><span>    import from NS_Provider_IPL4 all;</span><br><span style="color: hsl(0, 100%, 40%);">-       import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef NS_EMULATION_FR</span><br><span style="color: hsl(120, 100%, 40%);">+        import from NS_Provider_FR all;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span>      import from IPL4asp_Types all;</span><br><span> </span><br><span>   type record NsUnitdataRequest {</span><br><span>@@ -91,10 +94,18 @@</span><br><span>        private function f_init() runs on NS_CT {</span><br><span>            var Result res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-             /* Connect the UDP socket */</span><br><span style="color: hsl(0, 100%, 40%);">-            vc_NSP_IP := NS_Provider_IPL4_CT.create;</span><br><span style="color: hsl(0, 100%, 40%);">-                connect(self:NSCP, vc_NSP_IP:NSE);</span><br><span style="color: hsl(0, 100%, 40%);">-              vc_NSP_IP.start(NS_Provider_IPL4.main(config));</span><br><span style="color: hsl(120, 100%, 40%);">+               if (ischosen(config.provider.ip)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* Connect the UDP socket */</span><br><span style="color: hsl(120, 100%, 40%);">+                  vc_NSP_IP := NS_Provider_IPL4_CT.create;</span><br><span style="color: hsl(120, 100%, 40%);">+                      connect(self:NSCP, vc_NSP_IP:NSE);</span><br><span style="color: hsl(120, 100%, 40%);">+                    vc_NSP_IP.start(NS_Provider_IPL4.main(config));</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef NS_EMULATION_FR</span><br><span style="color: hsl(120, 100%, 40%);">+               } else if (ischosen(config.provider.fr)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    vc_NSP_FR := NS_Provider_FR_CT.create;</span><br><span style="color: hsl(120, 100%, 40%);">+                        connect(self:NSCP, vc_NSP_FR:NSE);</span><br><span style="color: hsl(120, 100%, 40%);">+                    vc_NSP_FR.start(NS_Provider_FR.main(config));</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span> </span><br><span>                f_change_state(NSE_S_DEAD_BLOCKED);</span><br><span>          /* Send the first NS-ALIVE to test the connection */</span><br><span>@@ -118,6 +129,9 @@</span><br><span>           /* UDP port towards the bottom (IUT) */</span><br><span>              port NS_PROVIDER_PT NSCP;</span><br><span>            var NS_Provider_IPL4_CT vc_NSP_IP;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef NS_EMULATION_FR</span><br><span style="color: hsl(120, 100%, 40%);">+            var NS_Provider_FR_CT vc_NSP_FR;</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span> </span><br><span>                 /* NS-User SAP towards the user */</span><br><span>           port NS_SP_PT NS_SP;</span><br><span>@@ -138,8 +152,13 @@</span><br><span>          PortNumber remote_udp_port,</span><br><span>          charstring remote_ip</span><br><span>         };</span><br><span style="color: hsl(120, 100%, 40%);">+    type record NSConfigurationFR {</span><br><span style="color: hsl(120, 100%, 40%);">+               charstring netdev,      /* HDLC net-device for AF_PACKET socket */</span><br><span style="color: hsl(120, 100%, 40%);">+            integer dlci</span><br><span style="color: hsl(120, 100%, 40%);">+  };</span><br><span>   type union NSConfigurationP {</span><br><span style="color: hsl(0, 100%, 40%);">-           NSConfigurationIP ip</span><br><span style="color: hsl(120, 100%, 40%);">+          NSConfigurationIP ip,</span><br><span style="color: hsl(120, 100%, 40%);">+         NSConfigurationFR fr</span><br><span>         };</span><br><span>   type record NSConfiguration {</span><br><span>                NSConfigurationP provider,</span><br><span>diff --git a/library/NS_Provider_FR.ttcn b/library/NS_Provider_FR.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..851e6c4</span><br><span>--- /dev/null</span><br><span>+++ b/library/NS_Provider_FR.ttcn</span><br><span>@@ -0,0 +1,67 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* NS Provider for NS/FR/E1</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2020 Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * contributions by 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%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+module NS_Provider_FR {</span><br><span style="color: hsl(120, 100%, 40%);">+</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 NS_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from AF_PACKET_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from FrameRelay_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from FrameRelay_Emulation all;</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 NS_Provider_FR_CT extends NS_Provider_CT, FR_Client_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        /* component reference to Frame Relay emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+    var FR_Emulation_CT vc_FREMU;</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 main(NSConfiguration config) runs on NS_Provider_FR_CT system af_packet {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* start Frame Relay Emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+     vc_FREMU := FR_Emulation_CT.create();</span><br><span style="color: hsl(120, 100%, 40%);">+ var Q933em_Config q933_cfg := valueof(ts_Q933em_Config(ats_is_user := not config.role_sgsn, bidirectional := false));</span><br><span style="color: hsl(120, 100%, 40%);">+ map(vc_FREMU:FR, system:AF_PACKET) param (config.provider.fr.netdev);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_FREMU.start(FrameRelay_Emulation.main(q933_cfg));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* connect ourselves to frame relay emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+      connect(self:FR, vc_FREMU:CLIENT);</span><br><span style="color: hsl(120, 100%, 40%);">+    connect(self:FR_PROC, vc_FREMU:PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* register ourselves for the specified DLCI */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_fremu_register(config.provider.fr.dlci);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* transceive between user-facing port and FR socket */</span><br><span style="color: hsl(120, 100%, 40%);">+       while (true) {</span><br><span style="color: hsl(120, 100%, 40%);">+                var FrameRelayFrame rx_fr;</span><br><span style="color: hsl(120, 100%, 40%);">+            var FRemu_Event rx_frevt;</span><br><span style="color: hsl(120, 100%, 40%);">+             var PDU_NS rx_pdu;</span><br><span style="color: hsl(120, 100%, 40%);">+            alt {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               [] FR.receive(FrameRelayFrame:?) -> value rx_fr {</span><br><span style="color: hsl(120, 100%, 40%);">+                  NSE.send(dec_PDU_NS(rx_fr.payload));</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%);">+           [] FR.receive(FRemu_Event:?) -> value rx_frevt {</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* TODO: dispatch to user */</span><br><span style="color: hsl(120, 100%, 40%);">+                  }</span><br><span style="color: hsl(120, 100%, 40%);">+             [] NSE.receive(PDU_NS:?) -> value rx_pdu {</span><br><span style="color: hsl(120, 100%, 40%);">+                 FR.send(ts_FR(config.provider.fr.dlci, enc_PDU_NS(rx_pdu), 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%);">+           }</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 */</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%);">+} /* module */</span><br><span>diff --git a/pcu/gen_links.sh b/pcu/gen_links.sh</span><br><span>index fbb79a0..a33cb27 100755</span><br><span>--- a/pcu/gen_links.sh</span><br><span>+++ b/pcu/gen_links.sh</span><br><span>@@ -51,7 +51,7 @@</span><br><span> DIR=../library</span><br><span> FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc 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> FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcn "</span><br><span style="color: hsl(0, 100%, 40%);">-FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.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> FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "</span><br><span> FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "</span><br><span> FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn RAW_NS.ttcn "</span><br><span>diff --git a/sgsn/gen_links.sh b/sgsn/gen_links.sh</span><br><span>index 334df59..47baa54 100755</span><br><span>--- a/sgsn/gen_links.sh</span><br><span>+++ b/sgsn/gen_links.sh</span><br><span>@@ -84,7 +84,7 @@</span><br><span> </span><br><span> DIR=../library</span><br><span> 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(0, 100%, 40%);">-FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcn PCUIF_Types.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcnpp PCUIF_Types.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "</span><br><span> FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "</span><br><span> FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn "</span><br><span> FILES+="Osmocom_VTY_Functions.ttcn "</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20118">change 20118</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/+/20118"/><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: I42ca811d23e383e362d2527c8ff2c916a62a5b42 </div>
<div style="display:none"> Gerrit-Change-Number: 20118 </div>
<div style="display:none"> Gerrit-PatchSet: 13 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>