<p>daniel has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/21040">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: Send NSVC representation in NS_AFF_CAUSE_VC_* status indication<br><br>NS_AFF_CAUSE_VC_* failure and recovery should indicate the NSVC in<br>question. Use the string representation reported by gprs_ns2_ll_str()<br>for that.<br><br>NS_AFF_CAUSE_VC_RECOVERY was never sent so do that on unblock as well.<br><br>Change-Id: Iad6f0dc4565a46868cbbe17c361dcd473006c83d<br>Related: SYS#4998<br>---<br>M include/osmocom/gprs/gprs_ns2.h<br>M src/gb/gprs_ns2.c<br>M src/gb/gprs_ns2_internal.h<br>M src/gb/gprs_ns2_sns.c<br>M src/gb/gprs_ns2_vc_fsm.c<br>5 files changed, 18 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/40/21040/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gprs/gprs_ns2.h b/include/osmocom/gprs/gprs_ns2.h</span><br><span>index 728ca9f..c90d459 100644</span><br><span>--- a/include/osmocom/gprs/gprs_ns2.h</span><br><span>+++ b/include/osmocom/gprs/gprs_ns2.h</span><br><span>@@ -101,6 +101,7 @@</span><br><span>          } congestion;</span><br><span>                struct {</span><br><span>                     enum gprs_ns2_affecting_cause cause;</span><br><span style="color: hsl(120, 100%, 40%);">+                  char *nsvc;</span><br><span>                  /* 48.016 5.2.2.6 transfer capability */</span><br><span>                     int transfer;</span><br><span>                        /* osmocom specific */</span><br><span>diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c</span><br><span>index f86608f..20f9337 100644</span><br><span>--- a/src/gb/gprs_ns2.c</span><br><span>+++ b/src/gb/gprs_ns2.c</span><br><span>@@ -363,6 +363,7 @@</span><br><span>  *  \param[in] bvci BVCI to which the status relates</span><br><span>  *  \param[in] cause The cause of the status */</span><br><span> void ns2_prim_status_ind(struct gprs_ns2_nse *nse,</span><br><span style="color: hsl(120, 100%, 40%);">+                         struct gprs_ns2_vc *nsvc,</span><br><span>                    uint16_t bvci,</span><br><span>                       enum gprs_ns2_affecting_cause cause)</span><br><span> {</span><br><span>@@ -373,9 +374,14 @@</span><br><span>    nsp.u.status.transfer = -1;</span><br><span>  nsp.u.status.first = nse->first;</span><br><span>  nsp.u.status.persistent = nse->persistent;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (nsvc)</span><br><span style="color: hsl(120, 100%, 40%);">+             nsp.u.status.nsvc = gprs_ns2_ll_str_c(nse, nsvc);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  osmo_prim_init(&nsp.oph, SAP_NS, PRIM_NS_STATUS,</span><br><span>                         PRIM_OP_INDICATION, NULL);</span><br><span>   nse->nsi->cb(&nsp.oph, nse->nsi->cb_data);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (nsp.u.status.nsvc)</span><br><span style="color: hsl(120, 100%, 40%);">+                talloc_free(nsp.u.status.nsvc);</span><br><span> }</span><br><span> </span><br><span> /*! Allocate a NS-VC within the given bind + NSE.</span><br><span>@@ -430,7 +436,7 @@</span><br><span>  if (!nsvc)</span><br><span>           return;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     ns2_prim_status_ind(nsvc->nse, 0, NS_AFF_CAUSE_VC_FAILURE);</span><br><span style="color: hsl(120, 100%, 40%);">+        ns2_prim_status_ind(nsvc->nse, nsvc, 0, NS_AFF_CAUSE_VC_FAILURE);</span><br><span> </span><br><span>     llist_del(&nsvc->list);</span><br><span>       llist_del(&nsvc->blist);</span><br><span>@@ -608,7 +614,7 @@</span><br><span>                gprs_ns2_free_nsvc(nsvc);</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ns2_prim_status_ind(nse, 0, NS_AFF_CAUSE_FAILURE);</span><br><span style="color: hsl(120, 100%, 40%);">+    ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_FAILURE);</span><br><span> </span><br><span>         llist_del(&nse->list);</span><br><span>        if (nse->bss_sns_fi)</span><br><span>@@ -986,7 +992,7 @@</span><br><span>        if (unblocked) {</span><br><span>             /* this is the first unblocked NSVC on an unavailable NSE */</span><br><span>                 nse->alive = true;</span><br><span style="color: hsl(0, 100%, 40%);">-           ns2_prim_status_ind(nse, 0, NS_AFF_CAUSE_RECOVERY);</span><br><span style="color: hsl(120, 100%, 40%);">+           ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_RECOVERY);</span><br><span>            nse->first = false;</span><br><span>               return;</span><br><span>      }</span><br><span>@@ -1004,7 +1010,7 @@</span><br><span> </span><br><span>        /* nse became unavailable */</span><br><span>         nse->alive = false;</span><br><span style="color: hsl(0, 100%, 40%);">-  ns2_prim_status_ind(nse, 0, NS_AFF_CAUSE_FAILURE);</span><br><span style="color: hsl(120, 100%, 40%);">+    ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_FAILURE);</span><br><span> }</span><br><span> </span><br><span> /*! Create a new GPRS NS instance</span><br><span>diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h</span><br><span>index b480391..dee3ab7 100644</span><br><span>--- a/src/gb/gprs_ns2_internal.h</span><br><span>+++ b/src/gb/gprs_ns2_internal.h</span><br><span>@@ -221,6 +221,7 @@</span><br><span> </span><br><span> void gprs_ns2_sns_dump_vty(struct vty *vty, const struct gprs_ns2_nse *nse, bool stats);</span><br><span> void ns2_prim_status_ind(struct gprs_ns2_nse *nse,</span><br><span style="color: hsl(120, 100%, 40%);">+                        struct gprs_ns2_vc *nsvc,</span><br><span>                    uint16_t bvci,</span><br><span>                       enum gprs_ns2_affecting_cause cause);</span><br><span> void ns2_nse_notify_alive(struct gprs_ns2_vc *nsvc, bool alive);</span><br><span>diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c</span><br><span>index b2754f5..31f8a5f 100644</span><br><span>--- a/src/gb/gprs_ns2_sns.c</span><br><span>+++ b/src/gb/gprs_ns2_sns.c</span><br><span>@@ -686,7 +686,7 @@</span><br><span>    struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;</span><br><span> </span><br><span>        if (old_state != GPRS_SNS_ST_UNCONFIGURED)</span><br><span style="color: hsl(0, 100%, 40%);">-              ns2_prim_status_ind(gss->nse, 0, NS_AFF_CAUSE_SNS_FAILURE);</span><br><span style="color: hsl(120, 100%, 40%);">+                ns2_prim_status_ind(gss->nse, NULL, 0, NS_AFF_CAUSE_SNS_FAILURE);</span><br><span> </span><br><span>     if (gss->num_max_ip4_remote > 0)</span><br><span>               ns2_tx_sns_size(gss->sns_nsvc, true, gss->num_max_nsvcs, gss->num_max_ip4_remote, -1);</span><br><span>@@ -1126,7 +1126,7 @@</span><br><span> static void ns2_sns_st_configured_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span> {</span><br><span>      struct gprs_ns2_nse *nse = nse_inst_from_fi(fi);</span><br><span style="color: hsl(0, 100%, 40%);">-        ns2_prim_status_ind(nse, 0, NS_AFF_CAUSE_SNS_CONFIGURED);</span><br><span style="color: hsl(120, 100%, 40%);">+     ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_SNS_CONFIGURED);</span><br><span> }</span><br><span> </span><br><span> static const struct osmo_fsm_state ns2_sns_bss_states[] = {</span><br><span>diff --git a/src/gb/gprs_ns2_vc_fsm.c b/src/gb/gprs_ns2_vc_fsm.c</span><br><span>index 451437f..c6acdb2 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>@@ -318,8 +318,11 @@</span><br><span> static void gprs_ns2_st_unblocked_on_enter(struct osmo_fsm_inst *fi, uint32_t old_state)</span><br><span> {</span><br><span>         struct gprs_ns2_vc_priv *priv = fi->priv;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gprs_ns2_vc *nsvc = priv->nsvc;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gprs_ns2_nse *nse = nsvc->nse;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    ns2_nse_notify_unblocked(priv->nsvc, true);</span><br><span style="color: hsl(120, 100%, 40%);">+        ns2_nse_notify_unblocked(nsvc, true);</span><br><span style="color: hsl(120, 100%, 40%);">+ ns2_prim_status_ind(nse, nsvc, 0, NS_AFF_CAUSE_VC_RECOVERY);</span><br><span> }</span><br><span> </span><br><span> static void gprs_ns2_st_unblocked(struct osmo_fsm_inst *fi, uint32_t event, void *data)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/21040">change 21040</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/+/21040"/><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: Iad6f0dc4565a46868cbbe17c361dcd473006c83d </div>
<div style="display:none"> Gerrit-Change-Number: 21040 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>