<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/24922">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gprs_ns2: ensure the NSE becomes dead when FR link went down<br><br>The FR code is using force unconfigured to change the state of the NSVC<br>when the FR link goes down. The force unconfigured state didn't<br>notified the NSE when changing into this state.<br><br>Related: SYS#5533<br>Change-Id: I4d7bbbbce26f7cde99eebe96995c50b1e812e5bd<br>---<br>M src/gb/gprs_ns2_vc_fsm.c<br>M tests/gb/gprs_ns2_test.c<br>M tests/gb/gprs_ns2_test.ok<br>3 files changed, 62 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/22/24922/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2_vc_fsm.c b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>index 05118b2..1f680f4 100644</span><br><span>--- a/src/gb/gprs_ns2_vc_fsm.c</span><br><span>+++ b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>@@ -254,7 +254,10 @@</span><br><span> </span><br><span> static void ns2_st_unconfigured_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gprs_ns2_vc_priv *priv = fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       stop_test_procedure(fi->priv);</span><br><span style="color: hsl(120, 100%, 40%);">+     ns2_nse_notify_unblocked(priv->nsvc, false);</span><br><span> }</span><br><span> </span><br><span> static void ns2_st_unconfigured(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span>diff --git a/tests/gb/gprs_ns2_test.c b/tests/gb/gprs_ns2_test.c</span><br><span>index b96e739..e4756d2 100644</span><br><span>--- a/tests/gb/gprs_ns2_test.c</span><br><span>+++ b/tests/gb/gprs_ns2_test.c</span><br><span>@@ -592,6 +592,57 @@</span><br><span>        printf("--- Finish unitdata test\n");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void test_unconfigured(void *ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gprs_ns2_inst *nsi;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gprs_ns2_vc_bind *bind[2];</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gprs_ns2_vc_bind *loopbind;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gprs_ns2_nse *nse;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gprs_ns2_vc *nsvc[2];</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gprs_ns2_vc *loop[2];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        struct msgb *msg, *other;</span><br><span style="color: hsl(120, 100%, 40%);">+     char idbuf[32];</span><br><span style="color: hsl(120, 100%, 40%);">+       int i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("--- Testing force unconfigured\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_wqueue_clear(unitdata);</span><br><span style="color: hsl(120, 100%, 40%);">+  printf("---- Create NSE + Binds\n");</span><br><span style="color: hsl(120, 100%, 40%);">+        nsi = gprs_ns2_instantiate(ctx, ns_prim_cb, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    bind[0] = dummy_bind(nsi, "bblock1");</span><br><span style="color: hsl(120, 100%, 40%);">+       bind[1] = dummy_bind(nsi, "bblock2");</span><br><span style="color: hsl(120, 100%, 40%);">+       loopbind = loopback_bind(nsi, "loopback");</span><br><span style="color: hsl(120, 100%, 40%);">+  nse = gprs_ns2_create_nse(nsi, 1004, GPRS_NS2_LL_UDP, GPRS_NS2_DIALECT_STATIC_RESETBLOCK);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(nse);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   for (i=0; i<2; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+              printf("---- Create NSVC[%d]\n", i);</span><br><span style="color: hsl(120, 100%, 40%);">+                snprintf(idbuf, sizeof(idbuf), "NSE%05u-dummy-%i", nse->nsei, i);</span><br><span style="color: hsl(120, 100%, 40%);">+                nsvc[i] = ns2_vc_alloc(bind[i], nse, false, GPRS_NS2_VC_MODE_BLOCKRESET, idbuf);</span><br><span style="color: hsl(120, 100%, 40%);">+              loop[i] = loopback_nsvc(loopbind, nsvc[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+           OSMO_ASSERT(nsvc[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+         ns2_vc_fsm_start(nsvc[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+            OSMO_ASSERT(!ns2_vc_is_unblocked(nsvc[i]));</span><br><span style="color: hsl(120, 100%, 40%);">+           ns2_tx_reset(loop[i], NS_CAUSE_OM_INTERVENTION);</span><br><span style="color: hsl(120, 100%, 40%);">+              ns2_tx_unblock(loop[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+              OSMO_ASSERT(ns2_vc_is_unblocked(nsvc[i]));</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%);">+   /* both nsvcs are unblocked and alive */</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("---- Check if NSE should be alive\n");</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(nse->alive);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ns2_vc_force_unconfigured(nsvc[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(nse->alive);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ns2_vc_force_unconfigured(nsvc[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("---- Check if NSE should be dead\n");</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(!nse->alive);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        gprs_ns2_free(nsi);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("--- Finish force unconfigured test\n");</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>       void *ctx = talloc_named_const(NULL, 0, "gprs_ns2_test");</span><br><span>@@ -611,6 +662,7 @@</span><br><span>    test_block_unblock_nsvc2(ctx);</span><br><span>       test_unitdata(ctx);</span><br><span>  test_unitdata_weights(ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+   test_unconfigured(ctx);</span><br><span>      test_mtu(ctx);</span><br><span>       printf("===== NS2 protocol test END\n\n");</span><br><span> </span><br><span>diff --git a/tests/gb/gprs_ns2_test.ok b/tests/gb/gprs_ns2_test.ok</span><br><span>index 148b6a4..8bae5b9 100644</span><br><span>--- a/tests/gb/gprs_ns2_test.ok</span><br><span>+++ b/tests/gb/gprs_ns2_test.ok</span><br><span>@@ -33,6 +33,13 @@</span><br><span> ---- Send UNITDATA to all NSVCs</span><br><span> ---- Send BSSGP data to the NSE to test unitdata over NSVC[1]</span><br><span> --- Finish unitdata weight test</span><br><span style="color: hsl(120, 100%, 40%);">+--- Testing force unconfigured</span><br><span style="color: hsl(120, 100%, 40%);">+---- Create NSE + Binds</span><br><span style="color: hsl(120, 100%, 40%);">+---- Create NSVC[0]</span><br><span style="color: hsl(120, 100%, 40%);">+---- Create NSVC[1]</span><br><span style="color: hsl(120, 100%, 40%);">+---- Check if NSE should be alive</span><br><span style="color: hsl(120, 100%, 40%);">+---- Check if NSE should be dead</span><br><span style="color: hsl(120, 100%, 40%);">+--- Finish force unconfigured test</span><br><span> --- Testing mtu test</span><br><span> ---- Create NSE + Binds</span><br><span> ---- Create NSVC[0]</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/24922">change 24922</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/libosmocore/+/24922"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4d7bbbbce26f7cde99eebe96995c50b1e812e5bd </div>
<div style="display:none"> Gerrit-Change-Number: 24922 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>