<p>daniel has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gbproxy/+/24859">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Forward MS_REGISTR_ENQ/_RESP correctly<br><br>We need to save the BSS NSE <-> IMSI mapping to correctly route the<br>answer.<br><br>Related: OS#4472<br>Change-Id: I1908bbe8db11271dbd3f45b0d9f1bc0bfe48f239<br>---<br>M src/gb_proxy.c<br>1 file changed, 39 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gbproxy refs/changes/59/24859/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb_proxy.c b/src/gb_proxy.c</span><br><span>index 8c8faf7..a80e5a9 100644</span><br><span>--- a/src/gb_proxy.c</span><br><span>+++ b/src/gb_proxy.c</span><br><span>@@ -1114,6 +1114,26 @@</span><br><span>             rc = gbprox_relay2nse(msg, nse, 0);</span><br><span>          break;</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     case BSSGP_PDUT_MS_REGISTR_ENQ:</span><br><span style="color: hsl(120, 100%, 40%);">+       {</span><br><span style="color: hsl(120, 100%, 40%);">+             struct gbproxy_sgsn *sgsn;</span><br><span style="color: hsl(120, 100%, 40%);">+            struct osmo_mobile_identity mi;</span><br><span style="color: hsl(120, 100%, 40%);">+               const uint8_t *mi_data = TLVP_VAL(&tp[0], BSSGP_IE_IMSI);</span><br><span style="color: hsl(120, 100%, 40%);">+         uint8_t mi_len = TLVP_LEN(&tp[0], BSSGP_IE_IMSI);</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_mobile_identity_decode(&mi, mi_data, mi_len, false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               sgsn = gbproxy_select_sgsn(nse->cfg, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+                if (!sgsn) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGP(DGPRS, LOGL_ERROR, "Could not find any SGSN, dropping message!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                    rc = -EINVAL;</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%);">+           gbproxy_imsi_cache_update(nse, mi.imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            rc = gbprox_relay2nse(msg, sgsn->nse, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span>    default:</span><br><span>             LOGPNSE(nse, LOGL_ERROR, "Rx %s: Implementation missing\n", pdut_name);</span><br><span>            break;</span><br><span>@@ -1444,6 +1464,25 @@</span><br><span>      case BSSGP_PDUT_RAN_INFO_APP_ERROR:</span><br><span>          rc = gbprox_rx_rim_from_sgsn(tp, nse, msg, log_pfx, pdut_name);</span><br><span>              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case BSSGP_PDUT_MS_REGISTR_ENQ_RESP:</span><br><span style="color: hsl(120, 100%, 40%);">+  {</span><br><span style="color: hsl(120, 100%, 40%);">+             struct gbproxy_nse *nse_peer;</span><br><span style="color: hsl(120, 100%, 40%);">+         struct osmo_mobile_identity mi;</span><br><span style="color: hsl(120, 100%, 40%);">+               const uint8_t *mi_data = TLVP_VAL(&tp[0], BSSGP_IE_IMSI);</span><br><span style="color: hsl(120, 100%, 40%);">+         uint8_t mi_len = TLVP_LEN(&tp[0], BSSGP_IE_IMSI);</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_mobile_identity_decode(&mi, mi_data, mi_len, false);</span><br><span style="color: hsl(120, 100%, 40%);">+         nse_peer = gbproxy_nse_by_imsi(cfg, mi.imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+         if (!nse_peer) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGPNSE(nse, LOGL_ERROR, "Rx %s: Cannot find NSE\n", pdut_name);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return tx_status(nse, ns_bvci, BSSGP_CAUSE_INV_MAND_INF, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (nse_peer->sgsn_facing) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        LOGPNSE(nse, LOGL_ERROR, "Forwarding %s failed: IMSI cache contains SGSN NSE", pdut_name);</span><br><span style="color: hsl(120, 100%, 40%);">+                  return tx_status(nse, ns_bvci, BSSGP_CAUSE_PROTO_ERR_UNSPEC, NULL, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             gbproxy_imsi_cache_remove(cfg, mi.imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+              gbprox_relay2nse(msg, nse_peer, ns_bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span>    default:</span><br><span>             LOGPNSE(nse, LOGL_NOTICE, "Rx %s: Not supported\n", pdut_name);</span><br><span>            rate_ctr_inc(rate_ctr_group_get_ctr(cfg->ctrg, GBPROX_GLOB_CTR_PROTO_ERR_SGSN));</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gbproxy/+/24859">change 24859</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-gbproxy/+/24859"/><meta itemprop="name" content="View Change"/></div></div>

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