<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21698">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: second SGSN<br><br>Change-Id: Ib70f7c1a29f089957f882df0e9b05ee526224611<br>---<br>M gbproxy/GBProxy_Tests.ttcn<br>M gbproxy/osmo-gbproxy.fr.cfg<br>2 files changed, 71 insertions(+), 21 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/98/21698/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 59154e8..7e20077 100644</span><br><span>--- a/gbproxy/GBProxy_Tests.ttcn</span><br><span>+++ b/gbproxy/GBProxy_Tests.ttcn</span><br><span>@@ -66,6 +66,24 @@</span><br><span> nsvci := 101</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+ }, {</span><br><span style="color: hsl(120, 100%, 40%);">+ nsei := 102,</span><br><span style="color: hsl(120, 100%, 40%);">+ role_sgsn := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ handle_sns := false,</span><br><span style="color: hsl(120, 100%, 40%);">+ nsvc := {</span><br><span style="color: hsl(120, 100%, 40%);">+ {</span><br><span style="color: hsl(120, 100%, 40%);">+ provider := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ip := {</span><br><span style="color: hsl(120, 100%, 40%);">+ address_family := AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+ local_udp_port := 8888,</span><br><span style="color: hsl(120, 100%, 40%);">+ local_ip := "127.0.0.1",</span><br><span style="color: hsl(120, 100%, 40%);">+ remote_udp_port := 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+ remote_ip := "127.0.0.1"</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%);">+ nsvci := 102</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> };</span><br><span> /* BSS NSEI start at 2000 + x</span><br><span>@@ -263,7 +281,7 @@</span><br><span> type record of NSConfiguration NSConfigurations;</span><br><span> type record of BssgpCellId BssgpCellIds;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-const integer NUM_SGSN := 1;</span><br><span style="color: hsl(120, 100%, 40%);">+const integer NUM_SGSN := 2;</span><br><span> </span><br><span> type component test_CT {</span><br><span> var GbInstances g_pcu;</span><br><span>@@ -425,8 +443,25 @@</span><br><span> return false;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private type record of ro_integer roro_integer;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* count the number of unblocked BVCI for each SGSN NSE */</span><br><span style="color: hsl(120, 100%, 40%);">+private altstep as_count_unblocked4nse(integer sgsn_idx, inout roro_integer bvci_unblocked)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BssgpStatusIndication bsi;</span><br><span style="color: hsl(120, 100%, 40%);">+ [] SGSN_MGMT.receive(BssgpStatusIndication:{g_sgsn[sgsn_idx].cfg.nsei, ?, BVC_S_UNBLOCKED}) -> value bsi {</span><br><span style="color: hsl(120, 100%, 40%);">+ bvci_unblocked[sgsn_idx] := bvci_unblocked[sgsn_idx] & { bsi.bvci };</span><br><span style="color: hsl(120, 100%, 40%);">+ /* 'repeat' until sufficient number of BVC-rest has been received on all SGSNs */</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer i := 0; i < lengthof(bvci_unblocked); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lengthof(bvci_unblocked[i]) < lengthof(g_sgsn[i].cfg.bvc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ 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%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_init(float t_guard := 30.0) runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">- var ro_integer bvci_unblocked := {};</span><br><span style="color: hsl(120, 100%, 40%);">+ var roro_integer bvci_unblocked;</span><br><span> var BssgpStatusIndication bsi;</span><br><span> var integer i;</span><br><span> </span><br><span>@@ -438,17 +473,21 @@</span><br><span> g_Tguard.start(t_guard);</span><br><span> activate(as_gTguard(g_Tguard));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- g_sgsn[0].cfg := {</span><br><span style="color: hsl(0, 100%, 40%);">- nsei := mp_nsconfig_sgsn[0].nsei,</span><br><span style="color: hsl(0, 100%, 40%);">- sgsn_role := true,</span><br><span style="color: hsl(0, 100%, 40%);">- bvc := { }</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ var BssgpBvcConfigs bvcs := { };</span><br><span> for (i := 0; i < lengthof(mp_gbconfigs); i := i+1) {</span><br><span> g_pcu[i].cfg := mp_gbconfigs[i];</span><br><span> /* make sure all have a proper crate_cb, which cannot be specified in config file */</span><br><span> f_fix_create_cb(g_pcu[i].cfg);</span><br><span> /* concatenate all the PCU-side BVCs for the SGSN side */</span><br><span style="color: hsl(0, 100%, 40%);">- g_sgsn[0].cfg.bvc := g_sgsn[0].cfg.bvc & g_pcu[i].cfg.bvc;</span><br><span style="color: hsl(120, 100%, 40%);">+ bvcs := bvcs & g_pcu[i].cfg.bvc;</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 (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ g_sgsn[i].cfg := {</span><br><span style="color: hsl(120, 100%, 40%);">+ nsei := mp_nsconfig_sgsn[i].nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+ sgsn_role := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ bvc := bvcs</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> </span><br><span> f_init_vty();</span><br><span>@@ -468,16 +507,18 @@</span><br><span> f_init_gb_pcu(g_pcu[i], "GbProxy_Test", i);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ bvci_unblocked[i] := {};</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* wait until all BVC are unblocked on both sides */</span><br><span> timer T := 15.0;</span><br><span> T.start;</span><br><span> alt {</span><br><span style="color: hsl(0, 100%, 40%);">- [] SGSN_MGMT.receive(BssgpStatusIndication:{*, ?, BVC_S_UNBLOCKED}) -> value bsi {</span><br><span style="color: hsl(0, 100%, 40%);">- bvci_unblocked := bvci_unblocked & { bsi.bvci };</span><br><span style="color: hsl(0, 100%, 40%);">- if (lengthof(bvci_unblocked) != lengthof(g_sgsn[0].cfg.bvc)) {</span><br><span style="color: hsl(0, 100%, 40%);">- repeat;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: We need to add more lines if NUM_SGSN increases. Activating default altsteps</span><br><span style="color: hsl(120, 100%, 40%);">+ * unfortunately doesn't work as we want to access the lcoal variable bvci_unblocked. */</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_count_unblocked4nse(0, bvci_unblocked);</span><br><span style="color: hsl(120, 100%, 40%);">+ [lengthof(g_sgsn) > 1] as_count_unblocked4nse(1, bvci_unblocked);</span><br><span> [] SGSN_MGMT.receive(BssgpStatusIndication:{*, ?, ?}) {</span><br><span> repeat;</span><br><span> }</span><br><span>@@ -505,17 +546,19 @@</span><br><span> </span><br><span> [] T.timeout {</span><br><span> setverdict(fail, "Timeout waiting for unblock of all BVCs on SGSN side; ",</span><br><span style="color: hsl(0, 100%, 40%);">- "unblocked so far: ", bvci_unblocked, "expected: ", g_sgsn[0].cfg.bvc);</span><br><span style="color: hsl(120, 100%, 40%);">+ "unblocked so far: ", bvci_unblocked);</span><br><span> /* don't stop here but print below analysis */</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* iterate over list and check all BVCI */</span><br><span style="color: hsl(0, 100%, 40%);">- for (i := 0; i < lengthof(g_sgsn[0].cfg.bvc); i := i+1) {</span><br><span style="color: hsl(0, 100%, 40%);">- var BssgpBvci bvci := g_sgsn[0].cfg.bvc[i].bvci;</span><br><span style="color: hsl(0, 100%, 40%);">- if (not ro_integer_contains(bvci_unblocked, bvci)) {</span><br><span style="color: hsl(0, 100%, 40%);">- setverdict(fail, "BVCI=", bvci, " was not unblocked during start-up");</span><br><span style="color: hsl(0, 100%, 40%);">- mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* iterate over list and check all BVCI */</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer j := 0; j < lengthof(g_sgsn[i].cfg.bvc); j := j+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ var BssgpBvci bvci := g_sgsn[i].cfg.bvc[j].bvci;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (not ro_integer_contains(bvci_unblocked[i], bvci)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "SGSN ", i, " BVCI=", bvci, " was not unblocked during start-up");</span><br><span style="color: hsl(120, 100%, 40%);">+ mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> }</span><br><span> </span><br><span>diff --git a/gbproxy/osmo-gbproxy.fr.cfg b/gbproxy/osmo-gbproxy.fr.cfg</span><br><span>index 32f0e91..ebf04d5 100644</span><br><span>--- a/gbproxy/osmo-gbproxy.fr.cfg</span><br><span>+++ b/gbproxy/osmo-gbproxy.fr.cfg</span><br><span>@@ -22,6 +22,12 @@</span><br><span> nse 101 nsvci 101 remote-ip 127.0.0.1</span><br><span> nse 101 nsvci 101 remote-port 7777</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ nse 102 nsvci 102</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 102 nsvci 102 remote-role sgsn</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 102 nsvci 102 encapsulation udp</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 102 nsvci 102 remote-ip 127.0.0.1</span><br><span style="color: hsl(120, 100%, 40%);">+ nse 102 nsvci 102 remote-port 8888</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> timer tns-block 3</span><br><span> timer tns-block-retries 3</span><br><span> timer tns-reset 3</span><br><span>@@ -44,3 +50,4 @@</span><br><span> </span><br><span> gbproxy</span><br><span> sgsn nsei 101</span><br><span style="color: hsl(120, 100%, 40%);">+ sgsn nsei 102</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21698">change 21698</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/+/21698"/><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: Ib70f7c1a29f089957f882df0e9b05ee526224611 </div>
<div style="display:none"> Gerrit-Change-Number: 21698 </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>