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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">remsim_client: Move body of main() loop to separate function<br><br>I rally don't like the existing spaghetti-style code.<br><br>Change-Id: I85c166e8aa95bb3f2e5d60d14f60caa94f3116fb<br>---<br>M src/simtrace2-remsim_client.c<br>1 file changed, 115 insertions(+), 109 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/simtrace2-remsim_client.c b/src/simtrace2-remsim_client.c</span><br><span>index 077275a..ac78dd4 100644</span><br><span>--- a/src/simtrace2-remsim_client.c</span><br><span>+++ b/src/simtrace2-remsim_client.c</span><br><span>@@ -992,10 +992,120 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void main_body(struct client_config *cfg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     struct st_transport *transp = ci->slot->transp;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct usb_interface_match _ifm, *ifm = &_ifm;</span><br><span style="color: hsl(120, 100%, 40%);">+    int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     ifm->vendor = cfg->usb.vendor_id;</span><br><span style="color: hsl(120, 100%, 40%);">+       ifm->product = cfg->usb.product_id;</span><br><span style="color: hsl(120, 100%, 40%);">+     ifm->configuration = cfg->usb.config_id;</span><br><span style="color: hsl(120, 100%, 40%);">+        ifm->interface = cfg->usb.if_num;</span><br><span style="color: hsl(120, 100%, 40%);">+       ifm->altsetting = cfg->usb.altsetting;</span><br><span style="color: hsl(120, 100%, 40%);">+  ifm->addr = cfg->usb.addr;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (cfg->usb.path)</span><br><span style="color: hsl(120, 100%, 40%);">+         osmo_strlcpy(ifm->path, cfg->usb.path, sizeof(ifm->path));</span><br><span style="color: hsl(120, 100%, 40%);">+   transp->usb_devh = osmo_libusb_open_claim_interface(NULL, NULL, ifm);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!transp->usb_devh) {</span><br><span style="color: hsl(120, 100%, 40%);">+           fprintf(stderr, "can't open USB device\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             return;</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%);">+   rc = libusb_claim_interface(transp->usb_devh, cfg->usb.if_num);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              fprintf(stderr, "can't claim interface %d; rc=%d\n", cfg->usb.if_num, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+           goto close_exit;</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%);">+   rc = osmo_libusb_get_ep_addrs(transp->usb_devh, cfg->usb.if_num, &transp->usb_ep.out,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    &transp->usb_ep.in, &transp->usb_ep.irq_in);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              fprintf(stderr, "can't obtain EP addrs; rc=%d\n", rc);</span><br><span style="color: hsl(120, 100%, 40%);">+          goto close_exit;</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%);">+   // switch modem SIM port to emulated SIM on OWHW</span><br><span style="color: hsl(120, 100%, 40%);">+      if (USB_VENDOR_OPENMOKO == ifm->vendor && USB_PRODUCT_OWHW_SAM3 == ifm->product) { // we are on the OWHW</span><br><span style="color: hsl(120, 100%, 40%);">+                int modem = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (ifm->interface) { // the USB interface indicates for which modem we want to emulate the SIM</span><br><span style="color: hsl(120, 100%, 40%);">+                case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       modem = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                    break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       modem = 2;</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%);">+                      fprintf(stderr, "unknown GPIO for SIMtrace interface %d\n", ifm->interface);</span><br><span style="color: hsl(120, 100%, 40%);">+                     goto close_exit;</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%);">+            char gpio_path[PATH_MAX];</span><br><span style="color: hsl(120, 100%, 40%);">+             snprintf(gpio_path, sizeof(gpio_path), "/dev/gpio/connect_st_usim%d/value", modem);</span><br><span style="color: hsl(120, 100%, 40%);">+         int connec_st_usim = open(gpio_path, O_WRONLY);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (-1 == connec_st_usim) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   fprintf(stderr, "can't open GPIO %s to switch modem %d to emulated USIM\n", gpio_path, modem);</span><br><span style="color: hsl(120, 100%, 40%);">+                  goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (1 != write(connec_st_usim, "1", 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   fprintf(stderr, "can't write GPIO %s to switch modem %d to emulated USIM\n", gpio_path, modem);</span><br><span style="color: hsl(120, 100%, 40%);">+                 goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("switched modem %d to emulated USIM\n", modem);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            snprintf(gpio_path, sizeof(gpio_path), "/dev/gpio/mdm%d_rst/value", modem);</span><br><span style="color: hsl(120, 100%, 40%);">+         int mdm_rst = open(gpio_path, O_WRONLY);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (-1 == mdm_rst) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  fprintf(stderr, "can't open GPIO %s to reset modem %d\n", gpio_path, modem);</span><br><span style="color: hsl(120, 100%, 40%);">+                    goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (1 != write(mdm_rst, "1", 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  fprintf(stderr, "can't write GPIO %s to reset modem %d\n", gpio_path, modem);</span><br><span style="color: hsl(120, 100%, 40%);">+                   goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             sleep(1); // wait a bit to ensure reset is effective</span><br><span style="color: hsl(120, 100%, 40%);">+          if (1 != write(mdm_rst, "0", 1)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  fprintf(stderr, "can't write GPIO %s to reset modem %d\n", gpio_path, modem);</span><br><span style="color: hsl(120, 100%, 40%);">+                   goto close_exit;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             printf("modem %d reset\n", modem);</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%);">+   /* request firmware to generate STATUS on IRQ endpoint */</span><br><span style="color: hsl(120, 100%, 40%);">+     cardem_request_config(ci, CEMU_FEAT_F_STATUS_IRQ);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* simulate card-insert to modem (owhw, not qmod) */</span><br><span style="color: hsl(120, 100%, 40%);">+  cardem_request_card_insert(ci, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* select remote (forwarded) SIM */</span><br><span style="color: hsl(120, 100%, 40%);">+   st_modem_sim_select_remote(ci->slot);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* set the ATR */</span><br><span style="color: hsl(120, 100%, 40%);">+     //atr_update_csum(real_atr, sizeof(real_atr));</span><br><span style="color: hsl(120, 100%, 40%);">+        cardem_request_set_atr(ci, cfg->atr.data, cfg->atr.len);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* select remote (forwarded) SIM */</span><br><span style="color: hsl(120, 100%, 40%);">+   st_modem_reset_pulse(ci->slot, 300);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     printf("Entering main loop\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   allocate_and_submit_irq(ci);</span><br><span style="color: hsl(120, 100%, 40%);">+  allocate_and_submit_in(ci);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ while (1) {</span><br><span style="color: hsl(120, 100%, 40%);">+           osmo_select_main(false);</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%);">+   libusb_release_interface(transp->usb_devh, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+close_exit:</span><br><span style="color: hsl(120, 100%, 40%);">+      if (transp->usb_devh)</span><br><span style="color: hsl(120, 100%, 40%);">+              libusb_close(transp-> usb_devh);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>     struct rspro_server_conn *srvc, *bankdc;</span><br><span style="color: hsl(0, 100%, 40%);">-        struct st_transport *transp = ci->slot->transp;</span><br><span>        struct client_config *cfg;</span><br><span>   int rc;</span><br><span>      int ret = 1;</span><br><span>@@ -1082,116 +1192,12 @@</span><br><span> </span><br><span>  // connect to SIMtrace2 cardem</span><br><span>       do {</span><br><span style="color: hsl(0, 100%, 40%);">-            struct usb_interface_match _ifm, *ifm = &_ifm;</span><br><span style="color: hsl(0, 100%, 40%);">-              ifm->vendor = cfg->usb.vendor_id;</span><br><span style="color: hsl(0, 100%, 40%);">-         ifm->product = cfg->usb.product_id;</span><br><span style="color: hsl(0, 100%, 40%);">-               ifm->configuration = cfg->usb.config_id;</span><br><span style="color: hsl(0, 100%, 40%);">-          ifm->interface = cfg->usb.if_num;</span><br><span style="color: hsl(0, 100%, 40%);">-         ifm->altsetting = cfg->usb.altsetting;</span><br><span style="color: hsl(0, 100%, 40%);">-            ifm->addr = cfg->usb.addr;</span><br><span style="color: hsl(0, 100%, 40%);">-                if (cfg->usb.path)</span><br><span style="color: hsl(0, 100%, 40%);">-                   osmo_strlcpy(ifm->path, cfg->usb.path, sizeof(ifm->path));</span><br><span style="color: hsl(0, 100%, 40%);">-             transp->usb_devh = osmo_libusb_open_claim_interface(NULL, NULL, ifm);</span><br><span style="color: hsl(0, 100%, 40%);">-                if (!transp->usb_devh) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     fprintf(stderr, "can't open USB device\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                       goto close_exit;</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%);">-               rc = libusb_claim_interface(transp->usb_devh, cfg->usb.if_num);</span><br><span style="color: hsl(0, 100%, 40%);">-           if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        fprintf(stderr, "can't claim interface %d; rc=%d\n", cfg->usb.if_num, rc);</span><br><span style="color: hsl(0, 100%, 40%);">-                     goto close_exit;</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%);">-               rc = osmo_libusb_get_ep_addrs(transp->usb_devh, cfg->usb.if_num, &transp->usb_ep.out,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              &transp->usb_ep.in, &transp->usb_ep.irq_in);</span><br><span style="color: hsl(0, 100%, 40%);">-              if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        fprintf(stderr, "can't obtain EP addrs; rc=%d\n", rc);</span><br><span style="color: hsl(0, 100%, 40%);">-                    goto close_exit;</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%);">-               // switch modem SIM port to emulated SIM on OWHW</span><br><span style="color: hsl(0, 100%, 40%);">-                if (USB_VENDOR_OPENMOKO == ifm->vendor && USB_PRODUCT_OWHW_SAM3 == ifm->product) { // we are on the OWHW</span><br><span style="color: hsl(0, 100%, 40%);">-                  int modem = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-                 switch (ifm->interface) { // the USB interface indicates for which modem we want to emulate the SIM</span><br><span style="color: hsl(0, 100%, 40%);">-                  case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-                         modem = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-                              break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-                         modem = 2;</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%);">-                                fprintf(stderr, "unknown GPIO for SIMtrace interface %d\n", ifm->interface);</span><br><span style="color: hsl(0, 100%, 40%);">-                               goto close_exit;</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%);">-                      char gpio_path[PATH_MAX];</span><br><span style="color: hsl(0, 100%, 40%);">-                       snprintf(gpio_path, sizeof(gpio_path), "/dev/gpio/connect_st_usim%d/value", modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                   int connec_st_usim = open(gpio_path, O_WRONLY);</span><br><span style="color: hsl(0, 100%, 40%);">-                 if (-1 == connec_st_usim) {</span><br><span style="color: hsl(0, 100%, 40%);">-                             fprintf(stderr, "can't open GPIO %s to switch modem %d to emulated USIM\n", gpio_path, modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                            goto close_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (1 != write(connec_st_usim, "1", 1)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                             fprintf(stderr, "can't write GPIO %s to switch modem %d to emulated USIM\n", gpio_path, modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                           goto close_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                       printf("switched modem %d to emulated USIM\n", modem);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                        snprintf(gpio_path, sizeof(gpio_path), "/dev/gpio/mdm%d_rst/value", modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                   int mdm_rst = open(gpio_path, O_WRONLY);</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (-1 == mdm_rst) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            fprintf(stderr, "can't open GPIO %s to reset modem %d\n", gpio_path, modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                              goto close_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (1 != write(mdm_rst, "1", 1)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            fprintf(stderr, "can't write GPIO %s to reset modem %d\n", gpio_path, modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                             goto close_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                       sleep(1); // wait a bit to ensure reset is effective</span><br><span style="color: hsl(0, 100%, 40%);">-                    if (1 != write(mdm_rst, "0", 1)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            fprintf(stderr, "can't write GPIO %s to reset modem %d\n", gpio_path, modem);</span><br><span style="color: hsl(0, 100%, 40%);">-                             goto close_exit;</span><br><span style="color: hsl(0, 100%, 40%);">-                        }</span><br><span style="color: hsl(0, 100%, 40%);">-                       printf("modem %d reset\n", modem);</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%);">-               /* request firmware to generate STATUS on IRQ endpoint */</span><br><span style="color: hsl(0, 100%, 40%);">-               cardem_request_config(ci, CEMU_FEAT_F_STATUS_IRQ);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              /* simulate card-insert to modem (owhw, not qmod) */</span><br><span style="color: hsl(0, 100%, 40%);">-            cardem_request_card_insert(ci, true);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-           /* select remote (forwarded) SIM */</span><br><span style="color: hsl(0, 100%, 40%);">-             st_modem_sim_select_remote(ci->slot);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                /* set the ATR */</span><br><span style="color: hsl(0, 100%, 40%);">-               //atr_update_csum(real_atr, sizeof(real_atr));</span><br><span style="color: hsl(0, 100%, 40%);">-          cardem_request_set_atr(ci, cfg->atr.data, cfg->atr.len);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-          /* select remote (forwarded) SIM */</span><br><span style="color: hsl(0, 100%, 40%);">-             st_modem_reset_pulse(ci->slot, 300);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         printf("Entering main loop\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               allocate_and_submit_irq(ci);</span><br><span style="color: hsl(0, 100%, 40%);">-            allocate_and_submit_in(ci);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             while (1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     osmo_select_main(false);</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%);">-               ret = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                libusb_release_interface(transp->usb_devh, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-close_exit:</span><br><span style="color: hsl(0, 100%, 40%);">-            if (transp->usb_devh)</span><br><span style="color: hsl(0, 100%, 40%);">-                        libusb_close(transp->usb_devh);</span><br><span style="color: hsl(0, 100%, 40%);">-              if (cfg->keep_running)</span><br><span style="color: hsl(0, 100%, 40%);">-                       sleep(1);</span><br><span style="color: hsl(120, 100%, 40%);">+             main_body(cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+               sleep(1);</span><br><span>    } while (cfg->keep_running);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     libusb_exit(NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+close_exit:</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_libusb_exit(NULL);</span><br><span> do_exit:</span><br><span>  return ret;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-remsim/+/16622">change 16622</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-remsim/+/16622"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-remsim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I85c166e8aa95bb3f2e5d60d14f60caa94f3116fb </div>
<div style="display:none"> Gerrit-Change-Number: 16622 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>