<p>daniel <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gbproxy/+/24859">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
lynxis lazus: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
</div><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 include/osmocom/gbproxy/gb_proxy.h<br>M src/gb_proxy.c<br>2 files changed, 40 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gbproxy/gb_proxy.h b/include/osmocom/gbproxy/gb_proxy.h</span><br><span>index c1cc35f..76a7d31 100644</span><br><span>--- a/include/osmocom/gbproxy/gb_proxy.h</span><br><span>+++ b/include/osmocom/gbproxy/gb_proxy.h</span><br><span>@@ -194,6 +194,7 @@</span><br><span> </span><br><span> enum cache_usage_type {</span><br><span> CACHE_USAGE_PAGING,</span><br><span style="color: hsl(120, 100%, 40%);">+ CACHE_USAGE_MS_REG_ENQ,</span><br><span> };</span><br><span> </span><br><span> /* TLLI cache */</span><br><span>diff --git a/src/gb_proxy.c b/src/gb_proxy.c</span><br><span>index e017abe..94ac4a3 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, CACHE_USAGE_MS_REG_ENQ);</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, CACHE_USAGE_MS_REG_ENQ);</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, CACHE_USAGE_MS_REG_ENQ);</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: 3 </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>