<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>