<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11444">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc_vty: check amr mode parameters<br><br>The vty already has a well working interface to configure the AMR<br>mode, threshold and hysteresis parameters. However there are no checks<br>yet to prevent against misconfiguration.<br><br>- Use gsm48_multirate_config() to perform a global check of the overall<br>  configuration<br><br>- Add check AMR modes during input (order, duplicates)<br><br>Change-Id: I8b9f69b89a39bbf4800d9790f7abe43ce66aeb71<br>Related: OS#3529<br>---<br>M src/osmo-bsc/bsc_vty.c<br>1 file changed, 107 insertions(+), 23 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/44/11444/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c</span><br><span>index f156cc8..dd540c1 100644</span><br><span>--- a/src/osmo-bsc/bsc_vty.c</span><br><span>+++ b/src/osmo-bsc/bsc_vty.c</span><br><span>@@ -3511,11 +3511,45 @@</span><br><span>     struct gsm48_multi_rate_conf *mr_conf =</span><br><span>                              (struct gsm48_multi_rate_conf *) mr->gsm48_ie;</span><br><span>    int i;</span><br><span style="color: hsl(120, 100%, 40%);">+        int mode;</span><br><span style="color: hsl(120, 100%, 40%);">+     int mode_prev = -1;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* Check if mode parameters are in order */</span><br><span style="color: hsl(120, 100%, 40%);">+   for (i = 0; i < argc; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+               mode = atoi(argv[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+         if (mode_prev > mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    vty_out(vty, "Modes must be listed in order%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                             VTY_NEWLINE);</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%);">+           if (mode_prev == mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      vty_out(vty, "Modes must be unique %s", VTY_NEWLINE);</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%);">+             mode_prev = mode;</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%);">+   /* Prepare the multirate configuration IE */</span><br><span>         mr->gsm48_ie[1] = 0;</span><br><span>      for (i = 0; i < argc; i++)</span><br><span>                mr->gsm48_ie[1] |= 1 << atoi(argv[i]);</span><br><span>      mr_conf->icmi = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Store actual mode identifier values */</span><br><span style="color: hsl(120, 100%, 40%);">+     for (i = 0; i < argc; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+               mr->ms_mode[i].mode = atoi(argv[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+               mr->bts_mode[i].mode = atoi(argv[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     mr->num_modes = argc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* Trim excess threshold and hysteresis values from previous config */</span><br><span style="color: hsl(120, 100%, 40%);">+        for (i = argc - 1; i < 4; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+           mr->ms_mode[i].threshold = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              mr->bts_mode[i].threshold = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             mr->ms_mode[i].hysteresis = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+             mr->bts_mode[i].hysteresis = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> }</span><br><span> </span><br><span> static void get_amr_th_from_arg(struct vty *vty, int argc, const char *argv[], int full)</span><br><span>@@ -3567,6 +3601,55 @@</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Give the current amr configuration a final consistency chack by feeding the</span><br><span style="color: hsl(120, 100%, 40%);">+ * the configuration into the gsm48 multirate IE generator function */</span><br><span style="color: hsl(120, 100%, 40%);">+static int check_amr_config(struct vty *vty)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   int rc = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct amr_multirate_conf *mr;</span><br><span style="color: hsl(120, 100%, 40%);">+        const struct gsm48_multi_rate_conf *mr_conf;</span><br><span style="color: hsl(120, 100%, 40%);">+  struct gsm_bts *bts = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+  int vty_rc = CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   mr = &bts->mr_full;</span><br><span style="color: hsl(120, 100%, 40%);">+    mr_conf = (struct gsm48_multi_rate_conf*) mr->gsm48_ie;</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = gsm48_multirate_config(NULL, mr_conf, mr->ms_mode, mr->num_modes);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty,</span><br><span style="color: hsl(120, 100%, 40%);">+                  "Invalid AMR multirate configuration (tch-f, ms) - check parameters%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                     VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_rc = CMD_WARNING;</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 = gsm48_multirate_config(NULL, mr_conf, mr->bts_mode, mr->num_modes);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (rc != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty,</span><br><span style="color: hsl(120, 100%, 40%);">+                  "Invalid AMR multirate configuration (tch-f, bts) - check parameters%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                    VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_rc = CMD_WARNING;</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%);">+   mr = &bts->mr_half;</span><br><span style="color: hsl(120, 100%, 40%);">+    mr_conf = (struct gsm48_multi_rate_conf*) mr->gsm48_ie;</span><br><span style="color: hsl(120, 100%, 40%);">+    rc = gsm48_multirate_config(NULL, mr_conf, mr->ms_mode, mr->num_modes);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty,</span><br><span style="color: hsl(120, 100%, 40%);">+                  "Invalid AMR multirate configuration (tch-h, ms) - check parameters%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                     VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_rc = CMD_WARNING;</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 = gsm48_multirate_config(NULL, mr_conf, mr->bts_mode, mr->num_modes);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (rc != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                vty_out(vty,</span><br><span style="color: hsl(120, 100%, 40%);">+                  "Invalid AMR multirate configuration (tch-h, bts) - check parameters%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                    VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_rc = CMD_WARNING;</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%);">+   return vty_rc;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define AMR_TCHF_PAR_STR " (0|1|2|3|4|5|6|7)"</span><br><span> #define AMR_TCHF_HELP_STR "4,75k\n5,15k\n5,90k\n6,70k\n7,40k\n7,95k\n" \</span><br><span>         "10,2k\n12,2k\n"</span><br><span>@@ -3583,7 +3666,7 @@</span><br><span>   AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>      get_amr_from_arg(vty, 1, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_modes2, cfg_bts_amr_fr_modes2_cmd,</span><br><span>@@ -3592,7 +3675,7 @@</span><br><span>    AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>    get_amr_from_arg(vty, 2, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_modes3, cfg_bts_amr_fr_modes3_cmd,</span><br><span>@@ -3601,7 +3684,7 @@</span><br><span>    AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>  get_amr_from_arg(vty, 3, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_modes4, cfg_bts_amr_fr_modes4_cmd,</span><br><span>@@ -3610,7 +3693,7 @@</span><br><span>    AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR AMR_TCHF_HELP_STR)</span><br><span> {</span><br><span>        get_amr_from_arg(vty, 4, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_start_mode, cfg_bts_amr_fr_start_mode_cmd,</span><br><span>@@ -3618,7 +3701,7 @@</span><br><span>    AMR_TEXT "Full Rate\n" AMR_START_TEXT)</span><br><span> {</span><br><span>        get_amr_start_from_arg(vty, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_thres1, cfg_bts_amr_fr_thres1_cmd,</span><br><span>@@ -3627,7 +3710,7 @@</span><br><span>    AMR_TH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_th_from_arg(vty, 2, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_thres2, cfg_bts_amr_fr_thres2_cmd,</span><br><span>@@ -3636,7 +3719,7 @@</span><br><span>    AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_th_from_arg(vty, 3, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_thres3, cfg_bts_amr_fr_thres3_cmd,</span><br><span>@@ -3645,7 +3728,7 @@</span><br><span>    AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_th_from_arg(vty, 4, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_hyst1, cfg_bts_amr_fr_hyst1_cmd,</span><br><span>@@ -3654,7 +3737,7 @@</span><br><span>      AMR_HY_HELP_STR)</span><br><span> {</span><br><span>        get_amr_hy_from_arg(vty, 2, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_fr_hyst2, cfg_bts_amr_fr_hyst2_cmd,</span><br><span>@@ -3672,7 +3755,7 @@</span><br><span>      AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>        get_amr_hy_from_arg(vty, 4, argv, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_modes1, cfg_bts_amr_hr_modes1_cmd,</span><br><span>@@ -3681,7 +3764,7 @@</span><br><span>    AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>      get_amr_from_arg(vty, 1, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_modes2, cfg_bts_amr_hr_modes2_cmd,</span><br><span>@@ -3690,7 +3773,7 @@</span><br><span>    AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>    get_amr_from_arg(vty, 2, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_modes3, cfg_bts_amr_hr_modes3_cmd,</span><br><span>@@ -3699,7 +3782,7 @@</span><br><span>    AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>  get_amr_from_arg(vty, 3, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_modes4, cfg_bts_amr_hr_modes4_cmd,</span><br><span>@@ -3708,7 +3791,7 @@</span><br><span>    AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR AMR_TCHH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_from_arg(vty, 4, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_start_mode, cfg_bts_amr_hr_start_mode_cmd,</span><br><span>@@ -3716,7 +3799,7 @@</span><br><span>    AMR_TEXT "Half Rate\n" AMR_START_TEXT)</span><br><span> {</span><br><span>        get_amr_start_from_arg(vty, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_thres1, cfg_bts_amr_hr_thres1_cmd,</span><br><span>@@ -3725,7 +3808,7 @@</span><br><span>    AMR_TH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_th_from_arg(vty, 2, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_thres2, cfg_bts_amr_hr_thres2_cmd,</span><br><span>@@ -3734,7 +3817,7 @@</span><br><span>    AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_th_from_arg(vty, 3, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_thres3, cfg_bts_amr_hr_thres3_cmd,</span><br><span>@@ -3743,7 +3826,7 @@</span><br><span>    AMR_TH_HELP_STR AMR_TH_HELP_STR AMR_TH_HELP_STR)</span><br><span> {</span><br><span>        get_amr_th_from_arg(vty, 4, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_hyst1, cfg_bts_amr_hr_hyst1_cmd,</span><br><span>@@ -3752,7 +3835,7 @@</span><br><span>      AMR_HY_HELP_STR)</span><br><span> {</span><br><span>        get_amr_hy_from_arg(vty, 2, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_hyst2, cfg_bts_amr_hr_hyst2_cmd,</span><br><span>@@ -3761,7 +3844,7 @@</span><br><span>      AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>        get_amr_hy_from_arg(vty, 3, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_bts_amr_hr_hyst3, cfg_bts_amr_hr_hyst3_cmd,</span><br><span>@@ -3770,7 +3853,7 @@</span><br><span>      AMR_HY_HELP_STR AMR_HY_HELP_STR AMR_HY_HELP_STR)</span><br><span> {</span><br><span>        get_amr_hy_from_arg(vty, 4, argv, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+   return check_amr_config(vty);</span><br><span> }</span><br><span> </span><br><span> #define TRX_TEXT "Radio Transceiver\n"</span><br><span>@@ -4391,11 +4474,12 @@</span><br><span> </span><br><span>     mr.ms_mode[0].mode = amr_mode;</span><br><span>       mr.bts_mode[0].mode = amr_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+       mr.num_modes = 1;</span><br><span> </span><br><span>        /* encode this configuration into the lchan for both uplink and</span><br><span>       * downlink direction */</span><br><span style="color: hsl(0, 100%, 40%);">-        gsm48_multirate_config(lchan->mr_ms_lv, &mr, mr.ms_mode);</span><br><span style="color: hsl(0, 100%, 40%);">-        gsm48_multirate_config(lchan->mr_bts_lv, &mr, mr.bts_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+    gsm48_multirate_config(lchan->mr_ms_lv, mr_conf, mr.ms_mode, mr.num_modes);</span><br><span style="color: hsl(120, 100%, 40%);">+        gsm48_multirate_config(lchan->mr_bts_lv, mr_conf, mr.bts_mode, mr.num_modes);</span><br><span> </span><br><span>         return 0;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11444">change 11444</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/11444"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I8b9f69b89a39bbf4800d9790f7abe43ce66aeb71 </div>
<div style="display:none"> Gerrit-Change-Number: 11444 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>