<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/26216">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  fixeria: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty: Introduce command 'gsmtap-remote-host' and 'gsmtap-category enable-all'<br><br>Related: OS#5306<br>Change-Id: Ibc6f78c46831b3c90ee3e97300fc13dc441df4c8<br>---<br>M doc/manuals/chapters/configuration.adoc<br>M doc/manuals/chapters/running.adoc<br>M src/gprs_pcu.h<br>M src/pcu_main.cpp<br>M src/pcu_vty.c<br>5 files changed, 150 insertions(+), 15 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/chapters/configuration.adoc b/doc/manuals/chapters/configuration.adoc</span><br><span>index d778929..ca3963d 100644</span><br><span>--- a/doc/manuals/chapters/configuration.adoc</span><br><span>+++ b/doc/manuals/chapters/configuration.adoc</span><br><span>@@ -422,3 +422,71 @@</span><br><span> accomplished and there's no penalty. However, if only EGPRS downlink data is sent</span><br><span> over that time frame, then the scheduler will force sending a RLCMAC Dummy</span><br><span> Block.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+[[gsmtap]]</span><br><span style="color: hsl(120, 100%, 40%);">+=== Configuring GSMTAP tracing</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+In addition to being able to obtain pcap protocol traces of the NS/BSSGP</span><br><span style="color: hsl(120, 100%, 40%);">+communication and the text-based logging from the OsmoPCU software, there is</span><br><span style="color: hsl(120, 100%, 40%);">+also the capability of tracing all communication on the radio interface related</span><br><span style="color: hsl(120, 100%, 40%);">+to PS. To do so, OsmoPCU can encapsulate MAC blocks (23-155 byte messages at the</span><br><span style="color: hsl(120, 100%, 40%);">+L2-L1 interface depending on coding scheme) into _GSMTAP_ and send them via</span><br><span style="color: hsl(120, 100%, 40%);">+UDP/IP. At that point, they can be captured with utilities like *tcpdump* or</span><br><span style="color: hsl(120, 100%, 40%);">+*tshark* for further analysis by the *wireshark* protocol analyzer.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+In order to activate this feature, you first need to make sure to specify</span><br><span style="color: hsl(120, 100%, 40%);">+the remote address of _GSMTAP_ host in the configuration file.  In most</span><br><span style="color: hsl(120, 100%, 40%);">+cases, using 127.0.0.1 for passing the messages over the loopback (`lo`)</span><br><span style="color: hsl(120, 100%, 40%);">+device will be sufficient:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: Enabling GSMTAP Um-frame logging to localhost</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+pcu</span><br><span style="color: hsl(120, 100%, 40%);">+ gsmtap-remote-host 127.0.0.1 <1></span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+<1> Destination address for _GSMTAP_ Um-frames</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: Changing this parameter at run-time will not affect the existing</span><br><span style="color: hsl(120, 100%, 40%);">+_GSMTAP_ connection, full program restart is required.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+NOTE: Command line parameters `-i` and `--gsmtap-ip` have been deprecated.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU can selectively trace such messages based on different categories, for</span><br><span style="color: hsl(120, 100%, 40%);">+both Ul and Dl. For a complete list of cateogry values, please refer to the</span><br><span style="color: hsl(120, 100%, 40%);">+_OsmoPCU VTY reference manual_ <<vty-ref-osmopcu>>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+For example, to enable GSMTAP tracing for all DL EGPRS rlcmac data blocks, you</span><br><span style="color: hsl(120, 100%, 40%);">+can use the `gsmtap-category dl-data-egprs` command at the `pcu` node of the</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU VTY.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: Enabling  GSMTAP for for all DL EGPRS rlcmac data blocks</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU> enable</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU# configure terminal</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU(config)# pcu</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU(pcu)# gsmtap-category dl-data-egprs</span><br><span style="color: hsl(120, 100%, 40%);">+OsmoPCU(trx)# write <1></span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+<1> the `write` command will make the configuration persistent in the</span><br><span style="color: hsl(120, 100%, 40%);">+configuration file.  This is not required if you wish to enable GSMTAP</span><br><span style="color: hsl(120, 100%, 40%);">+only in the current session of OsmoPCU.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+De-activation can be performed similarly by using the `no gsmtap-category</span><br><span style="color: hsl(120, 100%, 40%);">+dl-data-egprs` command at the `pcu` node of the OsmoPCU VTY.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+It may be useful to enable all categories with a few exceptions, or vice versa</span><br><span style="color: hsl(120, 100%, 40%);">+disable everything using one command.  For this purpose, the VTY provides</span><br><span style="color: hsl(120, 100%, 40%);">+`gsmtap-category enable-all` and `gsmtap-category disable-all` commands.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.Example: Enabling all categoriess except _dl-dummy_</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+pcu</span><br><span style="color: hsl(120, 100%, 40%);">+ gsmtap-category enable-all <1></span><br><span style="color: hsl(120, 100%, 40%);">+ no gsmtap-category dl-dummy <2></span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+<1> Enable all available SAPIs</span><br><span style="color: hsl(120, 100%, 40%);">+<2> Exclude DL RLCMAC blocks</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+From the moment they are enabled via VTY, GSMTAP messages will be</span><br><span style="color: hsl(120, 100%, 40%);">+generated and sent in UDP encapsulation to the IANA-registered UDP port</span><br><span style="color: hsl(120, 100%, 40%);">+for GSMTAP (4729) of the specified remote address.</span><br><span>diff --git a/doc/manuals/chapters/running.adoc b/doc/manuals/chapters/running.adoc</span><br><span>index 78f79b6..c763974 100644</span><br><span>--- a/doc/manuals/chapters/running.adoc</span><br><span>+++ b/doc/manuals/chapters/running.adoc</span><br><span>@@ -25,5 +25,3 @@</span><br><span>      Use the given MCC instead of that provided by BTS via PCU socket</span><br><span> *-n, --mnc 'MNC'*::</span><br><span>      Use the given MNC instead of that provided by BTS via PCU socket</span><br><span style="color: hsl(0, 100%, 40%);">-*-i, --gsmtap-ip 'A.B.C.D'*::</span><br><span style="color: hsl(0, 100%, 40%);">-        Send Um interface trace via GSMTAP to specified IP address</span><br><span>diff --git a/src/gprs_pcu.h b/src/gprs_pcu.h</span><br><span>index fdcf5f7..ed00221 100644</span><br><span>--- a/src/gprs_pcu.h</span><br><span>+++ b/src/gprs_pcu.h</span><br><span>@@ -117,6 +117,7 @@</span><br><span> </span><br><span>       struct gsmtap_inst *gsmtap;</span><br><span>  uint32_t gsmtap_categ_mask;</span><br><span style="color: hsl(120, 100%, 40%);">+   char *gsmtap_remote_host;</span><br><span> </span><br><span>        struct llist_head bts_list; /* list of gprs_rlcmac_bts */</span><br><span> </span><br><span>diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp</span><br><span>index 7992853..fe391b9 100644</span><br><span>--- a/src/pcu_main.cpp</span><br><span>+++ b/src/pcu_main.cpp</span><br><span>@@ -64,7 +64,7 @@</span><br><span> static int quit = 0;</span><br><span> static int rt_prio = -1;</span><br><span> static bool daemonize = false;</span><br><span style="color: hsl(0, 100%, 40%);">-static const char *gsmtap_addr = "localhost"; // FIXME: use gengetopt's default value instead</span><br><span style="color: hsl(120, 100%, 40%);">+static const char *gsmtap_addr;</span><br><span> </span><br><span> static void print_help()</span><br><span> {</span><br><span>@@ -75,7 +75,6 @@</span><br><span>            "  -n      --mnc MNC               Use given MNC instead of value provided by BTS\n"</span><br><span>               "  -V      --version               Print version\n"</span><br><span>                "  -D      --daemonize             Fork the process into a background daemon\n"</span><br><span style="color: hsl(0, 100%, 40%);">-               "  -i      --gsmtap-ip             The destination IP used for GSMTAP\n"</span><br><span>           "\nVTY reference generation:\n"</span><br><span>            "          --vty-ref-mode MODE     VTY reference generation mode (e.g. 'expert').\n"</span><br><span>               "          --vty-ref-xml           Generate the VTY reference XML output and exit.\n"</span><br><span>@@ -161,6 +160,8 @@</span><br><span>                        break;</span><br><span>               case 'i':</span><br><span>                    gsmtap_addr = optarg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 fprintf(stderr, "Command line argument '-i' is deprecated, use VTY "</span><br><span style="color: hsl(120, 100%, 40%);">+                                "parameter 'gsmtap-remote-host %s' instead.\n", gsmtap_addr);</span><br><span>                      break;</span><br><span>               case 'r':</span><br><span>                    rt_prio = atoi(optarg);</span><br><span>@@ -258,13 +259,6 @@</span><br><span>               exit(0);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   pcu->gsmtap = gsmtap_source_init(gsmtap_addr, GSMTAP_UDP_PORT, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   if (pcu->gsmtap)</span><br><span style="color: hsl(0, 100%, 40%);">-             gsmtap_source_add_sink(pcu->gsmtap);</span><br><span style="color: hsl(0, 100%, 40%);">- else</span><br><span style="color: hsl(0, 100%, 40%);">-            fprintf(stderr, "Failed to initialize GSMTAP for %s\n", gsmtap_addr);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      pcu->nsi = gprs_ns2_instantiate(tall_pcu_ctx, gprs_ns_prim_cb, NULL);</span><br><span>     if (!pcu->nsi) {</span><br><span>          LOGP(DBSSGP, LOGL_ERROR, "Failed to create NS instance\n");</span><br><span>@@ -283,6 +277,31 @@</span><br><span>                 fprintf(stderr, "No config file: '%s' Using default config.\n",</span><br><span>                    config_file);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /* Accept a GSMTAP host from VTY config, but a commandline option overrides that. */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (gsmtap_addr) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (pcu->gsmtap_remote_host != NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGP(DLGLOBAL, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+                        "Command line argument '-i %s' overrides "</span><br><span style="color: hsl(120, 100%, 40%);">+                          "'gsmtap-remote-host %s' from the config file\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                           gsmtap_addr, pcu->gsmtap_remote_host);</span><br><span style="color: hsl(120, 100%, 40%);">+                        talloc_free(pcu->gsmtap_remote_host);</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             pcu->gsmtap_remote_host = talloc_strdup(pcu, gsmtap_addr);</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%);">+   if (pcu->gsmtap_remote_host) {</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGP(DLGLOBAL, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+                "Setting up GSMTAP Um forwarding to '%s:%u'\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     pcu->gsmtap_remote_host, GSMTAP_UDP_PORT);</span><br><span style="color: hsl(120, 100%, 40%);">+            pcu->gsmtap = gsmtap_source_init(pcu->gsmtap_remote_host,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       GSMTAP_UDP_PORT, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+          if (pcu->gsmtap == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 fprintf(stderr, "Failed during gsmtap_source_init()\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                    exit(1);</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             gsmtap_source_add_sink(pcu->gsmtap);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  rc = telnet_init_dynif(tall_pcu_ctx, NULL, vty_get_bind_addr(),</span><br><span>                             OSMO_VTY_PORT_PCU);</span><br><span>   if (rc < 0) {</span><br><span>diff --git a/src/pcu_vty.c b/src/pcu_vty.c</span><br><span>index c85e324..6b33e29 100644</span><br><span>--- a/src/pcu_vty.c</span><br><span>+++ b/src/pcu_vty.c</span><br><span>@@ -70,6 +70,49 @@</span><br><span>       { 0, NULL }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_pcu_gsmtap_remote_host,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_gsmtap_remote_host_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "gsmtap-remote-host [HOSTNAME]",</span><br><span style="color: hsl(120, 100%, 40%);">+      "Enable GSMTAP Um logging (see also 'gsmtap-category')\n"</span><br><span style="color: hsl(120, 100%, 40%);">+      "Remote IP address or hostname ('localhost' if omitted)\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_talloc_replace_string(the_pcu, &the_pcu->gsmtap_remote_host,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 argc > 0 ? argv[0] : "localhost");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (vty->type != VTY_FILE)</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_out(vty, "%% This command requires restart%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return CMD_SUCCESS;</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%);">+DEFUN(cfg_pcu_no_gsmtap_remote_host,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_pcu_no_gsmtap_remote_host_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "no gsmtap-remote-host",</span><br><span style="color: hsl(120, 100%, 40%);">+      NO_STR "Disable GSMTAP Um logging\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (the_pcu->gsmtap_remote_host)</span><br><span style="color: hsl(120, 100%, 40%);">+           TALLOC_FREE(the_pcu->gsmtap_remote_host);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (vty->type != VTY_FILE)</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_out(vty, "%% This command requires restart%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return CMD_SUCCESS;</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%);">+DEFUN(cfg_pcu_gsmtap_sapi_all, pcucfg_pcu_gsmtap_categ_all_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+     "gsmtap-category (enable-all|disable-all)",</span><br><span style="color: hsl(120, 100%, 40%);">+ "Enable/disable sending of UL/DL messages over GSMTAP\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "Enable all kinds of messages (all categories)\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "Disable all kinds of messages (all categories)\n")</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%);">+    if (strcmp(argv[0], "enable-all") == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+             the_pcu->gsmtap_categ_mask = UINT32_MAX;</span><br><span style="color: hsl(120, 100%, 40%);">+   else</span><br><span style="color: hsl(120, 100%, 40%);">+          the_pcu->gsmtap_categ_mask = 0x00;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> DEFUN(cfg_pcu_gsmtap_categ, cfg_pcu_gsmtap_categ_cmd, "HIDDEN", "HIDDEN")</span><br><span> {</span><br><span>@@ -238,11 +281,14 @@</span><br><span>     if (strcmp(the_pcu->pcu_sock_path, PCU_SOCK_DEFAULT))</span><br><span>             vty_out(vty, " pcu-socket %s%s", the_pcu->pcu_sock_path, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       if (the_pcu->gsmtap_remote_host)</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, " gsmtap-remote-host %s%s", the_pcu->gsmtap_remote_host, VTY_NEWLINE);</span><br><span>     for (i = 0; i < 32; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-           uint32_t cs = ((uint32_t)1 << i);</span><br><span style="color: hsl(0, 100%, 40%);">-         if (the_pcu->gsmtap_categ_mask & cs) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   vty_out(vty, " gsmtap-category %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                         get_value_string(pcu_gsmtap_categ_names, i), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (the_pcu->gsmtap_categ_mask & ((uint32_t)1 << i)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   const char *category_buf;</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (!(category_buf = get_value_string_or_null(pcu_gsmtap_categ_names, i)))</span><br><span style="color: hsl(120, 100%, 40%);">+                            continue;</span><br><span style="color: hsl(120, 100%, 40%);">+                     vty_out(vty, " gsmtap-category %s%s", category_buf, VTY_NEWLINE);</span><br><span>          }</span><br><span>    }</span><br><span> </span><br><span>@@ -1294,6 +1340,9 @@</span><br><span>        install_element(PCU_NODE, &cfg_pcu_no_dl_tbf_preemptive_retransmission_cmd);</span><br><span>     install_element(PCU_NODE, &cfg_pcu_ms_idle_time_cmd);</span><br><span>    install_element(PCU_NODE, &cfg_pcu_no_ms_idle_time_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+  install_element(PCU_NODE, &cfg_pcu_gsmtap_remote_host_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+       install_element(PCU_NODE, &cfg_pcu_no_gsmtap_remote_host_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element(PCU_NODE, &pcucfg_pcu_gsmtap_categ_all_cmd);</span><br><span>     install_element(PCU_NODE, &cfg_pcu_gsmtap_categ_cmd);</span><br><span>    install_element(PCU_NODE, &cfg_pcu_no_gsmtap_categ_cmd);</span><br><span>         install_element(PCU_NODE, &cfg_pcu_sock_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/26216">change 26216</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/+/26216"/><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: Ibc6f78c46831b3c90ee3e97300fc13dc441df4c8 </div>
<div style="display:none"> Gerrit-Change-Number: 26216 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </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: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>