<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/21476">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Send BVC-BLOCK for PTP BVC to SGSN when BSS resets BVCI=0<br><br>We cannot pass the RESET of BVCI=0 on to the SGSN, as this would affect<br>all other NSE/BSS, too.  Instead, we block the corresponding PTP BVC.<br><br>The BSS is expected to trigger a RESET of the PTP BVC shortly after<br>completing the BVCI=0 RESET, which will then also unblock those PTP BVC<br>again.<br><br>Change-Id: I48f1c148bc5c7c9a49b789dac78f76c2aa7baff8<br>---<br>M src/gbproxy/gb_proxy.c<br>M src/gbproxy/gb_proxy_peer.c<br>2 files changed, 24 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/76/21476/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gbproxy/gb_proxy.c b/src/gbproxy/gb_proxy.c</span><br><span>index d8b828c..2c63614 100644</span><br><span>--- a/src/gbproxy/gb_proxy.c</span><br><span>+++ b/src/gbproxy/gb_proxy.c</span><br><span>@@ -1015,13 +1015,18 @@</span><br><span> {</span><br><span>       struct gbproxy_peer *from_peer = NULL;</span><br><span>       uint16_t bvci;</span><br><span style="color: hsl(120, 100%, 40%);">+        uint8_t cause;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      if (!TLVP_PRESENT(tp, BSSGP_IE_BVCI))</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!TLVP_PRESENT(tp, BSSGP_IE_BVCI) || !TLVP_PRESENT(tp, BSSGP_IE_CAUSE))</span><br><span>           return 0;</span><br><span> </span><br><span>        bvci = ntohs(tlvp_val16_unal(tp, BSSGP_IE_BVCI));</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGP(DGPRS, LOGL_INFO, "NSE(%05u) Rx BVC RESET (BVCI=%05u)\n", nsei, bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+ cause = *TLVP_VAL(tp, BSSGP_IE_CAUSE);</span><br><span style="color: hsl(120, 100%, 40%);">+        LOGP(DGPRS, LOGL_INFO, "NSE(%05u) Rx BVC RESET (BVCI=%05u, cause=%s)\n", nsei, bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+             bssgp_cause_str(cause));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      if (bvci == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              struct gbproxy_peer *peer;</span><br><span>           /* If we receive a BVC reset on the signalling endpoint, we</span><br><span>           * don't want the SGSN to reset, as the signalling endpoint</span><br><span>               * is common for all point-to-point BVCs (and thus all BTS) */</span><br><span>@@ -1034,6 +1039,19 @@</span><br><span>                      return 0;</span><br><span>            }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+         /* BLOCK all the unblocked PTP BVC of this BSS-side NSE towards the SGSN */</span><br><span style="color: hsl(120, 100%, 40%);">+           llist_for_each_entry(peer, &nse->bts_peers, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    struct bssgp_bvc_ctx bctx = {</span><br><span style="color: hsl(120, 100%, 40%);">+                         .nsei = cfg->nsip_sgsn_nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+                               .bvci = peer->bvci,</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%);">+                  if (peer->blocked)</span><br><span style="color: hsl(120, 100%, 40%);">+                         continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   bssgp_tx_bvc_block(&bctx, cause);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          gbproxy_cleanup_peers(cfg, nsei, 0);</span><br><span> </span><br><span>             /* FIXME: only do this if SGSN is alive! */</span><br><span>diff --git a/src/gbproxy/gb_proxy_peer.c b/src/gbproxy/gb_proxy_peer.c</span><br><span>index 62c4d94..c95a572 100644</span><br><span>--- a/src/gbproxy/gb_proxy_peer.c</span><br><span>+++ b/src/gbproxy/gb_proxy_peer.c</span><br><span>@@ -260,6 +260,10 @@</span><br><span>  peer->nse = nse;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! remove peers (BVCs) withon NSE specified by NSEI.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] cfg proxy in which we operate</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] nsei NS entity in which we should clean up</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bvci if 0: remove all BVCs; if != 0: BVCI of the single BVC to clean up */</span><br><span> int gbproxy_cleanup_peers(struct gbproxy_config *cfg, uint16_t nsei, uint16_t bvci)</span><br><span> {</span><br><span>  int counter = 0;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/21476">change 21476</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/osmo-sgsn/+/21476"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I48f1c148bc5c7c9a49b789dac78f76c2aa7baff8 </div>
<div style="display:none"> Gerrit-Change-Number: 21476 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>