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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: test RR Channel Release EARFCNs<br><br>Add a DCHAN and release to recently added SI2quater tests (because these tests<br>already configure various amounts of EARFCNs in osmo-bsc).<br><br>Verify that the RR Channel Release for CSFB contains all configured EARFCNs.<br><br>In GSM_RR_Types.ttcn, add coding for "Cell selection indicator after release of<br>all TCH and SDCCH IE".<br><br>In f_expect_chan_rel(), add optional arg csfb_expect_cells, and, if present,<br>decode the RR Channel Release message's L3 part, and in turn the Cell Selection<br>Indicator Value contained. Match against csfb_expect_cells.<br><br>In f_tc_si2quater_n_earfcns(), also compose a list of EARFCNs as found in the<br>RR Channel Release, and pass to f_expect_chan_rel().<br><br>Depends: I59e427e4ebb1c6af99b27a15c40fed82457ac8ab (osmo-bsc)<br>Change-Id: I882c5e1f70bcc4833fc837a95c900ce291919cc5<br>---<br>M bsc/BSC_Tests.ttcn<br>M library/GSM_RR_Types.ttcn<br>2 files changed, 170 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 903d5d7..660e758 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -1498,13 +1498,15 @@</span><br><span>                     boolean expect_rr_chan_rel := true,</span><br><span>                          boolean expect_rll_rel_req := true,</span><br><span>                          boolean handle_rll_rel := true,</span><br><span style="color: hsl(0, 100%, 40%);">-                         boolean is_csfb := false</span><br><span style="color: hsl(120, 100%, 40%);">+                      boolean is_csfb := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                     template CellSelIndValue csfb_expect_cells := omit</span><br><span>                           ) runs on test_CT {</span><br><span> </span><br><span>   var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));</span><br><span>    var boolean got_deact_sacch := false;</span><br><span>        var boolean got_rr_chan_rel := false;</span><br><span>        var boolean got_rll_rel_req := false;</span><br><span style="color: hsl(120, 100%, 40%);">+ var ASP_RSL_Unitdata ud;</span><br><span>     log("f_expect_chan_rel() expecting: expect_deact_sacch=", expect_deact_sacch, " expect_rr_chan_rel=", expect_rr_chan_rel,</span><br><span>            " expect_rll_rel_req=", expect_rll_rel_req);</span><br><span>   alt {</span><br><span>@@ -1512,8 +1514,27 @@</span><br><span>               got_deact_sacch := true;</span><br><span>             repeat;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       [is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE_CSFB))) {</span><br><span style="color: hsl(120, 100%, 40%);">+  [is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE_CSFB))) -> value ud {</span><br><span>          got_rr_chan_rel := true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            if (not istemplatekind(csfb_expect_cells, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        var RSL_IE_Body l3_ie;</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (f_rsl_find_ie(ud.rsl, RSL_IE_L3_INFO, l3_ie) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          setverdict(fail, "cannot find L3");</span><br><span style="color: hsl(120, 100%, 40%);">+                         mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     var PDU_ML3_NW_MS l3 := dec_PDU_ML3_NW_MS(l3_ie.l3_info.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+                     var CellSelIndValue cells := dec_CellSelIndValue(</span><br><span style="color: hsl(120, 100%, 40%);">+                             l3.msgs.rrm.channelRelease.cellSelectionIndicator.cellSelectionIndicatorValue);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     log("GOT RR CHANNEL RELEASE CSFB CELLS: ", cells);</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (match(cells, csfb_expect_cells)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              log("EXPECTED CSFB CELLS: ", csfb_expect_cells);</span><br><span style="color: hsl(120, 100%, 40%);">+                            setverdict(fail, "Received CSFB cells list on RR Channel Release does not match expectations");</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            repeat;</span><br><span>      }</span><br><span>    [not is_csfb] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(tr_RSL_DATA_REQ(rsl_chan_nr, ?, decmatch tr_RRM_RR_RELEASE))) {</span><br><span>@@ -1792,7 +1813,8 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_test_si2quater(integer total_earfcns, template SystemInformationConfig expect_si) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_test_si2quater(integer total_earfcns, template SystemInformationConfig expect_si,</span><br><span style="color: hsl(120, 100%, 40%);">+                          template CellSelIndValue expect_cells := omit) runs on test_CT {</span><br><span> </span><br><span>       f_init(0);</span><br><span> </span><br><span>@@ -1804,6 +1826,30 @@</span><br><span> </span><br><span>  f_init_bts_and_check_sysinfo(0, expect_si := expect_si);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  f_init(1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (not istemplatekind(expect_cells, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Also check that RR Channel Release contains these EARFCNs.</span><br><span style="color: hsl(120, 100%, 40%);">+          * (copied code from TC_chan_rel_hard_clear_csfb) */</span><br><span style="color: hsl(120, 100%, 40%);">+          var BSSAP_N_DATA_ind rx_di;</span><br><span style="color: hsl(120, 100%, 40%);">+           var DchanTuple dt;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          dt := f_est_dchan('23'O, 23, '00010203040506'O);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Instruct BSC to clear channel */</span><br><span style="color: hsl(120, 100%, 40%);">+           var BssmapCause cause := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+           BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommandCSFB(cause)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          /* expect Clear Complete from BSC on A */</span><br><span style="color: hsl(120, 100%, 40%);">+             BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* release the SCCP connection */</span><br><span style="color: hsl(120, 100%, 40%);">+                     BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));</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%);">+           f_expect_chan_rel(0, dt.rsl_chan_nr, expect_rll_rel_req := false, is_csfb := true,</span><br><span style="color: hsl(120, 100%, 40%);">+                              csfb_expect_cells := expect_cells);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  for (var integer i := 1; i < total_earfcns; i := i + 1) {</span><br><span>                 f_bts_0_cfg(BSCVTY, {"si2quater neighbor-list del earfcn " & int2str(f_test_si2quater_earfcn_by_idx(i))});</span><br><span>     }</span><br><span>@@ -1827,11 +1873,24 @@</span><br><span>  return si2quater;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tr_rr_chan_rel_earfcns(integer count) return template CellSelIndValue</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       var template CellSelIndValue_EUTRAN_Descrs cells := {};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     for (var integer i := 0; i < count; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          var integer earfcn := f_test_si2quater_earfcn_by_idx(i);</span><br><span style="color: hsl(120, 100%, 40%);">+              cells[i] := tr_CellSelIndValue_EUTRAN_Descr(earfcn, meas_bw_presence := '0'B, meas_bw := omit);</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 tr_CellSelIndValue_EUTRAN(cells);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_si2quater_n_earfcns(integer n) runs on test_CT</span><br><span> {</span><br><span>   var template SystemInformationConfig sic := SystemInformationConfig_default;</span><br><span>         sic.si2quater := f_tr_si2quater_earfcns(n);</span><br><span style="color: hsl(0, 100%, 40%);">-     f_test_si2quater(n, sic);</span><br><span style="color: hsl(120, 100%, 40%);">+     var template CellSelIndValue cells := f_tr_rr_chan_rel_earfcns(n);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_test_si2quater(n, sic, cells);</span><br><span> }</span><br><span> </span><br><span> testcase TC_si2quater_2_earfcns() runs on test_CT {</span><br><span>diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn</span><br><span>index c12ebd1..e54bc92 100644</span><br><span>--- a/library/GSM_RR_Types.ttcn</span><br><span>+++ b/library/GSM_RR_Types.ttcn</span><br><span>@@ -1106,4 +1106,111 @@</span><br><span>          maio_hsn := maio_hsn</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Templates for the RR Channel Release message's "Cell selection indicator after release of all TCH and SDCCH" IE.</span><br><span style="color: hsl(120, 100%, 40%);">+      * See 3GPP TS 44.018 9.1.7 and 10.5.2.1e */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /* 3GPP TS 44.018 10.5.2.1e, Cell Selection Indicator after release of all TCH and SDCCH value part */</span><br><span style="color: hsl(120, 100%, 40%);">+        type record CellSelIndValue {</span><br><span style="color: hsl(120, 100%, 40%);">+         BIT3         discr,</span><br><span style="color: hsl(120, 100%, 40%);">+           CellSelIndValueEnum value_list,</span><br><span style="color: hsl(120, 100%, 40%);">+               BIT1         value_list_term ('0'B)</span><br><span style="color: hsl(120, 100%, 40%);">+   } with {</span><br><span style="color: hsl(120, 100%, 40%);">+              variant (value_list) "CROSSTAG(</span><br><span style="color: hsl(120, 100%, 40%);">+            gsm, discr='000'B;</span><br><span style="color: hsl(120, 100%, 40%);">+            utran_fdd, discr='001'B;</span><br><span style="color: hsl(120, 100%, 40%);">+              utran_tdd, discr='010'B;</span><br><span style="color: hsl(120, 100%, 40%);">+              eutran, discr='011'B;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* 3GPP TS 44.018 10.5.2.1e, Cell Selection Indicator after release of all TCH and SDCCH value part */</span><br><span style="color: hsl(120, 100%, 40%);">+        private type union CellSelIndValueEnum {</span><br><span style="color: hsl(120, 100%, 40%);">+              CellSelIndValue_GSM_Descrs gsm,</span><br><span style="color: hsl(120, 100%, 40%);">+               CellSelIndValue_UTRAN_Descrs utran_fdd,</span><br><span style="color: hsl(120, 100%, 40%);">+               CellSelIndValue_UTRAN_Descrs utran_tdd,</span><br><span style="color: hsl(120, 100%, 40%);">+               CellSelIndValue_EUTRAN_Descrs eutran</span><br><span style="color: hsl(120, 100%, 40%);">+  } with { variant "" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    type record of CellSelIndValue_GSM_Descr CellSelIndValue_GSM_Descrs;</span><br><span style="color: hsl(120, 100%, 40%);">+  /* 3GPP TS 44.018 10.5.2.1e, GSM Description struct */</span><br><span style="color: hsl(120, 100%, 40%);">+        type record CellSelIndValue_GSM_Descr {</span><br><span style="color: hsl(120, 100%, 40%);">+               BIT1        item_ind ('1'B),</span><br><span style="color: hsl(120, 100%, 40%);">+          BIT1        band_indicator,</span><br><span style="color: hsl(120, 100%, 40%);">+           uint10_t    arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+            uint6_t     bsic</span><br><span style="color: hsl(120, 100%, 40%);">+      } with {</span><br><span style="color: hsl(120, 100%, 40%);">+              variant "PRESENCE(item_ind = '1'B)"</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%);">+  type record of CellSelIndValue_UTRAN_Descr CellSelIndValue_UTRAN_Descrs;</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 3GPP TS 44.018 10.5.2.1e, UTRAN {FDD,TDD} Description struct */</span><br><span style="color: hsl(120, 100%, 40%);">+    type record CellSelIndValue_UTRAN_Descr {</span><br><span style="color: hsl(120, 100%, 40%);">+             BIT1        item_ind ('1'B),</span><br><span style="color: hsl(120, 100%, 40%);">+          BIT1        bandwidth_presence,</span><br><span style="color: hsl(120, 100%, 40%);">+               uint3_t     bandwidth optional,</span><br><span style="color: hsl(120, 100%, 40%);">+               uint14_t    arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+            BIT1        cell_info_presence,</span><br><span style="color: hsl(120, 100%, 40%);">+               UTRAN_CellInfo cell_info optional</span><br><span style="color: hsl(120, 100%, 40%);">+     } with {</span><br><span style="color: hsl(120, 100%, 40%);">+              variant "PRESENCE(item_ind = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+         variant (bandwidth) "PRESENCE(bandwidth_presence = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+           variant (cell_info) "PRESENCE(cell_info_presence = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+   };</span><br><span style="color: hsl(120, 100%, 40%);">+    type record UTRAN_CellInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+          BIT1        indic0,</span><br><span style="color: hsl(120, 100%, 40%);">+           uint5_t     nr_of_cells,</span><br><span style="color: hsl(120, 100%, 40%);">+              // TODO: define cell_information_field</span><br><span style="color: hsl(120, 100%, 40%);">+                octetstring cell_information_field</span><br><span style="color: hsl(120, 100%, 40%);">+    } with { variant "" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    type record of CellSelIndValue_EUTRAN_Descr CellSelIndValue_EUTRAN_Descrs;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 3GPP TS 44.018 10.5.2.1e, E-UTRAN Description struct */</span><br><span style="color: hsl(120, 100%, 40%);">+    type record CellSelIndValue_EUTRAN_Descr {</span><br><span style="color: hsl(120, 100%, 40%);">+            BIT1        item_ind ('1'B),</span><br><span style="color: hsl(120, 100%, 40%);">+          uint16_t    earfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+           BIT1        meas_bw_presence,</span><br><span style="color: hsl(120, 100%, 40%);">+         uint3_t     meas_bw optional,</span><br><span style="color: hsl(120, 100%, 40%);">+         BIT1        not_allowed_cells_presence,</span><br><span style="color: hsl(120, 100%, 40%);">+               // define not_allowed_cells</span><br><span style="color: hsl(120, 100%, 40%);">+           octetstring not_allowed_cells optional,</span><br><span style="color: hsl(120, 100%, 40%);">+               BIT1        target_pcid_presence,</span><br><span style="color: hsl(120, 100%, 40%);">+             uint9_t     target_pcid optional</span><br><span style="color: hsl(120, 100%, 40%);">+      } with {</span><br><span style="color: hsl(120, 100%, 40%);">+              variant "PRESENCE(item_ind = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+         variant (meas_bw) "PRESENCE(meas_bw_presence = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+               variant (not_allowed_cells) "PRESENCE(not_allowed_cells_presence = '1'B)"</span><br><span style="color: hsl(120, 100%, 40%);">+           variant (target_pcid) "PRESENCE(target_pcid_presence = '1'B)"</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%);">+  template CellSelIndValue tr_CellSelIndValue_EUTRAN(</span><br><span style="color: hsl(120, 100%, 40%);">+                   template CellSelIndValue_EUTRAN_Descrs cells := {})</span><br><span style="color: hsl(120, 100%, 40%);">+   := {</span><br><span style="color: hsl(120, 100%, 40%);">+          discr := '011'B,</span><br><span style="color: hsl(120, 100%, 40%);">+              value_list := {</span><br><span style="color: hsl(120, 100%, 40%);">+                       eutran := cells</span><br><span style="color: hsl(120, 100%, 40%);">+               },</span><br><span style="color: hsl(120, 100%, 40%);">+            value_list_term := '0'B</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%);">+  template CellSelIndValue_EUTRAN_Descr tr_CellSelIndValue_EUTRAN_Descr(</span><br><span style="color: hsl(120, 100%, 40%);">+                        template (present) uint16_t earfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+                   template (present) BIT1 meas_bw_presence := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                        template uint3_t meas_bw := *)</span><br><span style="color: hsl(120, 100%, 40%);">+        := {</span><br><span style="color: hsl(120, 100%, 40%);">+          item_ind := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             earfcn := earfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+             meas_bw_presence := meas_bw_presence,</span><br><span style="color: hsl(120, 100%, 40%);">+         meas_bw := meas_bw,</span><br><span style="color: hsl(120, 100%, 40%);">+           not_allowed_cells_presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+           not_allowed_cells := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            target_pcid_presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+         target_pcid := omit</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%);">+  external function enc_CellSelIndValue(in CellSelIndValue ro) return octetstring</span><br><span style="color: hsl(120, 100%, 40%);">+               with { extension "prototype(convert) encode(RAW)" };</span><br><span style="color: hsl(120, 100%, 40%);">+        external function dec_CellSelIndValue(in octetstring stream) return CellSelIndValue</span><br><span style="color: hsl(120, 100%, 40%);">+           with { extension "prototype(convert) decode(RAW)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> } with { encode "RAW" ; variant "FIELDORDER(msb)" }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19216">change 19216</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-ttcn3-hacks/+/19216"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I882c5e1f70bcc4833fc837a95c900ce291919cc5 </div>
<div style="display:none"> Gerrit-Change-Number: 19216 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>