<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22246">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Add suite of RIM tests<br><br>They all fail with current gbproxy master as it doesn't yet implement<br>routing of RIM messages.<br><br>Change-Id: I0fec6fd4a5a6559f596b9006ae437323da6f05d7<br>---<br>M gbproxy/GBProxy_Tests.ttcn<br>1 file changed, 316 insertions(+), 0 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/46/22246/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn</span><br><span>index dc5756c..5343ba5 100644</span><br><span>--- a/gbproxy/GBProxy_Tests.ttcn</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -825,6 +825,8 @@</span><br><span> type component GlobalTest_CT extends test_CT {</span><br><span>         port BSSGP_PT G_PCU[NUM_PCU];</span><br><span>        port BSSGP_PT G_SGSN[NUM_SGSN];</span><br><span style="color: hsl(120, 100%, 40%);">+       port BSSGP_PT RIM_PCU[NUM_PCU];</span><br><span style="color: hsl(120, 100%, 40%);">+       port BSSGP_PT RIM_SGSN[NUM_SGSN];</span><br><span> };</span><br><span> </span><br><span> /* connect the signaling BVC of each NSE to the G_PCU / G_SGSN ports */</span><br><span>@@ -832,9 +834,11 @@</span><br><span>        var integer i;</span><br><span>       for (i := 0; i < lengthof(g_sgsn); i := i+1) {</span><br><span>            connect(self:G_SGSN[i], g_sgsn[i].vc_BSSGP:GLOBAL);</span><br><span style="color: hsl(120, 100%, 40%);">+           connect(self:RIM_SGSN[i], g_sgsn[i].vc_BSSGP:RIM);</span><br><span>   }</span><br><span>    for (i := 0; i < lengthof(g_pcu); i := i+1) {</span><br><span>             connect(self:G_PCU[i], g_pcu[i].vc_BSSGP:GLOBAL);</span><br><span style="color: hsl(120, 100%, 40%);">+             connect(self:RIM_PCU[i], g_pcu[i].vc_BSSGP:RIM);</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span>@@ -2581,6 +2585,310 @@</span><br><span>         f_cleanup();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * RIM (RAN Information Management)</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%);">+/* Our tests here are rather synthetic, as they don't reflect normal message flows</span><br><span style="color: hsl(120, 100%, 40%);">+   as they would be observed in a live network.  However, for testing gbproxy, this shouldn't</span><br><span style="color: hsl(120, 100%, 40%);">+   matter as gbproxy is not concerned with anything but the source / destination routing</span><br><span style="color: hsl(120, 100%, 40%);">+   information */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const BssgpCellId cell_id_sgsn := {</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 := c_mcc_mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+                 lac := 65534</span><br><span style="color: hsl(120, 100%, 40%);">+          },</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 := 65533</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%);">+/* Send 'tx' on PTP-BVCI from PCU; expect 'rx' on any of our SGSN (RIM can be routed anywhere) */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_rim_pcu2sgsn(template (value) PDU_BSSGP tx, template (present) PDU_BSSGP exp_rx,</span><br><span style="color: hsl(120, 100%, 40%);">+                        integer pcu_idx := 0) runs on GlobalTest_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_BSSGP rx;</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 1.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     RIM_PCU[pcu_idx].send(tx);</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%);">+ [] any from RIM_SGSN.receive(exp_rx) {</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%);">+     [] any from RIM_SGSN.receive(PDU_BSSGP:?) -> value rx {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail, "Unexpected BSSGP on SGSN side: ", rx);</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, "Timeout waiting for BSSGP on SGSN side: ", exp_rx);</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%);">+/* Send 'tx' on PTP-BVCI from SGSN; expect 'rx' on PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_rim_sgsn2pcu(template (value) PDU_BSSGP tx, template (present) PDU_BSSGP exp_rx,</span><br><span style="color: hsl(120, 100%, 40%);">+                        integer sgsn_idx := 0, integer pcu_idx := 0) runs on GlobalTest_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var PDU_BSSGP rx;</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 1.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     RIM_SGSN[sgsn_idx].send(tx);</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%);">+ [] RIM_PCU[pcu_idx].receive(exp_rx) {</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%);">+     [] RIM_PCU[pcu_idx].receive(PDU_BSSGP:?) -> value rx {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Unexpected BSSGP on PCU side: ", rx);</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, "Timeout waiting for BSSGP on PCU side: ", exp_rx);</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%);">+/* Send 'tx' on PTP-BVCI from SRC-PCU; expect 'rx' on DST-PCU */</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_rim_pcu2pcu(template (value) PDU_BSSGP tx, template (present) PDU_BSSGP exp_rx,</span><br><span style="color: hsl(120, 100%, 40%);">+                         integer src_pcu_idx, integer dst_pcu_idx) runs on GlobalTest_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var integer rx_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+   var PDU_BSSGP rx;</span><br><span style="color: hsl(120, 100%, 40%);">+     timer T := 1.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     RIM_PCU[src_pcu_idx].send(tx);</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%);">+ [] RIM_PCU[dst_pcu_idx].receive(exp_rx) -> value rx{</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%);">+     [] any from RIM_PCU.receive(exp_rx) -> @index value rx_idx {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Received RIM on wrong PCU[", rx_idx ,"], expected on PCU[", dst_pcu_idx, "]");</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] any from RIM_SGSN.receive(exp_rx) {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Received RIM on SGSN but expected it on other PCU");</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] any from RIM_SGSN.receive(PDU_BSSGP:?) -> value rx {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail, "Unexpected BSSGP on SGSN side: ", rx);</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, "Timeout waiting for BSSGP on SGSN side: ", exp_rx);</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%);">+type function rim_fn(integer sgsn_idx, integer pcu_idx, integer bvc_idx) runs on GlobalTest_CT;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* helper function for the RIM test cases: Execute 'fn' for each BVC on each PCU for</span><br><span style="color: hsl(120, 100%, 40%);">+   each SGSN */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_rim_iterator(rim_fn fn) runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       var integer sgsn_idx, pcu_idx, bvc_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_global_init();</span><br><span style="color: hsl(120, 100%, 40%);">+      for (sgsn_idx := 0; sgsn_idx < NUM_SGSN; sgsn_idx := sgsn_idx+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+         for (pcu_idx := 0; pcu_idx < lengthof(g_pcu); pcu_idx := pcu_idx+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (bvc_idx := 0; bvc_idx < lengthof(g_pcu[pcu_idx].cfg.bvc); bvc_idx := bvc_idx+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                             log("Testing RIM SGSN[", sgsn_idx, "] <-> PCU[", pcu_idx, "][", bvc_idx, "]");</span><br><span style="color: hsl(120, 100%, 40%);">+                          fn.apply(sgsn_idx, pcu_idx, bvc_idx);</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_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%);">+/* RAN-INFORMATION-REQUEST */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rim_info_req(integer sgsn_idx, integer pcu_idx, integer bvc_idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       var BssgpCellId cell_id := g_pcu[pcu_idx].cfg.bvc[bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RIM_Routing_Information ri_pcu;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template (value) RIM_Routing_Information ri_sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (value) RAN_Information_Request_RIM_Container cont;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    ri_sgsn := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id_sgsn));</span><br><span style="color: hsl(120, 100%, 40%);">+       ri_pcu := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+     cont := ts_RAN_Information_Request_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         ts_RIM_Sequence_Number(0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_STOP));</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rim_pcu2sgsn(ts_RAN_INFORMATION_REQUEST(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_RAN_INFORMATION_REQUEST(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                      pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_sgsn2pcu(ts_RAN_INFORMATION_REQUEST(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_RAN_INFORMATION_REQUEST(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                      sgsn_idx, pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_info_req() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rim_iterator(refers(f_TC_rim_info_req));</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%);">+/* RAN-INFORMATION */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rim_info(integer sgsn_idx, integer pcu_idx, integer bvc_idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     var BssgpCellId cell_id := g_pcu[pcu_idx].cfg.bvc[bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RIM_Routing_Information ri_pcu;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template (value) RIM_Routing_Information ri_sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (value) RAN_Information_RIM_Container cont;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    ri_sgsn := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id_sgsn));</span><br><span style="color: hsl(120, 100%, 40%);">+       ri_pcu := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+     cont := ts_RAN_Information_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_RIM_Sequence_Number(0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                            ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_STOP));</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rim_pcu2sgsn(ts_PDU_BSSGP_RAN_INFORMATION(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                     tr_PDU_BSSGP_RAN_INFORMATION(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                    pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_sgsn2pcu(ts_PDU_BSSGP_RAN_INFORMATION(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                     tr_PDU_BSSGP_RAN_INFORMATION(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                    sgsn_idx, pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_info() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       f_rim_iterator(refers(f_TC_rim_info));</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%);">+/* RAN-INFORMATION-ACK */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rim_info_ack(integer sgsn_idx, integer pcu_idx, integer bvc_idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ var BssgpCellId cell_id := g_pcu[pcu_idx].cfg.bvc[bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RIM_Routing_Information ri_pcu;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template (value) RIM_Routing_Information ri_sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (value) RAN_Information_Ack_RIM_Container cont;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        ri_sgsn := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id_sgsn));</span><br><span style="color: hsl(120, 100%, 40%);">+       ri_pcu := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+     cont := ts_RAN_Information_Ack_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_RIM_Sequence_Number(0));</span><br><span style="color: hsl(120, 100%, 40%);">+      f_rim_pcu2sgsn(ts_PDU_BSSGP_RAN_INFORMATION_ACK(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                 tr_PDU_BSSGP_RAN_INFORMATION_ACK(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                        pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_sgsn2pcu(ts_PDU_BSSGP_RAN_INFORMATION_ACK(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                 tr_PDU_BSSGP_RAN_INFORMATION_ACK(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                        sgsn_idx, pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_info_ack() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rim_iterator(refers(f_TC_rim_info_ack));</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%);">+/* RAN-INFORMATION-ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rim_info_error(integer sgsn_idx, integer pcu_idx, integer bvc_idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ var BssgpCellId cell_id := g_pcu[pcu_idx].cfg.bvc[bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RIM_Routing_Information ri_pcu;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template (value) RIM_Routing_Information ri_sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (value) RAN_Information_Error_RIM_Container cont;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      ri_sgsn := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id_sgsn));</span><br><span style="color: hsl(120, 100%, 40%);">+       ri_pcu := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+     cont := ts_RAN_Information_Error_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_BSSGP_CAUSE(BSSGP_CAUSE_EQUIMENT_FAILURE),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 omit, valueof(t_BVC_UNBLOCK(23)));</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_pcu2sgsn(ts_PDU_BSSGP_RAN_INFORMATION_ERROR(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_PDU_BSSGP_RAN_INFORMATION_ERROR(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                      pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_sgsn2pcu(ts_PDU_BSSGP_RAN_INFORMATION_ERROR(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_PDU_BSSGP_RAN_INFORMATION_ERROR(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                      sgsn_idx, pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_info_error() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rim_iterator(refers(f_TC_rim_info_error));</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%);">+/* RAN-INFORMATION-APPLICATION-ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rim_info_app_error(integer sgsn_idx, integer pcu_idx, integer bvc_idx := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       var BssgpCellId cell_id := g_pcu[pcu_idx].cfg.bvc[bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RIM_Routing_Information ri_pcu;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template (value) RIM_Routing_Information ri_sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template (value) Application_Error_Container app_cont;</span><br><span style="color: hsl(120, 100%, 40%);">+    var template (value) RAN_Information_Application_Error_RIM_Container cont;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  ri_sgsn := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id_sgsn));</span><br><span style="color: hsl(120, 100%, 40%);">+       ri_pcu := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, t_RIM_Routing_Address_cid(cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+     app_cont := tsu_Application_Error_Container_NACC(cell_id, 23,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  tsu_Application_Container_IE_NACC_req(cell_id));</span><br><span style="color: hsl(120, 100%, 40%);">+     cont := ts_RAN_Information_Application_Error_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 ts_RIM_Sequence_Number(0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                            ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_STOP),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                             omit, app_cont);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rim_pcu2sgsn(ts_PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                   tr_PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR(dst := ri_sgsn, src := ri_pcu, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                  pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_sgsn2pcu(ts_PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                   tr_PDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR(dst := ri_pcu, src := ri_sgsn, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                  sgsn_idx, pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_info_app_error() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     f_rim_iterator(refers(f_TC_rim_info_app_error));</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%);">+/* RAN-INFORMATION routing directly between PCUs, without SGSN involvement */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rim_info_pcu2pcu(integer src_pcu_idx, integer src_bvc_idx,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        integer dst_pcu_idx, integer dst_bvc_idx)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   var BssgpCellId cell_id_src := g_pcu[src_pcu_idx].cfg.bvc[src_bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+       var BssgpCellId cell_id_dst := g_pcu[dst_pcu_idx].cfg.bvc[dst_bvc_idx].cell_id;</span><br><span style="color: hsl(120, 100%, 40%);">+       var template (value) RIM_Routing_Information ri_pcu_src;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template (value) RIM_Routing_Information ri_pcu_dst;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template (value) RAN_Information_RIM_Container cont;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    log("Testing RIM PCU2PCU from PCU[", src_pcu_idx, "][", src_bvc_idx, "] to PCU[",</span><br><span style="color: hsl(120, 100%, 40%);">+           dst_pcu_idx, "][", dst_bvc_idx, "]");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       ri_pcu_src := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               t_RIM_Routing_Address_cid(cell_id_src));</span><br><span style="color: hsl(120, 100%, 40%);">+     ri_pcu_dst := ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               t_RIM_Routing_Address_cid(cell_id_dst));</span><br><span style="color: hsl(120, 100%, 40%);">+     cont := ts_RAN_Information_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_RIM_Sequence_Number(0),</span><br><span style="color: hsl(120, 100%, 40%);">+                                            ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_STOP));</span><br><span style="color: hsl(120, 100%, 40%);">+   f_rim_pcu2pcu(ts_PDU_BSSGP_RAN_INFORMATION(dst := ri_pcu_dst, src := ri_pcu_src, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                       tr_PDU_BSSGP_RAN_INFORMATION(dst := ri_pcu_dst, src := ri_pcu_src, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                     src_pcu_idx, dst_pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_rim_sgsn2pcu(ts_PDU_BSSGP_RAN_INFORMATION(dst := ri_pcu_src, src := ri_pcu_dst, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                      tr_PDU_BSSGP_RAN_INFORMATION(dst := ri_pcu_src, src := ri_pcu_dst, cont := cont),</span><br><span style="color: hsl(120, 100%, 40%);">+                     dst_pcu_idx, src_pcu_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_info_pcu2pcu() runs on GlobalTest_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        var integer src_pcu_idx, dst_pcu_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer src_bvc_idx, dst_bvc_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_global_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    for (src_pcu_idx := 0; src_pcu_idx < lengthof(g_pcu); src_pcu_idx := src_pcu_idx + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+            for (src_bvc_idx := 0; src_bvc_idx < lengthof(g_pcu[src_pcu_idx].cfg.bvc); src_bvc_idx := src_bvc_idx + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       for (dst_pcu_idx := 0; dst_pcu_idx < lengthof(g_pcu); dst_pcu_idx := dst_pcu_idx + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            if (dst_pcu_idx == src_pcu_idx) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     continue;</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%);">+                           for (dst_bvc_idx := 0; dst_bvc_idx < lengthof(g_pcu[dst_pcu_idx].cfg.bvc);</span><br><span style="color: hsl(120, 100%, 40%);">+dst_bvc_idx := dst_bvc_idx + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      f_TC_rim_info_pcu2pcu(src_pcu_idx, src_bvc_idx, dst_pcu_idx, dst_bvc_idx);</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%);">+   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%);">+</span><br><span> control {</span><br><span>     execute( TC_BVC_bringup() );</span><br><span>         execute( TC_ul_unitdata() );</span><br><span>@@ -2648,6 +2956,14 @@</span><br><span>        execute( TC_paging_cs_sig_bvci() );</span><br><span>  execute( TC_paging_cs_sig_bvci_unknown() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* RAN Information Management */</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_rim_info_req() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_rim_info() );</span><br><span style="color: hsl(120, 100%, 40%);">+     execute( TC_rim_info_ack() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_rim_info_error() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_rim_info_app_error() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_rim_info_pcu2pcu() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span>      execute( TC_flush_ll() );</span><br><span>    execute( TC_fc_bvc() );</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22246">change 22246</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/+/22246"/><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: I0fec6fd4a5a6559f596b9006ae437323da6f05d7 </div>
<div style="display:none"> Gerrit-Change-Number: 22246 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>