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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ensure chan_mode comparisons in non-VAMOS mode<br><br>Both VAMOS- and non-VAMOS speech modes should result in indentical voice<br>handling. So make sure that all chan_modes are converted to non-vamos<br>before comparing / evaluating in switch statements.<br><br>Change-Id: I791e7966b1f8eaa3299a8a46abeb313cf5136e0b<br>---<br>M src/osmo-bsc/abis_rsl.c<br>M src/osmo-bsc/assignment_fsm.c<br>M src/osmo-bsc/gsm_04_08_rr.c<br>M src/osmo-bsc/gsm_data.c<br>M src/osmo-bsc/handover_decision_2.c<br>M src/osmo-bsc/handover_fsm.c<br>M src/osmo-bsc/lchan_fsm.c<br>M src/osmo-bsc/lchan_rtp_fsm.c<br>M src/osmo-bsc/lchan_select.c<br>9 files changed, 25 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c</span><br><span>index 0436bf5..7fe961e 100644</span><br><span>--- a/src/osmo-bsc/abis_rsl.c</span><br><span>+++ b/src/osmo-bsc/abis_rsl.c</span><br><span>@@ -70,7 +70,7 @@</span><br><span>  OSMO_ASSERT(bts);</span><br><span> </span><br><span>        if (lchan->type == GSM_LCHAN_TCH_H) {</span><br><span style="color: hsl(0, 100%, 40%);">-                switch (lchan->current_ch_mode_rate.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+           switch (gsm48_chan_mode_to_non_vamos(lchan->current_ch_mode_rate.chan_mode)) {</span><br><span>            case GSM48_CMODE_SPEECH_AMR:</span><br><span>                         rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_AMR_H]);</span><br><span>                    break;</span><br><span>@@ -81,7 +81,7 @@</span><br><span>                   break;</span><br><span>               }</span><br><span>    } else if (lchan->type == GSM_LCHAN_TCH_F) {</span><br><span style="color: hsl(0, 100%, 40%);">-         switch (lchan->current_ch_mode_rate.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+           switch (gsm48_chan_mode_to_non_vamos(lchan->current_ch_mode_rate.chan_mode)) {</span><br><span>            case GSM48_CMODE_SPEECH_AMR:</span><br><span>                         rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_CTR_CODEC_AMR_F]);</span><br><span>                    break;</span><br><span>@@ -389,7 +389,7 @@</span><br><span>                 return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   switch (ch_mode_rate->chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (gsm48_chan_mode_to_non_vamos(ch_mode_rate->chan_mode)) {</span><br><span>  case GSM48_CMODE_SIGN:</span><br><span>               cm->chan_rate = 0;</span><br><span>                break;</span><br><span>@@ -593,7 +593,7 @@</span><br><span>         add_power_control_params(msg, RSL_IE_BS_POWER_PARAM, lchan);</span><br><span>         add_power_control_params(msg, RSL_IE_MS_POWER_PARAM, lchan);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (lchan->activate.info.ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (gsm48_chan_mode_to_non_vamos(lchan->activate.info.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>                rc = put_mr_config_for_bts(msg, &lchan->activate.mr_conf_filtered,</span><br><span>                                       (lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half);</span><br><span>               if (rc) {</span><br><span>@@ -653,7 +653,7 @@</span><br><span>                      msgb_tlv_put(msg, RSL_IE_ENCR_INFO, rc, encr_info);</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (lchan->modify.info.ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (gsm48_chan_mode_to_non_vamos(lchan->modify.info.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>          rc = put_mr_config_for_bts(msg, &lchan->modify.mr_conf_filtered,</span><br><span>                                         (lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half);</span><br><span>               if (rc) {</span><br><span>@@ -2095,7 +2095,7 @@</span><br><span> /* Return an ip.access BTS speech mode value (uint8_t) or negative on error. */</span><br><span> int ipacc_speech_mode(enum gsm48_chan_mode tch_mode, enum gsm_chan_t type)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- switch (tch_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (gsm48_chan_mode_to_non_vamos(tch_mode)) {</span><br><span>    case GSM48_CMODE_SPEECH_V1:</span><br><span>          switch (type) {</span><br><span>              case GSM_LCHAN_TCH_F:</span><br><span>@@ -2143,7 +2143,7 @@</span><br><span> /* Return an ip.access BTS payload type value (uint8_t) or negative on error. */</span><br><span> int ipacc_payload_type(enum gsm48_chan_mode tch_mode, enum gsm_chan_t type)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   switch (tch_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (gsm48_chan_mode_to_non_vamos(tch_mode)) {</span><br><span>    case GSM48_CMODE_SPEECH_V1:</span><br><span>          switch (type) {</span><br><span>              case GSM_LCHAN_TCH_F:</span><br><span>diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c</span><br><span>index 81de958..0f38eec 100644</span><br><span>--- a/src/osmo-bsc/assignment_fsm.c</span><br><span>+++ b/src/osmo-bsc/assignment_fsm.c</span><br><span>@@ -84,7 +84,7 @@</span><br><span>           rate_ctr_inc(&conn->network->bsc_ctrs->ctr[BSC_##counter]); \</span><br><span>           if (bts) { \</span><br><span>                         rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_##counter]); \</span><br><span style="color: hsl(0, 100%, 40%);">-                   switch (conn->assignment.req.ch_mode_rate_list[0].chan_mode) { \</span><br><span style="color: hsl(120, 100%, 40%);">+                   switch (gsm48_chan_mode_to_non_vamos(conn->assignment.req.ch_mode_rate_list[0].chan_mode)) { \</span><br><span>                    case GSM48_CMODE_SIGN: \</span><br><span>                             rate_ctr_inc(&bts->bts_ctrs->ctr[BTS_##counter##_SIGN]); \</span><br><span>                                 break; \</span><br><span>@@ -317,7 +317,7 @@</span><br><span>       enum gsm48_chan_mode chan_mode = ch_mode_rate->chan_mode;</span><br><span>         enum channel_rate chan_rate = ch_mode_rate->chan_rate;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   switch (chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+  switch (gsm48_chan_mode_to_non_vamos(chan_mode)) {</span><br><span>   case GSM48_CMODE_SIGN:</span><br><span>               switch (type) {</span><br><span>              case GSM_LCHAN_TCH_F: return chan_rate == CH_RATE_FULL;</span><br><span>@@ -361,7 +361,7 @@</span><br><span> {</span><br><span>   *requires_voice = false;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    switch (chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+  switch (gsm48_chan_mode_to_non_vamos(chan_mode)) {</span><br><span>   case GSM48_CMODE_SPEECH_V1:</span><br><span>  case GSM48_CMODE_SPEECH_EFR:</span><br><span>         case GSM48_CMODE_SPEECH_AMR:</span><br><span>diff --git a/src/osmo-bsc/gsm_04_08_rr.c b/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>index c0efafb..6e86c9e 100644</span><br><span>--- a/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>+++ b/src/osmo-bsc/gsm_04_08_rr.c</span><br><span>@@ -572,7 +572,7 @@</span><br><span>  }</span><br><span> </span><br><span>        /* in case of multi rate we need to attach a config */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (new_lchan->current_ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (gsm48_chan_mode_to_non_vamos(new_lchan->current_ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>          if (put_mr_config_for_ms(msg, &new_lchan->current_mr_conf,</span><br><span>                                     (new_lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half)) {</span><br><span>                   LOG_LCHAN(new_lchan, LOGL_ERROR, "Cannot encode MultiRate Configuration IE\n");</span><br><span>@@ -638,7 +638,7 @@</span><br><span>      }</span><br><span> </span><br><span>        /* in case of multi rate we need to attach a config */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (new_lchan->current_ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (gsm48_chan_mode_to_non_vamos(new_lchan->current_ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>          int rc = put_mr_config_for_ms(msg, &new_lchan->current_mr_conf,</span><br><span>                                             (new_lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half);</span><br><span>                if (rc) {</span><br><span>@@ -696,7 +696,7 @@</span><br><span>      cmm->mode = mode;</span><br><span> </span><br><span>     /* in case of multi rate we need to attach a config */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (lchan->modify.info.ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (gsm48_chan_mode_to_non_vamos(lchan->modify.info.ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>          int rc = put_mr_config_for_ms(msg, &lchan->modify.mr_conf_filtered,</span><br><span>                                         (lchan->type == GSM_LCHAN_TCH_F) ? &bts->mr_full : &bts->mr_half);</span><br><span>            if (rc) {</span><br><span>diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c</span><br><span>index b676e2f..ea6c685 100644</span><br><span>--- a/src/osmo-bsc/gsm_data.c</span><br><span>+++ b/src/osmo-bsc/gsm_data.c</span><br><span>@@ -1066,7 +1066,7 @@</span><br><span> </span><br><span> enum rsl_cmod_spd chan_mode_to_rsl_cmod_spd(enum gsm48_chan_mode chan_mode)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      switch (chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+  switch (gsm48_chan_mode_to_non_vamos(chan_mode)) {</span><br><span>   case GSM48_CMODE_SIGN:</span><br><span>               return RSL_CMOD_SPD_SIGN;</span><br><span>    case GSM48_CMODE_SPEECH_V1:</span><br><span>diff --git a/src/osmo-bsc/handover_decision_2.c b/src/osmo-bsc/handover_decision_2.c</span><br><span>index 34bd99a..b2027d9 100644</span><br><span>--- a/src/osmo-bsc/handover_decision_2.c</span><br><span>+++ b/src/osmo-bsc/handover_decision_2.c</span><br><span>@@ -479,7 +479,7 @@</span><br><span> </span><br><span>   /* compatibility check for codecs.</span><br><span>    * if so, the candidates for full rate and half rate are selected */</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (c->current.lchan->current_ch_mode_rate.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+     switch (gsm48_chan_mode_to_non_vamos(c->current.lchan->current_ch_mode_rate.chan_mode)) {</span><br><span>      case GSM48_CMODE_SPEECH_V1:</span><br><span>          switch (c->current.lchan->type) {</span><br><span>              case GSM_LCHAN_TCH_F: /* mandatory */</span><br><span>@@ -575,7 +575,7 @@</span><br><span>  // This was useful in osmo-nitb. We're in osmo-bsc now and have no idea whether the osmo-msc does</span><br><span>        // internal or external call control. Maybe a future config switch wants to add this behavior?</span><br><span>       /* Built-in call control requires equal codec rates. Remove rates that are not equal. */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (c->current.lchan->tch_mode == GSM48_CMODE_SPEECH_AMR</span><br><span style="color: hsl(120, 100%, 40%);">+        if (gsm48_chan_mode_to_non_vamos(c->current.lchan->tch_mode) == GSM48_CMODE_SPEECH_AMR</span><br><span>             && c->current.bts->network->mncc_recv != mncc_sock_from_cc) {</span><br><span>           switch (c->current.lchan->type) {</span><br><span>              case GSM_LCHAN_TCH_F:</span><br><span>@@ -759,7 +759,7 @@</span><br><span> </span><br><span>      /* compatibility check for codecs -- we have no notion of what the remote BSS supports. We can</span><br><span>        * only assume that a handover would work, and use only the local requirements. */</span><br><span style="color: hsl(0, 100%, 40%);">-      switch (c->current.lchan->current_ch_mode_rate.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+     switch (gsm48_chan_mode_to_non_vamos(c->current.lchan->current_ch_mode_rate.chan_mode)) {</span><br><span>      case GSM48_CMODE_SPEECH_V1:</span><br><span>          switch (c->current.lchan->type) {</span><br><span>              case GSM_LCHAN_TCH_F: /* mandatory */</span><br><span>@@ -817,7 +817,7 @@</span><br><span>  bool full_rate = false;</span><br><span> </span><br><span>  /* afs_bias becomes > 0, if AFS is used and is improved */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (c->current.lchan->current_ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR)</span><br><span style="color: hsl(120, 100%, 40%);">+ if (gsm48_chan_mode_to_non_vamos(c->current.lchan->current_ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR)</span><br><span>          afs_bias = ho_get_hodec2_afs_bias_rxlev(c->target.bts->ho);</span><br><span> </span><br><span>        /* select TCH rate, prefer TCH/F if AFS is improved */</span><br><span>@@ -1247,7 +1247,7 @@</span><br><span> static int find_alternative_lchan(struct gsm_lchan *lchan, bool include_weaker_rxlev)</span><br><span> {</span><br><span>         struct gsm_bts *bts = lchan->ts->trx->bts;</span><br><span style="color: hsl(0, 100%, 40%);">-     int ahs = (lchan->current_ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR</span><br><span style="color: hsl(120, 100%, 40%);">+ int ahs = (gsm48_chan_mode_to_non_vamos(lchan->current_ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR</span><br><span>             && lchan->type == GSM_LCHAN_TCH_H);</span><br><span>    int rxlev_current;</span><br><span>   struct ho_candidate clist[1 + ARRAY_SIZE(lchan->neigh_meas)];</span><br><span>@@ -1455,7 +1455,7 @@</span><br><span> </span><br><span>         /* improve levels in case of AFS, if defined */</span><br><span>      if (lchan->type == GSM_LCHAN_TCH_F</span><br><span style="color: hsl(0, 100%, 40%);">-    && lchan->current_ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+      && gsm48_chan_mode_to_non_vamos(lchan->current_ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>              int av_rxlev_was = av_rxlev;</span><br><span>                 int av_rxqual_was = av_rxqual;</span><br><span>               int rxlev_bias = ho_get_hodec2_afs_bias_rxlev(bts->ho);</span><br><span>diff --git a/src/osmo-bsc/handover_fsm.c b/src/osmo-bsc/handover_fsm.c</span><br><span>index b7658c5..ec70be3 100644</span><br><span>--- a/src/osmo-bsc/handover_fsm.c</span><br><span>+++ b/src/osmo-bsc/handover_fsm.c</span><br><span>@@ -594,7 +594,7 @@</span><br><span> </span><br><span> static bool chan_mode_is_tch(enum gsm48_chan_mode mode)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   switch (mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+       switch (gsm48_chan_mode_to_non_vamos(mode)) {</span><br><span>        case GSM48_CMODE_SPEECH_V1:</span><br><span>  case GSM48_CMODE_SPEECH_EFR:</span><br><span>         case GSM48_CMODE_SPEECH_AMR:</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 1610ac3..a28f58d 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -628,7 +628,7 @@</span><br><span>                      lchan->bs_power = bts->bs_power_ctrl.bs_power_val_db / 2;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (info->ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (gsm48_chan_mode_to_non_vamos(info->ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>               if (lchan_mr_config(&lchan->activate.mr_conf_filtered, lchan, info->ch_mode_rate.s15_s0) < 0) {</span><br><span>                         lchan_fail("Can not generate multirate configuration IE\n");</span><br><span>                       return;</span><br><span>@@ -1124,7 +1124,7 @@</span><br><span> </span><br><span>          use_mgwep_ci = lchan_use_mgw_endpoint_ci_bts(lchan);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                if (modif_info->ch_mode_rate.chan_mode == GSM48_CMODE_SPEECH_AMR) {</span><br><span style="color: hsl(120, 100%, 40%);">+                if (gsm48_chan_mode_to_non_vamos(modif_info->ch_mode_rate.chan_mode) == GSM48_CMODE_SPEECH_AMR) {</span><br><span>                         if (lchan_mr_config(&lchan->modify.mr_conf_filtered, lchan, modif_info->ch_mode_rate.s15_s0)</span><br><span>                           < 0) {</span><br><span>                                lchan_fail("Can not generate multirate configuration IE\n");</span><br><span>diff --git a/src/osmo-bsc/lchan_rtp_fsm.c b/src/osmo-bsc/lchan_rtp_fsm.c</span><br><span>index 366bd1b..7945359 100644</span><br><span>--- a/src/osmo-bsc/lchan_rtp_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_rtp_fsm.c</span><br><span>@@ -796,7 +796,7 @@</span><br><span> /* Depending on the channel mode and rate, return the codec type that is signalled towards the MGW. */</span><br><span> static enum mgcp_codecs chan_mode_to_mgcp_codec(enum gsm48_chan_mode chan_mode, bool full_rate)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     switch (chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+  switch (gsm48_chan_mode_to_non_vamos(chan_mode)) {</span><br><span>   case GSM48_CMODE_SPEECH_V1:</span><br><span>          if (full_rate)</span><br><span>                       return CODEC_GSM_8000_1;</span><br><span>diff --git a/src/osmo-bsc/lchan_select.c b/src/osmo-bsc/lchan_select.c</span><br><span>index dba3c3a..53c4358 100644</span><br><span>--- a/src/osmo-bsc/lchan_select.c</span><br><span>+++ b/src/osmo-bsc/lchan_select.c</span><br><span>@@ -146,7 +146,7 @@</span><br><span> </span><br><span> enum gsm_chan_t chan_mode_to_chan_type(enum gsm48_chan_mode chan_mode, enum channel_rate chan_rate)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- switch (chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+  switch (gsm48_chan_mode_to_non_vamos(chan_mode)) {</span><br><span>   case GSM48_CMODE_SIGN:</span><br><span>               switch (chan_rate) {</span><br><span>                 case CH_RATE_SDCCH:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24459">change 24459</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-bsc/+/24459"/><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-Change-Id: I791e7966b1f8eaa3299a8a46abeb313cf5136e0b </div>
<div style="display:none"> Gerrit-Change-Number: 24459 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>