<p>daniel <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/22516">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  daniel: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gbproxy: Avoid depending on any of the SGSN code<br><br>The last remaining functin of the SGSN code base we used was<br>gprs_gb_parse_tlli().<br><br>Let's simply copy this function over and become  self-contained.<br><br>This would allow migrating osmo-gbproxy to a separate repository.<br><br>Change-Id: I6f3f86581b47ad71a3d97f07611a2e2709876d69<br>---<br>M src/gbproxy/Makefile.am<br>M src/gbproxy/gb_proxy.c<br>2 files changed, 41 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gbproxy/Makefile.am b/src/gbproxy/Makefile.am</span><br><span>index f8a8773..1500e11 100644</span><br><span>--- a/src/gbproxy/Makefile.am</span><br><span>+++ b/src/gbproxy/Makefile.am</span><br><span>@@ -30,10 +30,6 @@</span><br><span>     gb_proxy_peer.c \</span><br><span>    $(NULL)</span><br><span> osmo_gbproxy_LDADD = \</span><br><span style="color: hsl(0, 100%, 40%);">-       $(top_builddir)/src/gprs/gprs_gb_parse.o \</span><br><span style="color: hsl(0, 100%, 40%);">-      $(top_builddir)/src/gprs/gprs_llc_parse.o \</span><br><span style="color: hsl(0, 100%, 40%);">-     $(top_builddir)/src/gprs/crc24.o \</span><br><span style="color: hsl(0, 100%, 40%);">-      $(top_builddir)/src/gprs/gprs_utils.o \</span><br><span>      $(LIBOSMOCORE_LIBS) \</span><br><span>        $(LIBOSMOGSM_LIBS) \</span><br><span>         $(LIBOSMOVTY_LIBS) \</span><br><span>diff --git a/src/gbproxy/gb_proxy.c b/src/gbproxy/gb_proxy.c</span><br><span>index 1d29b64..c882eb0 100644</span><br><span>--- a/src/gbproxy/gb_proxy.c</span><br><span>+++ b/src/gbproxy/gb_proxy.c</span><br><span>@@ -136,6 +136,47 @@</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Determine the TLLI from the given BSSGP message.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bssgp pointer to start of BSSGP header</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] bssgp_len length of BSSGP message in octets</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[out] tlli TLLI (if any) in host byte order</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns 1 if TLLI found; 0 if none found; negative on parse error */</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_gb_parse_tlli(const uint8_t *bssgp, size_t bssgp_len, uint32_t *tlli)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     const struct bssgp_normal_hdr *bgph;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint8_t pdu_type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (bssgp_len < sizeof(struct bssgp_normal_hdr))</span><br><span style="color: hsl(120, 100%, 40%);">+           return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     bgph = (struct bssgp_normal_hdr *)bssgp;</span><br><span style="color: hsl(120, 100%, 40%);">+      pdu_type = bgph->pdu_type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (pdu_type == BSSGP_PDUT_UL_UNITDATA ||</span><br><span style="color: hsl(120, 100%, 40%);">+         pdu_type == BSSGP_PDUT_DL_UNITDATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+             const struct bssgp_ud_hdr *budh = (struct bssgp_ud_hdr *)bssgp;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (bssgp_len < sizeof(struct bssgp_ud_hdr))</span><br><span style="color: hsl(120, 100%, 40%);">+                       return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               *tlli = osmo_load32be((const uint8_t *)&budh->tlli);</span><br><span style="color: hsl(120, 100%, 40%);">+           return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              const uint8_t *data = bgph->data;</span><br><span style="color: hsl(120, 100%, 40%);">+          size_t data_len = bssgp_len - sizeof(*bgph);</span><br><span style="color: hsl(120, 100%, 40%);">+          struct tlv_parsed tp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               if (bssgp_tlv_parse(&tp, data, data_len) < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                  return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             if (TLVP_PRESENT(&tp, BSSGP_IE_TLLI)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   *tlli = osmo_load32be(TLVP_VAL(&tp, BSSGP_IE_TLLI));</span><br><span style="color: hsl(120, 100%, 40%);">+                      return 1;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* No TLLI present in message */</span><br><span style="color: hsl(120, 100%, 40%);">+      return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* feed a message down the NSE */</span><br><span> static int gbprox_relay2nse(struct msgb *old_msg, struct gbproxy_nse *nse,</span><br><span>                         uint16_t ns_bvci)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/22516">change 22516</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/+/22516"/><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: I6f3f86581b47ad71a3d97f07611a2e2709876d69 </div>
<div style="display:none"> Gerrit-Change-Number: 22516 </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-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>