<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22946">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: gprs_bssgp: add remaining stuff for PCU to react on SGSN originated BSSGP-RESET<br><br>Change-Id: I3afaf826798e362270ffa622c24bfd124ef25cd1<br>---<br>M src/gprs_bssgp_pcu.c<br>1 file changed, 43 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/46/22946/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gprs_bssgp_pcu.c b/src/gprs_bssgp_pcu.c</span><br><span>index a6b6f7e..ff37451 100644</span><br><span>--- a/src/gprs_bssgp_pcu.c</span><br><span>+++ b/src/gprs_bssgp_pcu.c</span><br><span>@@ -418,6 +418,7 @@</span><br><span>       uint16_t ns_bvci = msgb_bvci(msg), nsei = msgb_nsei(msg);</span><br><span>    int data_len;</span><br><span>        int rc = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   uint16_t bvci;</span><br><span>       struct bssgp_bvc_ctx *bctx;</span><br><span> </span><br><span>      switch (pdu_type) {</span><br><span>@@ -461,14 +462,12 @@</span><br><span>          if (ns_bvci != BVCI_SIGNALLING)</span><br><span>                      return rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-          if (TLVP_PRES_LEN(&tp, BSSGP_IE_CAUSE, 1))</span><br><span style="color: hsl(0, 100%, 40%);">-                  cause = (enum gprs_bssgp_cause)*TLVP_VAL(&tp, BSSGP_IE_CAUSE);</span><br><span style="color: hsl(0, 100%, 40%);">-              else</span><br><span style="color: hsl(120, 100%, 40%);">+          if (TLVP_PRES_LEN(&tp, BSSGP_IE_BVCI, 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       bvci = osmo_ntohs(tlvp_val16_unal(&tp, BSSGP_IE_BVCI));</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span>                     LOGP(DBSSGP, LOGL_ERROR, "NSEI=%u BVC RESET without cause?!\n", nsei);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                rc = bssgp_tx_bvc_ptp_reset(nsei, cause);</span><br><span style="color: hsl(0, 100%, 40%);">-               if (rc < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-                  LOGP(DBSSGP, LOGL_ERROR, "NSEI=%u BVC PTP reset procedure failed: %d\n", nsei, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+                 return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span> </span><br><span>                return rc;</span><br><span>   }</span><br><span>@@ -558,12 +557,47 @@</span><br><span> int bssgp_prim_cb(struct osmo_prim_hdr *oph, void *ctx)</span><br><span> {</span><br><span>    struct osmo_bssgp_prim *bp;</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       enum gprs_bssgp_cause cause;</span><br><span>         bp = container_of(oph, struct osmo_bssgp_prim, oph);</span><br><span> </span><br><span>     switch (oph->sap) {</span><br><span>       case SAP_BSSGP_NM:</span><br><span style="color: hsl(0, 100%, 40%);">-              if (oph->primitive == PRIM_NM_STATUS)</span><br><span style="color: hsl(120, 100%, 40%);">+              switch (oph->primitive) {</span><br><span style="color: hsl(120, 100%, 40%);">+          case PRIM_NM_STATUS:</span><br><span>                         handle_nm_status(bp);</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case PRIM_NM_BVC_RESET:</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* received a BVC PTP reset */</span><br><span style="color: hsl(120, 100%, 40%);">+                        LOGP(DPCU, LOGL_ERROR, "PRIM: rx BVC_RESET on bvci %d\n", bp->bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGP(DPCU, LOGL_ERROR, "PRIM: flags %d %d %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                         the_pcu->bssgp.bvc_sig_reset,</span><br><span style="color: hsl(120, 100%, 40%);">+                      the_pcu->bssgp.bvc_reset,</span><br><span style="color: hsl(120, 100%, 40%);">+                          the_pcu->bssgp.bvc_unblocked);</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* Rx Reset from SGSN */</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (bp->bvci == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               if (TLVP_PRES_LEN(bp->tp, BSSGP_IE_CAUSE, 1))</span><br><span style="color: hsl(120, 100%, 40%);">+                                      cause = (enum gprs_bssgp_cause)*TLVP_VAL(bp->tp, BSSGP_IE_CAUSE);</span><br><span style="color: hsl(120, 100%, 40%);">+                          else {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        LOGP(DBSSGP, LOGL_ERROR, "NSEI=%u BVC RESET without cause?!\n", bp->nsei);</span><br><span style="color: hsl(120, 100%, 40%);">+                                       break;</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%);">+                           rc = bssgp_tx_bvc_ptp_reset(bp->nsei, cause);</span><br><span style="color: hsl(120, 100%, 40%);">+                              if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      LOGP(DBSSGP, LOGL_ERROR, "NSEI=%u BVC PTP reset procedure failed: %d\n", bp->nsei, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+                                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                                }</span><br><span style="color: hsl(120, 100%, 40%);">+                             the_pcu->bssgp.bvc_sig_reset = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                          the_pcu->bssgp.bvc_reset = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                              the_pcu->bssgp.bvc_unblocked = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                  } else if (bp->bvci == the_pcu->bssgp.bctx->bvci) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          the_pcu->bssgp.bvc_reset = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                              the_pcu->bssgp.bvc_unblocked = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                          bvc_timeout(NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>            break;</span><br><span>       case SAP_BSSGP_RIM:</span><br><span>          return handle_rim(bp);</span><br><span>@@ -1161,6 +1195,7 @@</span><br><span>               the_pcu->bssgp.bts->nse = NULL;</span><br><span>                return NULL;</span><br><span>         }</span><br><span style="color: hsl(120, 100%, 40%);">+     the_pcu->bssgp.bctx->is_sgsn = false;</span><br><span>  the_pcu->bssgp.bctx->ra_id.mcc = spoof_mcc ? : mcc;</span><br><span>    if (spoof_mnc) {</span><br><span>             the_pcu->bssgp.bctx->ra_id.mnc = spoof_mnc;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/22946">change 22946</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-pcu/+/22946"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3afaf826798e362270ffa622c24bfd124ef25cd1 </div>
<div style="display:none"> Gerrit-Change-Number: 22946 </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>