<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/24683">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gprs_ns2: fix missing notify towards the NSE when NSVC become blocked<br><br>The NSE wasn't notified when a NSVC went into the BLOCKED state from<br>an UNBLOCKED state.<br><br>Related: OS#5182<br>Change-Id: I09634e414e9bb966e6b5809b7de1b59fbabd413d<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, 73 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/83/24683/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 341a5a1..70258cc 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>@@ -338,6 +338,7 @@</span><br><span>               rate_ctr_inc(rate_ctr_group_get_ctr(priv->nsvc->ctrg, NS_CTR_BLOCKED));</span><br><span>        }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ ns2_nse_notify_unblocked(priv->nsvc, false);</span><br><span>      if (priv->om_blocked) {</span><br><span>           /* we are already blocked after a RESET */</span><br><span>           if (old_state == GPRS_NS2_ST_RESET) {</span><br><span>diff --git a/tests/gb/gprs_ns2_test.c b/tests/gb/gprs_ns2_test.c</span><br><span>index cc1b2f1..c53cc6d 100644</span><br><span>--- a/tests/gb/gprs_ns2_test.c</span><br><span>+++ b/tests/gb/gprs_ns2_test.c</span><br><span>@@ -302,6 +302,72 @@</span><br><span>    printf("--- Finish NSE block unblock nsvc\n");</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* setup NSE with 2x NSVCs.</span><br><span style="color: hsl(120, 100%, 40%);">+ * block 1st NSVC</span><br><span style="color: hsl(120, 100%, 40%);">+ * block 2nd NSVC</span><br><span style="color: hsl(120, 100%, 40%);">+ * unblock 1st NSVC */</span><br><span style="color: hsl(120, 100%, 40%);">+void test_block_unblock_nsvc2(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_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_ns_hdr *nsh;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct msgb *msg;</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 NSE block unblock nsvc2\n");</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%);">+       nse = gprs_ns2_create_nse(nsi, 1001, 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[i]\n");</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%);">+              OSMO_ASSERT(nsvc[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+         nsvc[i]->fi->state = 3;   /* HACK: 3 = GPRS_NS2_ST_UNBLOCKED */</span><br><span style="color: hsl(120, 100%, 40%);">+         /* ensure the fi->state works correct */</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_nse_notify_unblocked(nsvc[i], true);</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%);">+   OSMO_ASSERT(nse->alive);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* both nsvcs are unblocked and alive. Let's block them. */</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(!find_pdu(bind[0], NS_PDUT_BLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+       clear_pdus(bind[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+  ns2_vc_block(nsvc[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(find_pdu(bind[0], NS_PDUT_BLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+        clear_pdus(bind[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%);">+ OSMO_ASSERT(!find_pdu(bind[1], NS_PDUT_BLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+       clear_pdus(bind[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+  ns2_vc_block(nsvc[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_ASSERT(find_pdu(bind[1], NS_PDUT_BLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+        clear_pdus(bind[1]);</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%);">+        /* now unblocking the 1st NSVC */</span><br><span style="color: hsl(120, 100%, 40%);">+     ns2_vc_unblock(nsvc[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(find_pdu(bind[0], NS_PDUT_UNBLOCK));</span><br><span style="color: hsl(120, 100%, 40%);">+      clear_pdus(bind[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+  msg = msgb_alloc_headroom(NS_ALLOC_SIZE, NS_ALLOC_HEADROOM, "test_unblock");</span><br><span style="color: hsl(120, 100%, 40%);">+        msg->l2h = msgb_put(msg, sizeof(*nsh));</span><br><span style="color: hsl(120, 100%, 40%);">+    nsh = (struct gprs_ns_hdr *) msg->l2h;</span><br><span style="color: hsl(120, 100%, 40%);">+     nsh->pdu_type = NS_PDUT_UNBLOCK_ACK;</span><br><span style="color: hsl(120, 100%, 40%);">+       ns2_recv_vc(nsvc[0], msg);</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%);">+ OSMO_ASSERT(ns2_vc_is_unblocked(nsvc[0]));</span><br><span style="color: hsl(120, 100%, 40%);">+    gprs_ns2_free(nsi);</span><br><span style="color: hsl(120, 100%, 40%);">+   printf("--- Finish NSE block unblock nsvc2\n");</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct msgb *generate_unitdata(const char *msgname)</span><br><span> {</span><br><span>    struct gprs_ns_hdr *nsh;</span><br><span>@@ -533,6 +599,7 @@</span><br><span>       printf("===== NS2 protocol test START\n");</span><br><span>         test_nse_transfer_cap(ctx);</span><br><span>  test_block_unblock_nsvc(ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+ test_block_unblock_nsvc2(ctx);</span><br><span>       test_unitdata(ctx);</span><br><span>  test_unitdata_weights(ctx);</span><br><span>  test_mtu(ctx);</span><br><span>diff --git a/tests/gb/gprs_ns2_test.ok b/tests/gb/gprs_ns2_test.ok</span><br><span>index 40a1528..148b6a4 100644</span><br><span>--- a/tests/gb/gprs_ns2_test.ok</span><br><span>+++ b/tests/gb/gprs_ns2_test.ok</span><br><span>@@ -11,6 +11,11 @@</span><br><span> ---- Create NSVC[i]</span><br><span> ---- Create NSVC[i]</span><br><span> --- Finish NSE block unblock nsvc</span><br><span style="color: hsl(120, 100%, 40%);">+--- Testing NSE block unblock nsvc2</span><br><span style="color: hsl(120, 100%, 40%);">+---- Create NSE + Binds</span><br><span style="color: hsl(120, 100%, 40%);">+---- Create NSVC[i]</span><br><span style="color: hsl(120, 100%, 40%);">+---- Create NSVC[i]</span><br><span style="color: hsl(120, 100%, 40%);">+--- Finish NSE block unblock nsvc2</span><br><span> --- Testing unitdata 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/+/24683">change 24683</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/+/24683"/><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: I09634e414e9bb966e6b5809b7de1b59fbabd413d </div>
<div style="display:none"> Gerrit-Change-Number: 24683 </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>