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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Move llc->MM/SM Gb specific glue code to its own file<br><br>Now that we have RANAP/Iu handling specificities in its own file, let's<br>have also Gb specific glue code for messages coming from llc up to MM/SM<br>layer in its own file. This way same entry points in gprs_gmm.c are used<br>by Gb and Iu: gsm0408_rcv_gmm() (for MM) and gsm0408_rcv_gsm() (for SM).<br><br>Change-Id: Iaf57922a0970c1d03f6f1d6337d27ae3d4aaf32c<br>---<br>M include/osmocom/sgsn/Makefile.am<br>A include/osmocom/sgsn/gprs_gb.h<br>M include/osmocom/sgsn/gprs_gmm.h<br>M src/gprs/Makefile.am<br>A src/gprs/gprs_gb.c<br>M src/gprs/gprs_gmm.c<br>M tests/sgsn/Makefile.am<br>7 files changed, 110 insertions(+), 62 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/Makefile.am b/include/osmocom/sgsn/Makefile.am</span><br><span>index b4cd5db..b91c9f1 100644</span><br><span>--- a/include/osmocom/sgsn/Makefile.am</span><br><span>+++ b/include/osmocom/sgsn/Makefile.am</span><br><span>@@ -3,6 +3,7 @@</span><br><span>      crc24.h \</span><br><span>    debug.h \</span><br><span>    gb_proxy.h \</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs_gb.h \</span><br><span>  gprs_gb_parse.h \</span><br><span>    gprs_gmm.h \</span><br><span>         gprs_gmm_attach.h \</span><br><span>diff --git a/include/osmocom/sgsn/gprs_gb.h b/include/osmocom/sgsn/gprs_gb.h</span><br><span>new file mode 100644</span><br><span>index 0000000..3bc3676</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/sgsn/gprs_gb.h</span><br><span>@@ -0,0 +1,9 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdbool.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sgsn/gprs_rllc.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int gsm0408_gprs_rcvmsg_gb(struct msgb *msg, struct gprs_llc_llme *llme,</span><br><span style="color: hsl(120, 100%, 40%);">+                           bool drop_cipherable);</span><br><span>diff --git a/include/osmocom/sgsn/gprs_gmm.h b/include/osmocom/sgsn/gprs_gmm.h</span><br><span>index 047bd77..9316351 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_gmm.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_gmm.h</span><br><span>@@ -50,4 +50,8 @@</span><br><span> void pdp_ctx_detach_mm_ctx(struct sgsn_pdp_ctx *pdp);</span><br><span> </span><br><span> void mmctx_set_pmm_state(struct sgsn_mm_ctx *ctx, enum gprs_pmm_state state);</span><br><span style="color: hsl(120, 100%, 40%);">+void mmctx_state_timer_start(struct sgsn_mm_ctx *mm, unsigned int T);</span><br><span style="color: hsl(120, 100%, 40%);">+void mmctx_set_mm_state(struct sgsn_mm_ctx *ctx, enum gprs_pmm_state state);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void msgid2mmctx(struct sgsn_mm_ctx *mm, const struct msgb *msg);</span><br><span> #endif /* _GPRS_GMM_H */</span><br><span>diff --git a/src/gprs/Makefile.am b/src/gprs/Makefile.am</span><br><span>index 384b893..85ba906 100644</span><br><span>--- a/src/gprs/Makefile.am</span><br><span>+++ b/src/gprs/Makefile.am</span><br><span>@@ -60,6 +60,7 @@</span><br><span>  $(NULL)</span><br><span> </span><br><span> osmo_sgsn_SOURCES = \</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs_gb.c \</span><br><span>  gprs_gmm_attach.c \</span><br><span>  gprs_gmm.c \</span><br><span>         gprs_ranap.c \</span><br><span>diff --git a/src/gprs/gprs_gb.c b/src/gprs/gprs_gb.c</span><br><span>new file mode 100644</span><br><span>index 0000000..29bfc53</span><br><span>--- /dev/null</span><br><span>+++ b/src/gprs/gprs_gb.c</span><br><span>@@ -0,0 +1,91 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* Messages on the Gb interface (A/Gb mode) */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2009-2015 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2010 by On-Waves</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2019 by sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.</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%);">+#include <osmocom/core/rate_ctr.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_bssgp.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "bscconfig.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sgsn/gprs_sgsn.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sgsn/gprs_gmm.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sgsn/debug.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Update the MM context state */</span><br><span style="color: hsl(120, 100%, 40%);">+static void gsm0408_gprs_notify_pdu_gb(struct sgsn_mm_ctx *mmctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (mmctx->pmm_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case MM_STANDBY:</span><br><span style="color: hsl(120, 100%, 40%);">+              mmctx_set_mm_state(mmctx, MM_READY);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case MM_READY: /* RE-arm the timer upon receival of Gb PDUs */</span><br><span style="color: hsl(120, 100%, 40%);">+                mmctx_state_timer_start(mmctx, 3314);</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Main entry point for incoming 04.08 GPRS messages from Gb */</span><br><span style="color: hsl(120, 100%, 40%);">+int gsm0408_gprs_rcvmsg_gb(struct msgb *msg, struct gprs_llc_llme *llme,</span><br><span style="color: hsl(120, 100%, 40%);">+                        bool drop_cipherable)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm48_hdr *gh = (struct gsm48_hdr *) msgb_gmmh(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t pdisc = gsm48_hdr_pdisc(gh);</span><br><span style="color: hsl(120, 100%, 40%);">+  struct sgsn_mm_ctx *mmctx;</span><br><span style="color: hsl(120, 100%, 40%);">+    struct gprs_ra_id ra_id;</span><br><span style="color: hsl(120, 100%, 40%);">+      int rc = -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   bssgp_parse_cell_id(&ra_id, msgb_bcid(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+      mmctx = sgsn_mm_ctx_by_tlli(msgb_tlli(msg), &ra_id);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mmctx) {</span><br><span style="color: hsl(120, 100%, 40%);">+          msgid2mmctx(mmctx, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+              rate_ctr_inc(&mmctx->ctrg->ctr[GMM_CTR_PKTS_SIG_IN]);</span><br><span style="color: hsl(120, 100%, 40%);">+               mmctx->gb.llme = llme;</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%);">+   /* MMCTX can be NULL */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (mmctx)</span><br><span style="color: hsl(120, 100%, 40%);">+            gsm0408_gprs_notify_pdu_gb(mmctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  switch (pdisc) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case GSM48_PDISC_MM_GPRS:</span><br><span style="color: hsl(120, 100%, 40%);">+             rc = gsm0408_rcv_gmm(mmctx, msg, llme, drop_cipherable);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM48_PDISC_SM_GPRS:</span><br><span style="color: hsl(120, 100%, 40%);">+             rc = gsm0408_rcv_gsm(mmctx, msg, llme);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGMMCTXP(LOGL_NOTICE, mmctx,</span><br><span style="color: hsl(120, 100%, 40%);">+                 "Unknown GSM 04.08 discriminator 0x%02x: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     pdisc, osmo_hexdump((uint8_t *)gh, msgb_l3len(msg)));</span><br><span style="color: hsl(120, 100%, 40%);">+         /* FIXME: return status message */</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%);">+   /* MMCTX can be invalid */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/gprs/gprs_gmm.c b/src/gprs/gprs_gmm.c</span><br><span>index 5700ee5..33ade4d 100644</span><br><span>--- a/src/gprs/gprs_gmm.c</span><br><span>+++ b/src/gprs/gprs_gmm.c</span><br><span>@@ -124,7 +124,6 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void mmctx_set_mm_state(struct sgsn_mm_ctx *ctx, enum gprs_pmm_state state);</span><br><span> static void mmctx_state_timer_cb(void *_mm)</span><br><span> {</span><br><span>    struct sgsn_mm_ctx *mm = _mm;</span><br><span>@@ -149,7 +148,7 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void mmctx_state_timer_start(struct sgsn_mm_ctx *mm, unsigned int T)</span><br><span style="color: hsl(120, 100%, 40%);">+void mmctx_state_timer_start(struct sgsn_mm_ctx *mm, unsigned int T)</span><br><span> {</span><br><span>     unsigned long seconds;</span><br><span> </span><br><span>@@ -200,7 +199,7 @@</span><br><span>     ctx->pmm_state = state;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void mmctx_set_mm_state(struct sgsn_mm_ctx *ctx, enum gprs_pmm_state state)</span><br><span style="color: hsl(120, 100%, 40%);">+void mmctx_set_mm_state(struct sgsn_mm_ctx *ctx, enum gprs_pmm_state state)</span><br><span> {</span><br><span>      OSMO_ASSERT(ctx->ran_type == MM_CTX_T_GERAN_Gb);</span><br><span> </span><br><span>@@ -304,7 +303,7 @@</span><br><span> }</span><br><span> </span><br><span> /* Store BVCI/NSEI in MM context */</span><br><span style="color: hsl(0, 100%, 40%);">-static void msgid2mmctx(struct sgsn_mm_ctx *mm, const struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+void msgid2mmctx(struct sgsn_mm_ctx *mm, const struct msgb *msg)</span><br><span> {</span><br><span>  /* check for Iu or Gb */</span><br><span>     if (!MSG_IU_UE_CTX(msg)) {</span><br><span>@@ -2926,64 +2925,6 @@</span><br><span>  return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Update the MM context state */</span><br><span style="color: hsl(0, 100%, 40%);">-static void gsm0408_gprs_notify_pdu_gb(struct sgsn_mm_ctx *mmctx)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-  switch (mmctx->pmm_state) {</span><br><span style="color: hsl(0, 100%, 40%);">-  case MM_STANDBY:</span><br><span style="color: hsl(0, 100%, 40%);">-                mmctx_set_mm_state(mmctx, MM_READY);</span><br><span style="color: hsl(0, 100%, 40%);">-            break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case MM_READY: /* RE-arm the timer upon receival of Gb PDUs */</span><br><span style="color: hsl(0, 100%, 40%);">-          mmctx_state_timer_start(mmctx, 3314);</span><br><span style="color: hsl(0, 100%, 40%);">-           break;</span><br><span style="color: hsl(0, 100%, 40%);">-  default:</span><br><span style="color: hsl(0, 100%, 40%);">-                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/* Main entry point for incoming 04.08 GPRS messages from Gb */</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm0408_gprs_rcvmsg_gb(struct msgb *msg, struct gprs_llc_llme *llme,</span><br><span style="color: hsl(0, 100%, 40%);">-                          bool drop_cipherable)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       struct gsm48_hdr *gh = (struct gsm48_hdr *) msgb_gmmh(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-     uint8_t pdisc = gsm48_hdr_pdisc(gh);</span><br><span style="color: hsl(0, 100%, 40%);">-    struct sgsn_mm_ctx *mmctx;</span><br><span style="color: hsl(0, 100%, 40%);">-      struct gprs_ra_id ra_id;</span><br><span style="color: hsl(0, 100%, 40%);">-        int rc = -EINVAL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       bssgp_parse_cell_id(&ra_id, msgb_bcid(msg));</span><br><span style="color: hsl(0, 100%, 40%);">-        mmctx = sgsn_mm_ctx_by_tlli(msgb_tlli(msg), &ra_id);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (mmctx) {</span><br><span style="color: hsl(0, 100%, 40%);">-            msgid2mmctx(mmctx, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-                rate_ctr_inc(&mmctx->ctrg->ctr[GMM_CTR_PKTS_SIG_IN]);</span><br><span style="color: hsl(0, 100%, 40%);">-         mmctx->gb.llme = llme;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* MMCTX can be NULL */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (mmctx)</span><br><span style="color: hsl(0, 100%, 40%);">-              gsm0408_gprs_notify_pdu_gb(mmctx);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      switch (pdisc) {</span><br><span style="color: hsl(0, 100%, 40%);">-        case GSM48_PDISC_MM_GPRS:</span><br><span style="color: hsl(0, 100%, 40%);">-               rc = gsm0408_rcv_gmm(mmctx, msg, llme, drop_cipherable);</span><br><span style="color: hsl(0, 100%, 40%);">-                break;</span><br><span style="color: hsl(0, 100%, 40%);">-  case GSM48_PDISC_SM_GPRS:</span><br><span style="color: hsl(0, 100%, 40%);">-               rc = gsm0408_rcv_gsm(mmctx, msg, llme);</span><br><span style="color: hsl(0, 100%, 40%);">-         break;</span><br><span style="color: hsl(0, 100%, 40%);">-  default:</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGMMCTXP(LOGL_NOTICE, mmctx,</span><br><span style="color: hsl(0, 100%, 40%);">-                   "Unknown GSM 04.08 discriminator 0x%02x: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                       pdisc, osmo_hexdump((uint8_t *)gh, msgb_l3len(msg)));</span><br><span style="color: hsl(0, 100%, 40%);">-           /* FIXME: return status message */</span><br><span style="color: hsl(0, 100%, 40%);">-              break;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* MMCTX can be invalid */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      return rc;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> int gprs_gmm_rx_suspend(struct gprs_ra_id *raid, uint32_t tlli)</span><br><span> {</span><br><span>  struct sgsn_mm_ctx *mmctx;</span><br><span>diff --git a/tests/sgsn/Makefile.am b/tests/sgsn/Makefile.am</span><br><span>index ae397b3..b035468 100644</span><br><span>--- a/tests/sgsn/Makefile.am</span><br><span>+++ b/tests/sgsn/Makefile.am</span><br><span>@@ -45,6 +45,7 @@</span><br><span>  $(top_builddir)/src/gprs/gprs_llc_parse.o \</span><br><span>  $(top_builddir)/src/gprs/gprs_llc.o \</span><br><span>        $(top_builddir)/src/gprs/crc24.o \</span><br><span style="color: hsl(120, 100%, 40%);">+    $(top_builddir)/src/gprs/gprs_gb.o \</span><br><span>         $(top_builddir)/src/gprs/gprs_ranap.o \</span><br><span>      $(top_builddir)/src/gprs/gprs_sndcp.o \</span><br><span>      $(top_builddir)/src/gprs/gprs_gmm_attach.o \</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/15336">change 15336</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/+/15336"/><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: Iaf57922a0970c1d03f6f1d6337d27ae3d4aaf32c </div>
<div style="display:none"> Gerrit-Change-Number: 15336 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>