<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26672">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
osmith: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">hnodeb: Updates in HNBLLIF and HNBGW_COnnectioNHandler to support and test IuUP<br><br>Depends: osmo-hnodeb.git Change-Id Ibe356fa7b1abaca0091e368db8478e79c09c6cb0<br>Related: SYS#5516<br>Change-Id: I19612fce8190dfe14f98d346adb5db4e1c2a08d9<br>---<br>M hnodeb/HNBGW_ConnectionHandler.ttcn<br>M hnodeb/HNB_Tests.ttcn<br>M library/HNBLLIF_Templates.ttcn<br>M library/HNBLLIF_Types.ttcn<br>4 files changed, 116 insertions(+), 20 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/hnodeb/HNBGW_ConnectionHandler.ttcn b/hnodeb/HNBGW_ConnectionHandler.ttcn</span><br><span>index a3ff32f..ac280b0 100644</span><br><span>--- a/hnodeb/HNBGW_ConnectionHandler.ttcn</span><br><span>+++ b/hnodeb/HNBGW_ConnectionHandler.ttcn</span><br><span>@@ -248,13 +248,14 @@</span><br><span> }</span><br><span> </span><br><span> /* Initialize and start the RTP emulation component for a ConnHdlr */</span><br><span style="color: hsl(0, 100%, 40%);">-function f_HNBGW_rtpem_activate(inout octetstring payload,</span><br><span style="color: hsl(0, 100%, 40%);">- HostName remote_host,</span><br><span style="color: hsl(0, 100%, 40%);">- PortNumber remote_port,</span><br><span style="color: hsl(0, 100%, 40%);">- RtpemConfig cfg := c_RtpemDefaultCfg,</span><br><span style="color: hsl(0, 100%, 40%);">- RtpemMode mode := RTPEM_MODE_BIDIR)</span><br><span style="color: hsl(120, 100%, 40%);">+function f_HNBGW_rtpem_activate(inout octetstring payload)</span><br><span> runs on HNBGW_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">- /* Step 0: initialize, connect and start the emulation component */</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Initialize, connect and start the emulation component */</span><br><span style="color: hsl(120, 100%, 40%);">+ var RtpemConfig cfg := c_RtpemDefaultCfg;</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg.iuup_mode := true;</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg.iuup_tx_init := false;</span><br><span style="color: hsl(120, 100%, 40%);">+ cfg.tx_payload_type := 96;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> vc_RTPEM := RTP_Emulation_CT.create(testcasename() & "-RTPEM") alive;</span><br><span> map(vc_RTPEM:RTP, system:RTP);</span><br><span> map(vc_RTPEM:RTCP, system:RTCP);</span><br><span>@@ -274,11 +275,15 @@</span><br><span> /* Bind the RTP emulation to the configured address */</span><br><span> f_rtpem_bind(RTPEM_CTRL, g_pars.hnbgw_addr, g_pars.hnbgw_rtp_port);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Connect to the IUT's address/port parsed from CRCX ACK */</span><br><span style="color: hsl(0, 100%, 40%);">- f_rtpem_connect(RTPEM_CTRL, remote_host, remote_port);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Set the given RTP emulation mode */</span><br><span style="color: hsl(0, 100%, 40%);">- f_rtpem_mode(RTPEM_CTRL, mode);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rtpem_mode(RTPEM_CTRL, RTPEM_MODE_RXONLY);</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%);">+function f_HNBGW_rtpem_connect(HostName remote_host, PortNumber remote_port)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on HNBGW_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rtpem_connect(RTPEM_CTRL, remote_host, remote_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Set the given RTP emulation mode */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rtpem_mode(RTPEM_CTRL, RTPEM_MODE_BIDIR);</span><br><span> }</span><br><span> </span><br><span> }</span><br><span>diff --git a/hnodeb/HNB_Tests.ttcn b/hnodeb/HNB_Tests.ttcn</span><br><span>index c801ee6..a58e203 100644</span><br><span>--- a/hnodeb/HNB_Tests.ttcn</span><br><span>+++ b/hnodeb/HNB_Tests.ttcn</span><br><span>@@ -56,6 +56,8 @@</span><br><span> import from GTP_Templates all;</span><br><span> import from GTP_Emulation all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from IuUP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> modulepar {</span><br><span> /* IP address at which the HNodeB can be reached */</span><br><span> charstring mp_hnodeb_ip := "127.0.0.1";</span><br><span>@@ -297,6 +299,10 @@</span><br><span> var PortNumber hnodeb_rtp_port;</span><br><span> timer Tu;</span><br><span> var uint32_t audio_conn_id;</span><br><span style="color: hsl(120, 100%, 40%);">+ var IuUP_FQC fqc := IuUP_FQC_GOOD;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp_payload := f_rnd_octstring(6);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_HNBGW_rtpem_activate(rtp_payload);</span><br><span> </span><br><span> f_handle_hnbap_hnb_register_req();</span><br><span> </span><br><span>@@ -326,11 +332,22 @@</span><br><span> Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "hnodeb RTP local address doesn't match expectations");</span><br><span> }</span><br><span> hnodeb_rtp_port := sd.data.u.audio.u.conn_establish.u.cnf.local_rtp_port;</span><br><span style="color: hsl(0, 100%, 40%);">- rtp_payload := f_rnd_octstring(6);</span><br><span style="color: hsl(0, 100%, 40%);">- f_HNBGW_rtpem_activate(rtp_payload, hnodeb_rtp_addr, hnodeb_rtp_port);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_HNBGW_rtpem_connect(hnodeb_rtp_addr, hnodeb_rtp_port);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* We should eventually receive some RTP/IUUP from the HNBGW once Init phase goes on: */</span><br><span style="color: hsl(120, 100%, 40%);">+ Tu.start(2.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] LLSK.receive(f_llsk_rx(tr_HNBLLIF_AUDIO_CONN_DATA_IND(audio_conn_id, ?, enum2int(fqc), ?, rtp_payload)));</span><br><span style="color: hsl(120, 100%, 40%);">+ [] Tu.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for Downlink speech frames");</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%);">+ Tu.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rtpem_mode(RTPEM_CTRL, RTPEM_MODE_RXONLY);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Make sure that Uplink frames are received at the HNBGW */</span><br><span> RTPEM_DATA.clear;</span><br><span style="color: hsl(0, 100%, 40%);">- LLSK.send(f_llsk_tx(ts_HNBLLIF_AUDIO_CONN_DATA_REQ(audio_conn_id, rtp_payload)));</span><br><span style="color: hsl(120, 100%, 40%);">+ LLSK.send(f_llsk_tx(ts_HNBLLIF_AUDIO_CONN_DATA_REQ(audio_conn_id, 1, enum2int(fqc), 0, rtp_payload)));</span><br><span> Tu.start(2.0);</span><br><span> alt {</span><br><span> [] RTPEM_DATA.receive(PDU_RTP:?) -> value rtp_pdu {</span><br><span>@@ -345,10 +362,9 @@</span><br><span> }</span><br><span> }</span><br><span> Tu.stop;</span><br><span style="color: hsl(0, 100%, 40%);">- /* We should also have received some RTP from the HNBGW: */</span><br><span style="color: hsl(0, 100%, 40%);">- LLSK.receive(f_llsk_rx(tr_HNBLLIF_AUDIO_CONN_DATA_IND(audio_conn_id, rtp_payload)));</span><br><span> </span><br><span> f_rtpem_mode(RTPEM_CTRL, RTPEM_MODE_NONE);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_sleep(0.5); /* give some time to RTP_Emu to stop sending RTP packets... */</span><br><span> </span><br><span> LLSK.send(f_llsk_tx(ts_HNBLLIF_AUDIO_CONN_RELEASE_REQ(audio_conn_id)));</span><br><span> </span><br><span>diff --git a/library/HNBLLIF_Templates.ttcn b/library/HNBLLIF_Templates.ttcn</span><br><span>index fc82a72..6aee659 100644</span><br><span>--- a/library/HNBLLIF_Templates.ttcn</span><br><span>+++ b/library/HNBLLIF_Templates.ttcn</span><br><span>@@ -251,11 +251,42 @@</span><br><span> /**********************</span><br><span> * AUDIO SAPI</span><br><span> **********************/</span><br><span style="color: hsl(120, 100%, 40%);">+const HNBLLIF_AUDIO_IPTIs IPTIs_default := {</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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%);">+private function f_subflow_sizes_default() return HNBLLIF_AUDIO_SubflowSizes</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ var HNBLLIF_AUDIO_SubflowSizes ss;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer i := 0; i < HNBLLIF_MAX_RFCIS; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer j := 0; j < HNBLLIF_MAX_SUBFLOWS; j := j + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+ ss[i][j] := 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ss[0][0] := 81; ss[0][1] := 103; ss[0][2] := 60;</span><br><span style="color: hsl(120, 100%, 40%);">+ ss[1][0] := 39; ss[1][1] := 0; ss[1][2] := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ ss[2][0] := 0; ss[2][1] := 0; ss[2][2] := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return ss;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_ESTABLISH_REQ(template (value) uint32_t context_id,</span><br><span> template (value) uint16_t remote_rtp_port,</span><br><span> template (value) HNBLLIF_AddrType remote_rtp_address_type,</span><br><span style="color: hsl(0, 100%, 40%);">- template (value) HNBLLIF_Addr remote_addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) HNBLLIF_Addr remote_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t transparent := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t data_pdu_type := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t supported_versions_mask := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t num_rfci := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t num_subflows := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) HNBLLIF_AUDIO_SubflowSizes subflow_sizes := f_subflow_sizes_default(),</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t IPTIs_present := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) HNBLLIF_AUDIO_IPTIs IPTIs := IPTIs_default) := {</span><br><span> sapi := HNBLL_IF_SAPI_AUDIO,</span><br><span> u := {</span><br><span> audio := {</span><br><span>@@ -269,7 +300,15 @@</span><br><span> remote_rtp_port := remote_rtp_port,</span><br><span> reserved := 0,</span><br><span> remote_rtp_address_type := remote_rtp_address_type,</span><br><span style="color: hsl(0, 100%, 40%);">- remote_addr := remote_addr</span><br><span style="color: hsl(120, 100%, 40%);">+ remote_addr := remote_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ transparent := transparent,</span><br><span style="color: hsl(120, 100%, 40%);">+ data_pdu_type := data_pdu_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ supported_versions_mask := supported_versions_mask,</span><br><span style="color: hsl(120, 100%, 40%);">+ num_rfci := num_rfci,</span><br><span style="color: hsl(120, 100%, 40%);">+ num_subflows := num_subflows,</span><br><span style="color: hsl(120, 100%, 40%);">+ subflow_sizes := subflow_sizes,</span><br><span style="color: hsl(120, 100%, 40%);">+ IPTIs_present := IPTIs_present,</span><br><span style="color: hsl(120, 100%, 40%);">+ IPTIs := IPTIs</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span>@@ -327,7 +366,10 @@</span><br><span> }</span><br><span> </span><br><span> template (present) HNBLLIF_Message tr_HNBLLIF_AUDIO_CONN_DATA_IND(template (present) uint32_t audio_conn_id := ?,</span><br><span style="color: hsl(0, 100%, 40%);">- template (present) octetstring data := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ template (present) uint8_t frame_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (present) uint8_t fqc := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (present) uint8_t rfci := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (present) octetstring data := ?) := {</span><br><span> sapi := HNBLL_IF_SAPI_AUDIO,</span><br><span> u := {</span><br><span> audio := {</span><br><span>@@ -338,6 +380,10 @@</span><br><span> u := {</span><br><span> ind := {</span><br><span> audio_conn_id := audio_conn_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ frame_nr := frame_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ fqc := fqc,</span><br><span style="color: hsl(120, 100%, 40%);">+ rfci := rfci,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := 0,</span><br><span> data_len := ?,</span><br><span> data := data</span><br><span> }</span><br><span>@@ -349,6 +395,9 @@</span><br><span> }</span><br><span> </span><br><span> template (value) HNBLLIF_Message ts_HNBLLIF_AUDIO_CONN_DATA_REQ(template (value) uint32_t audio_conn_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t frame_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t fqc,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t rfci,</span><br><span> template (value) octetstring data) := {</span><br><span> sapi := HNBLL_IF_SAPI_AUDIO,</span><br><span> u := {</span><br><span>@@ -360,6 +409,10 @@</span><br><span> u := {</span><br><span> req := {</span><br><span> audio_conn_id := audio_conn_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ frame_nr := frame_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ fqc := fqc,</span><br><span style="color: hsl(120, 100%, 40%);">+ rfci := rfci,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := 0,</span><br><span> data_len := lengthof(data),</span><br><span> data := data</span><br><span> }</span><br><span>diff --git a/library/HNBLLIF_Types.ttcn b/library/HNBLLIF_Types.ttcn</span><br><span>index a3a6c4c..fa44f11 100644</span><br><span>--- a/library/HNBLLIF_Types.ttcn</span><br><span>+++ b/library/HNBLLIF_Types.ttcn</span><br><span>@@ -241,14 +241,28 @@</span><br><span> HNBLL_IF_AUDIO_MSG_CONN_DATA ('0002'O)</span><br><span> } with { variant "FIELDLENGTH(16)" };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const integer HNBLLIF_MAX_RFCIS := 64;</span><br><span style="color: hsl(120, 100%, 40%);">+const integer HNBLLIF_MAX_SUBFLOWS := 7;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(HNBLLIF_MAX_RFCIS) of uint8_t HNBLLIF_AUDIO_IPTIs;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(HNBLLIF_MAX_SUBFLOWS) of uint16_t HNBLLIF_AUDIO_RFCI_SubflowSizes;</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(HNBLLIF_MAX_RFCIS) of HNBLLIF_AUDIO_RFCI_SubflowSizes HNBLLIF_AUDIO_SubflowSizes;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* CONN_ESTABLISH */</span><br><span> type record HNBLLIF_AUDIO_conn_establish_req {</span><br><span> uint32_t context_id,</span><br><span> uint16_t remote_rtp_port,</span><br><span> uint8_t reserved,</span><br><span> HNBLLIF_AddrType remote_rtp_address_type,</span><br><span style="color: hsl(0, 100%, 40%);">- HNBLLIF_Addr remote_addr</span><br><span style="color: hsl(0, 100%, 40%);">-} with { variant "" };</span><br><span style="color: hsl(120, 100%, 40%);">+ HNBLLIF_Addr remote_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t transparent, /* 1=transparent; 0=SMpSDU */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t data_pdu_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t supported_versions_mask, /* host byte order */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t num_rfci,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t num_subflows,</span><br><span style="color: hsl(120, 100%, 40%);">+ HNBLLIF_AUDIO_SubflowSizes subflow_sizes,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t IPTIs_present, /* 1=present; 0=not present */</span><br><span style="color: hsl(120, 100%, 40%);">+ HNBLLIF_AUDIO_IPTIs IPTIs /* values range 0-15, 4 bits */</span><br><span style="color: hsl(120, 100%, 40%);">+} with { variant "" };</span><br><span> </span><br><span> type record HNBLLIF_AUDIO_conn_establish_cnf {</span><br><span> uint32_t context_id,</span><br><span>@@ -292,12 +306,20 @@</span><br><span> /* CONN_DATA */</span><br><span> type record HNBLLIF_AUDIO_conn_data_ind {</span><br><span> uint32_t audio_conn_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t frame_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t fqc, /* enumerated IuUP_FQC */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t rfci,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t spare,</span><br><span> uint32_t data_len,</span><br><span> octetstring data /* RANAP message */</span><br><span> } with { variant (data_len) "LENGTHTO (data)" };</span><br><span> </span><br><span> type record HNBLLIF_AUDIO_conn_data_req {</span><br><span> uint32_t audio_conn_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t frame_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t fqc, /* enumerated IuUP_FQC */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t rfci,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t spare,</span><br><span> uint32_t data_len,</span><br><span> octetstring data /* RANAP message */</span><br><span> } with { variant (data_len) "LENGTHTO (data)" };</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26672">change 26672</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/+/26672"/><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: I19612fce8190dfe14f98d346adb5db4e1c2a08d9 </div>
<div style="display:none"> Gerrit-Change-Number: 26672 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>