<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>