<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21133">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">FR/FRNET: Introduce simplistic simulation of UEs<br><br>Let's start a number of per-UE/TLLI component on each BVC, and generate<br>some uplink traffic with random-payload 512-byte LLC frames.  The<br>FRNET(SGSN) side simply ignores all of those by means of a<br>CreateCallback.<br><br>Change-Id: I1b25b4a650d831bb07e9623b76e6c3dcdd71ac88<br>---<br>M fr-net/FRNET_Tests.ttcn<br>M fr/FR_Tests.ttcn<br>2 files changed, 81 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/33/21133/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/fr-net/FRNET_Tests.ttcn b/fr-net/FRNET_Tests.ttcn</span><br><span>index 87b9bd7..94b32dc 100644</span><br><span>--- a/fr-net/FRNET_Tests.ttcn</span><br><span>+++ b/fr-net/FRNET_Tests.ttcn</span><br><span>@@ -43,6 +43,11 @@</span><br><span>       var GbInstances g_gb;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function CreateCallback(BssgpBvci bvci, BssgpCellId cell_id, OCT4 tlli, BssgpDecoded dec) runs on BSSGP_BVC_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   /* simply ignore any inbound traffic for now */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_init_gb(inout GbInstance gb, charstring id, integer offset) runs on test_CT {</span><br><span>     var charstring id_idx := id & int2str(offset);</span><br><span>   gb.vc_NS := NS_CT.create(id_idx & "-NSemu");</span><br><span>@@ -66,7 +71,7 @@</span><br><span>                       cell_id := base + 600 + idx</span><br><span>          },</span><br><span>           depth := BSSGP_DECODE_DEPTH_LLC,</span><br><span style="color: hsl(0, 100%, 40%);">-                create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)</span><br><span style="color: hsl(120, 100%, 40%);">+            create_cb := refers(CreateCallback)</span><br><span>  };</span><br><span>   return bvc;</span><br><span> }</span><br><span>diff --git a/fr/FR_Tests.ttcn b/fr/FR_Tests.ttcn</span><br><span>index 9f9b70e..f3652a3 100644</span><br><span>--- a/fr/FR_Tests.ttcn</span><br><span>+++ b/fr/FR_Tests.ttcn</span><br><span>@@ -6,9 +6,11 @@</span><br><span> </span><br><span> import from NS_Emulation all;</span><br><span> import from BSSGP_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from LLC_Templates all;</span><br><span> </span><br><span> modulepar {</span><br><span>         integer mp_num_bvc := 10;</span><br><span style="color: hsl(120, 100%, 40%);">+     integer mp_num_ue_in_bvc := 10;</span><br><span>      NSConfigurations mp_nsconfig := {</span><br><span>            {</span><br><span>                    nsei := 123,</span><br><span>@@ -42,6 +44,7 @@</span><br><span> </span><br><span> type component test_CT {</span><br><span>     var GbInstances g_gb;</span><br><span style="color: hsl(120, 100%, 40%);">+ port BSSGP_CT_PROC_PT BSSGP_PROC[16];</span><br><span> };</span><br><span> </span><br><span> private function f_init_gb(inout GbInstance gb, charstring id, integer offset) runs on test_CT {</span><br><span>@@ -50,6 +53,7 @@</span><br><span>      gb.vc_BSSGP := BSSGP_CT.create(id_idx & "-BSSGPemu");</span><br><span>  connect(gb.vc_BSSGP:BSCP, gb.vc_NS:NS_SP);</span><br><span>   gb.vc_NS.start(NSStart(mp_nsconfig[offset], id_idx));</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(self:BSSGP_PROC[offset], gb.vc_BSSGP:PROC);</span><br><span>  gb.vc_BSSGP.start(BssgpStart(gb.cfg, testcasename()));</span><br><span> }</span><br><span> </span><br><span>@@ -72,6 +76,65 @@</span><br><span>         return bvc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * UE simulation component</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 UE_CT extends BSSGP_Client_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var UE_Pars g_pars;</span><br><span style="color: hsl(120, 100%, 40%);">+   timer g_Tguard;</span><br><span style="color: hsl(120, 100%, 40%);">+       var LLC_Entities llc;</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 record UE_Pars {</span><br><span style="color: hsl(120, 100%, 40%);">+     hexstring imsi,</span><br><span style="color: hsl(120, 100%, 40%);">+       OCT4 tlli</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 void_fn(charstring id) runs on UE_CT;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function f_handler_init(void_fn fn, charstring id, UE_Pars pars) runs on UE_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+      g_pars := pars;</span><br><span style="color: hsl(120, 100%, 40%);">+       llc := f_llc_create(false);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_bssgp_client_register(g_pars.imsi, g_pars.tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  fn.apply(id);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_bssgp_client_unregister(g_pars.imsi);</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_ul_ud(charstring id) runs on UE_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       log("Waiting for BVC-UNBLOCK");</span><br><span style="color: hsl(120, 100%, 40%);">+     alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSGP[0].receive(BssgpStatusIndication:{*,?,BVC_S_UNBLOCKED}) { }</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSGP[0].receive { repeat; }</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%);">+   log ("Entering main loop");</span><br><span style="color: hsl(120, 100%, 40%);">+ while (true) {</span><br><span style="color: hsl(120, 100%, 40%);">+                var integer ran_index := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+           //BSSGP[ran_index].send(ts_BSSGP_UL_UD(g_pars.tlli, g_pars.bssgp_cell_id[ran_index], llc_enc));</span><br><span style="color: hsl(120, 100%, 40%);">+               BSSGP[ran_index].send(ts_LLC_UI(f_rnd_octstring(512), '0000'B, '1'B, 0))</span><br><span style="color: hsl(120, 100%, 40%);">+              f_sleep(0.5);</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_start_ue(void_fn fn, charstring id, GbInstance gb, integer imsi_suffix, BSSGP_BVC_CT bvc_comp, float t_guard := 30.0)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  var UE_CT ue_comp;</span><br><span style="color: hsl(120, 100%, 40%);">+    var UE_Pars ue_pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+              imsi := f_gen_imsi(imsi_suffix),</span><br><span style="color: hsl(120, 100%, 40%);">+              tlli := f_gprs_tlli_random()</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%);">+  ue_comp := UE_CT.create(id);</span><br><span style="color: hsl(120, 100%, 40%);">+  connect(ue_comp:BSSGP[0], bvc_comp:BSSGP_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(ue_comp:BSSGP_SIG[0], bvc_comp:BSSGP_SP_SIG);</span><br><span style="color: hsl(120, 100%, 40%);">+ connect(ue_comp:BSSGP_PROC[0], bvc_comp:BSSGP_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+  ue_comp.start(f_handler_init(fn, id, ue_pars));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> testcase TC_foo() runs on test_CT {</span><br><span> </span><br><span>@@ -85,8 +148,20 @@</span><br><span>            for (var integer j := 0; j < mp_num_bvc; j := j+1) {</span><br><span>                      g_gb[i].cfg.bvc := g_gb[i].cfg.bvc & { f_gen_bvc(i * 1000, j) };</span><br><span>                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             log("Initializing Gb interface ", i, ": NSEI=", g_gb[i].cfg.nsei);</span><br><span>               f_init_gb(g_gb[i], "gb", i);</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     for (var integer i := 0; i < lengthof(mp_nsconfig); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+            for (var integer j := 0; j < mp_num_bvc; j := j+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       var BSSGP_BVC_CT bvc_comp := f_bssgp_get_bvci_ct(g_gb[i].cfg.bvc[j].bvci, BSSGP_PROC[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+                     for (var integer k := 0; k < mp_num_ue_in_bvc; k := k+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         var charstring id := "gb" & int2str(i) & "-bvc" & int2str(g_gb[i].cfg.bvc[j].bvci) & "-UEsim" & int2str(k);</span><br><span style="color: hsl(120, 100%, 40%);">+                         f_start_ue(refers(f_ul_ud), id, g_gb[i], i*10000+j*100+k, bvc_comp);</span><br><span style="color: hsl(120, 100%, 40%);">+                          /* a bit of staggering to ensure the timers above don't run all at the same time */</span><br><span style="color: hsl(120, 100%, 40%);">+                               f_sleep(0.05);</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>    while (true) {</span><br><span>               f_sleep(100.0);</span><br><span>      }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21133">change 21133</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/+/21133"/><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: I1b25b4a650d831bb07e9623b76e6c3dcdd71ac88 </div>
<div style="display:none"> Gerrit-Change-Number: 21133 </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>