<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/25562">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: message: allow to pass a foreign NSVCI to STATUS PDU<br><br>To answer correct on a BLOCK PDU with a different NSVCI, the<br>STATUS PDU needs also a NSVCI parameter.<br><br>Change-Id: I373eb48697097cdfa45748a091c11f7b3f0345fa<br>---<br>M src/gb/gprs_ns2.c<br>M src/gb/gprs_ns2_internal.h<br>M src/gb/gprs_ns2_message.c<br>M src/gb/gprs_ns2_vc_fsm.c<br>4 files changed, 12 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c</span><br><span>index 6bccf65..3bb04ae 100644</span><br><span>--- a/src/gb/gprs_ns2.c</span><br><span>+++ b/src/gb/gprs_ns2.c</span><br><span>@@ -1356,7 +1356,7 @@</span><br><span>            if (rc < 0) {</span><br><span>                     LOGP(DLNS, LOGL_NOTICE, "Error during TLV Parse\n");</span><br><span>                       if (nsh->pdu_type != NS_PDUT_STATUS)</span><br><span style="color: hsl(0, 100%, 40%);">-                         ns2_tx_status(nsvc, NS_CAUSE_PROTO_ERR_UNSPEC, 0, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                               ns2_tx_status(nsvc, NS_CAUSE_PROTO_ERR_UNSPEC, 0, msg, NULL);</span><br><span>                        return rc;</span><br><span>           }</span><br><span>            return ns2_vc_rx(nsvc, msg, &tp);</span><br><span>diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h</span><br><span>index a5d78d4..0959d2b 100644</span><br><span>--- a/src/gb/gprs_ns2_internal.h</span><br><span>+++ b/src/gb/gprs_ns2_internal.h</span><br><span>@@ -439,7 +439,7 @@</span><br><span>                  struct msgb *msg);</span><br><span> </span><br><span> int ns2_tx_status(struct gprs_ns2_vc *nsvc, uint8_t cause,</span><br><span style="color: hsl(0, 100%, 40%);">-                      uint16_t bvci, struct msgb *orig_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+           uint16_t bvci, struct msgb *orig_msg, uint16_t *nsvci);</span><br><span> </span><br><span> /* driver */</span><br><span> struct gprs_ns2_vc *ns2_ip_bind_connect(struct gprs_ns2_vc_bind *bind,</span><br><span>diff --git a/src/gb/gprs_ns2_message.c b/src/gb/gprs_ns2_message.c</span><br><span>index de30470..cc95334 100644</span><br><span>--- a/src/gb/gprs_ns2_message.c</span><br><span>+++ b/src/gb/gprs_ns2_message.c</span><br><span>@@ -432,13 +432,14 @@</span><br><span>  *  \param[in] cause Numeric NS cause value</span><br><span>  *  \param[in] bvci BVCI to be reset within NSVC</span><br><span>  *  \param[in] orig_msg message causing the STATUS</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsvci if given this NSVCI will be encoded. If NULL the nsvc->nsvci will be used.</span><br><span>  *  \returns 0 in case of success */</span><br><span> int ns2_tx_status(struct gprs_ns2_vc *nsvc, uint8_t cause,</span><br><span style="color: hsl(0, 100%, 40%);">-                    uint16_t bvci, struct msgb *orig_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+            uint16_t bvci, struct msgb *orig_msg, uint16_t *nsvci)</span><br><span> {</span><br><span>        struct msgb *msg = ns2_msgb_alloc();</span><br><span>         struct gprs_ns_hdr *nsh;</span><br><span style="color: hsl(0, 100%, 40%);">-        uint16_t nsvci = osmo_htons(nsvc->nsvci);</span><br><span style="color: hsl(120, 100%, 40%);">+  uint16_t encoded_nsvci;</span><br><span>      unsigned int orig_len, max_orig_len;</span><br><span> </span><br><span>     log_set_context(LOG_CTX_GB_NSE, nsvc->nse);</span><br><span>@@ -459,7 +460,11 @@</span><br><span>        case NS_CAUSE_NSVC_BLOCKED:</span><br><span>  case NS_CAUSE_NSVC_UNKNOWN:</span><br><span>          /* Section 9.2.7.1: Static conditions for NS-VCI */</span><br><span style="color: hsl(0, 100%, 40%);">-             msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *)&nsvci);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (nsvci)</span><br><span style="color: hsl(120, 100%, 40%);">+                    encoded_nsvci = osmo_htons(*nsvci);</span><br><span style="color: hsl(120, 100%, 40%);">+           else</span><br><span style="color: hsl(120, 100%, 40%);">+                  encoded_nsvci = osmo_htons(nsvc->nsvci);</span><br><span style="color: hsl(120, 100%, 40%);">+           msgb_tvlv_put(msg, NS_IE_VCI, 2, (uint8_t *)&encoded_nsvci);</span><br><span>             break;</span><br><span>       case NS_CAUSE_SEM_INCORR_PDU:</span><br><span>        case NS_CAUSE_PDU_INCOMP_PSTATE:</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 d09c31a..1a632b1 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>@@ -679,7 +679,7 @@</span><br><span> </span><br><span>                      ns2_tx_status(priv->nsvc,</span><br><span>                                       NS_CAUSE_NSVC_BLOCKED,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  0, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      0, msg, NULL);</span><br><span>                         break;</span><br><span>               /* ALIVE can receive UNITDATA if the ALIVE_ACK is lost */</span><br><span>            case GPRS_NS2_ST_RECOVERING:</span><br><span>@@ -863,7 +863,7 @@</span><br><span>   if (ns2_validate(nsvc, nsh->pdu_type, msg, tp, &cause)) {</span><br><span>             /* don't answer on a STATUS with a STATUS */</span><br><span>             if (nsh->pdu_type != NS_PDUT_STATUS) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       rc = ns2_tx_status(nsvc, cause, 0, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+                      rc = ns2_tx_status(nsvc, cause, 0, msg, NULL);</span><br><span>                       goto out;</span><br><span>            }</span><br><span>    }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/25562">change 25562</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/+/25562"/><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: I373eb48697097cdfa45748a091c11f7b3f0345fa </div>
<div style="display:none"> Gerrit-Change-Number: 25562 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>