<p>daniel <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/20958">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;">libosmogb: Add a function to tx BVC RESET by nsei/bvci<br><br>This is needed for osmo-gbproxy where we need more control over BSSGP.<br><br>Related: SYS#4998<br>Change-Id: Ifa769bce920a08cf93553dcb164a3fcf50162517<br>---<br>M include/osmocom/gprs/gprs_bssgp.h<br>M src/gb/gprs_bssgp.c<br>M src/gb/gprs_bssgp_bss.c<br>M src/gb/libosmogb.map<br>4 files changed, 40 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gprs/gprs_bssgp.h b/include/osmocom/gprs/gprs_bssgp.h</span><br><span>index b9d251c..5b45ea6 100644</span><br><span>--- a/include/osmocom/gprs/gprs_bssgp.h</span><br><span>+++ b/include/osmocom/gprs/gprs_bssgp.h</span><br><span>@@ -20,6 +20,7 @@</span><br><span> struct msgb *bssgp_msgb_copy(const struct msgb *msg, const char *name);</span><br><span> const char *bssgp_cause_str(enum gprs_bssgp_cause cause);</span><br><span> const char *bssgp_pdu_str(enum bssgp_pdu_type pdu);</span><br><span style="color: hsl(120, 100%, 40%);">+int bssgp_tx_bvc_reset_nsei_bvci(uint16_t nsei, uint16_t bvci, enum gprs_bssgp_cause cause, const struct gprs_ra_id *ra_id, uint16_t cell_id);</span><br><span> /* Transmit a simple response such as BLOCK/UNBLOCK/RESET ACK/NACK */</span><br><span> int bssgp_tx_simple_bvci(uint8_t pdu_type, uint16_t nsei,</span><br><span>                        uint16_t bvci, uint16_t ns_bvci);</span><br><span>diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c</span><br><span>index 8b8d534..ebbfab1 100644</span><br><span>--- a/src/gb/gprs_bssgp.c</span><br><span>+++ b/src/gb/gprs_bssgp.c</span><br><span>@@ -41,6 +41,7 @@</span><br><span> #include <osmocom/gprs/gprs_ns.h></span><br><span> </span><br><span> #include "common_vty.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include "osmocom/gsm/gsm48.h"</span><br><span> </span><br><span> void *bssgp_tall_ctx = NULL;</span><br><span> </span><br><span>@@ -92,6 +93,39 @@</span><br><span>   return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Transmit a BVC-RESET message with a given nsei and bvci (Chapter 10.4.12)</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei The NSEI to transmit over</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bvci BVCI of the BVC to reset</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cause The cause of the reset</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ra_id Pointer to the ra_id to include. If NULL no cell information will be included</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cell_id The cell_id to include (if ra_id is not NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int bssgp_tx_bvc_reset_nsei_bvci(uint16_t nsei, uint16_t bvci, enum gprs_bssgp_cause cause, const struct gprs_ra_id *ra_id, uint16_t cell_id)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       struct msgb *msg = bssgp_msgb_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+        struct bssgp_normal_hdr *bgph =</span><br><span style="color: hsl(120, 100%, 40%);">+               (struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));</span><br><span style="color: hsl(120, 100%, 40%);">+     uint16_t _bvci = osmo_htons(bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  msgb_nsei(msg) = nsei;</span><br><span style="color: hsl(120, 100%, 40%);">+        msgb_bvci(msg) = 0; /* Signalling */</span><br><span style="color: hsl(120, 100%, 40%);">+  bgph->pdu_type = BSSGP_PDUT_BVC_RESET;</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-RESET "</span><br><span style="color: hsl(120, 100%, 40%);">+           "CAUSE=%s\n", bvci, bssgp_cause_str(cause));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      msgb_tvlv_put(msg, BSSGP_IE_BVCI, 2, (uint8_t *) &_bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_tvlv_put(msg, BSSGP_IE_CAUSE, 1, (uint8_t *) &cause);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (ra_id) {</span><br><span style="color: hsl(120, 100%, 40%);">+          uint8_t bssgp_cid[8];</span><br><span style="color: hsl(120, 100%, 40%);">+         bssgp_create_cell_id(bssgp_cid, ra_id, cell_id);</span><br><span style="color: hsl(120, 100%, 40%);">+              msgb_tvlv_put(msg, BSSGP_IE_CELL_ID, sizeof(bssgp_cid), bssgp_cid);</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%);">+   /* Optional: Feature Bitmap */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return bssgp_ns_send(bssgp_ns_send_data, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Initiate reset procedure for all PTP BVC on a given NSEI.</span><br><span>  *</span><br><span>  *  This function initiates reset procedure for all PTP BVC with a given cause.</span><br><span>diff --git a/src/gb/gprs_bssgp_bss.c b/src/gb/gprs_bssgp_bss.c</span><br><span>index d1734ee..59b06f0 100644</span><br><span>--- a/src/gb/gprs_bssgp_bss.c</span><br><span>+++ b/src/gb/gprs_bssgp_bss.c</span><br><span>@@ -293,28 +293,10 @@</span><br><span> /*! Transmit a BVC-RESET message (Chapter 10.4.12) */</span><br><span> int bssgp_tx_bvc_reset2(struct bssgp_bvc_ctx *bctx, uint16_t bvci, uint8_t cause, bool add_cell_id)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     struct msgb *msg = bssgp_msgb_alloc();</span><br><span style="color: hsl(0, 100%, 40%);">-  struct bssgp_normal_hdr *bgph =</span><br><span style="color: hsl(0, 100%, 40%);">-                 (struct bssgp_normal_hdr *) msgb_put(msg, sizeof(*bgph));</span><br><span style="color: hsl(0, 100%, 40%);">-       uint16_t _bvci = osmo_htons(bvci);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-RESET "</span><br><span style="color: hsl(0, 100%, 40%);">-             "CAUSE=%s\n", bvci, bssgp_cause_str(cause));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  msgb_nsei(msg) = bctx->nsei;</span><br><span style="color: hsl(0, 100%, 40%);">- msgb_bvci(msg) = 0; /* Signalling */</span><br><span style="color: hsl(0, 100%, 40%);">-    bgph->pdu_type = BSSGP_PDUT_BVC_RESET;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       msgb_tvlv_put(msg, BSSGP_IE_BVCI, 2, (uint8_t *) &_bvci);</span><br><span style="color: hsl(0, 100%, 40%);">-   msgb_tvlv_put(msg, BSSGP_IE_CAUSE, 1, &cause);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (add_cell_id) {</span><br><span style="color: hsl(0, 100%, 40%);">-              uint8_t bssgp_cid[8];</span><br><span style="color: hsl(0, 100%, 40%);">-           bssgp_create_cell_id(bssgp_cid, &bctx->ra_id, bctx->cell_id);</span><br><span style="color: hsl(0, 100%, 40%);">-         msgb_tvlv_put(msg, BSSGP_IE_CELL_ID, sizeof(bssgp_cid), bssgp_cid);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Optional: Feature Bitmap */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return bssgp_ns_send(bssgp_ns_send_data, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (add_cell_id)</span><br><span style="color: hsl(120, 100%, 40%);">+              return bssgp_tx_bvc_reset_nsei_bvci(bctx->nsei, bvci, cause, &bctx->ra_id, bctx->cell_id);</span><br><span style="color: hsl(120, 100%, 40%);">+       else</span><br><span style="color: hsl(120, 100%, 40%);">+          return bssgp_tx_bvc_reset_nsei_bvci(bctx->nsei, bvci, cause, NULL, 0);</span><br><span> }</span><br><span> int bssgp_tx_bvc_reset(struct bssgp_bvc_ctx *bctx, uint16_t bvci, uint8_t cause)</span><br><span> {</span><br><span>diff --git a/src/gb/libosmogb.map b/src/gb/libosmogb.map</span><br><span>index 3755b4f..2ef12bc 100644</span><br><span>--- a/src/gb/libosmogb.map</span><br><span>+++ b/src/gb/libosmogb.map</span><br><span>@@ -17,6 +17,7 @@</span><br><span> bssgp_tx_bvc_block;</span><br><span> bssgp_tx_bvc_reset;</span><br><span> bssgp_tx_bvc_reset2;</span><br><span style="color: hsl(120, 100%, 40%);">+bssgp_tx_bvc_reset_nsei_bvci;</span><br><span> bssgp_tx_bvc_unblock;</span><br><span> bssgp_tx_fc_bvc;</span><br><span> bssgp_tx_fc_ms;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/20958">change 20958</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/+/20958"/><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: Ifa769bce920a08cf93553dcb164a3fcf50162517 </div>
<div style="display:none"> Gerrit-Change-Number: 20958 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>