<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>