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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: add first test to verify System Information on RSL startup<br><br>Change-Id: I6a8ef404087efee491390dc1d2452ac323f145f0<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/gen_links.sh<br>2 files changed, 439 insertions(+), 3 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 784375a..c7a6e38 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -59,6 +59,9 @@</span><br><span> </span><br><span> import from SCCPasp_Types all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from GSM_SystemInformation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from GSM_RestOctets all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> const integer NUM_BTS := 3;</span><br><span> const integer NUM_MSC := 3;</span><br><span> const float T3101_MAX := 12.0;</span><br><span>@@ -84,6 +87,358 @@</span><br><span>      { "mscpool:subscr:paged", 0 }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Set of all System Information received during one RSL port's startup.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Note that some System Information may be sent on RSL, but lacking actual SI data, to indicate that the BTS should not</span><br><span style="color: hsl(120, 100%, 40%);">+ * broadcast that SI type. That will be reflected as 'omit' here.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SystemInformationConfig {</span><br><span style="color: hsl(120, 100%, 40%);">+      SystemInformationType1 si1 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  SystemInformationType2 si2 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  SystemInformationType2bis si2bis optional,</span><br><span style="color: hsl(120, 100%, 40%);">+    SystemInformationType2ter si2ter optional,</span><br><span style="color: hsl(120, 100%, 40%);">+    record of SI2quaterRestOctets si2quater optional,</span><br><span style="color: hsl(120, 100%, 40%);">+     SystemInformationType3 si3 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  SystemInformationType4 si4 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  /* TODO: replace with proper decoding of SI13, implement SI13 in GSM_SystemInformation.ttcn */</span><br><span style="color: hsl(120, 100%, 40%);">+        octetstring si13 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+    SystemInformationType5 si5 optional,</span><br><span style="color: hsl(120, 100%, 40%);">+  SystemInformationType5bis si5bis optional,</span><br><span style="color: hsl(120, 100%, 40%);">+    SystemInformationType5ter si5ter optional,</span><br><span style="color: hsl(120, 100%, 40%);">+    SystemInformationType6 si6 optional</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%);">+const SystemInformationConfig SystemInformationConfig_omit := {</span><br><span style="color: hsl(120, 100%, 40%);">+    si1 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+  si2 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+  si2bis := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       si2ter := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       si2quater := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+    si3 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+  si4 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+  si13 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+ si5 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+  si5bis := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       si5ter := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       si6 := 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%);">+/* tr_EUTRAN_CellDesc with defaults used in BSC_Tests.ttcn */</span><br><span style="color: hsl(120, 100%, 40%);">+template EUTRAN_CellDesc tr_EUTRAN_CellDesc_default(template (present) uint16_t e_arfcn := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template uint3_t meas_bw := 3)</span><br><span style="color: hsl(120, 100%, 40%);">+:= tr_EUTRAN_CellDesc(e_arfcn := e_arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+               meas_bw_presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                     meas_bw := meas_bw);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* tr_EUTRAN_NeighbourCells with defaults used in BSC_Tests.ttcn */</span><br><span style="color: hsl(120, 100%, 40%);">+template EUTRAN_NeighbourCells tr_EUTRAN_NeighbourCells_default(template EUTRAN_CellDescs cell_desc_list := { tr_EUTRAN_CellDesc_default },</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                template uint3_t prio := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           template (present) uint5_t thresh_high := 20,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         template uint5_t thresh_low := 10,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                            template uint5_t qrxlevmin := 22)</span><br><span style="color: hsl(120, 100%, 40%);">+:= tr_EUTRAN_NeighbourCells(</span><br><span style="color: hsl(120, 100%, 40%);">+       cell_desc_list := cell_desc_list,</span><br><span style="color: hsl(120, 100%, 40%);">+     prio_presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+        prio := prio,</span><br><span style="color: hsl(120, 100%, 40%);">+ thresh_high := thresh_high,</span><br><span style="color: hsl(120, 100%, 40%);">+   thresh_low_presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  thresh_low := thresh_low,</span><br><span style="color: hsl(120, 100%, 40%);">+     qrxlevmin_presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+   qrxlevmin := qrxlevmin);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template SystemInformationConfig SystemInformationConfig_default := {</span><br><span style="color: hsl(120, 100%, 40%);">+     si1 := {</span><br><span style="color: hsl(120, 100%, 40%);">+          cell_chan_desc := '8FB38000000000000000000000000000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+        rach_control := {</span><br><span style="color: hsl(120, 100%, 40%);">+         max_retrans := RACH_MAX_RETRANS_7,</span><br><span style="color: hsl(120, 100%, 40%);">+            tx_integer := '1001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                cell_barr_access := false,</span><br><span style="color: hsl(120, 100%, 40%);">+            re_not_allowed := true,</span><br><span style="color: hsl(120, 100%, 40%);">+               acc := '0000010000000000'B</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+            rest_octets := ?</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    si2 := {</span><br><span style="color: hsl(120, 100%, 40%);">+          bcch_freq_list := '00000000000000000000000000000000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+        ncc_permitted := '11111111'B,</span><br><span style="color: hsl(120, 100%, 40%);">+         rach_control := {</span><br><span style="color: hsl(120, 100%, 40%);">+         max_retrans := RACH_MAX_RETRANS_7,</span><br><span style="color: hsl(120, 100%, 40%);">+            tx_integer := '1001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                cell_barr_access := false,</span><br><span style="color: hsl(120, 100%, 40%);">+            re_not_allowed := true,</span><br><span style="color: hsl(120, 100%, 40%);">+               acc := '0000010000000000'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%);">+    si2bis := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       si2ter := {</span><br><span style="color: hsl(120, 100%, 40%);">+       extd_bcch_freq_list := '8E320000000000000000000000000800'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           rest_octets := ?</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    si2quater := {</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_SI2quaterRestOctets_EUTRAN( repeated_neigh_cells := { tr_EUTRAN_NeighbourCells_default } )</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+    si3 := {</span><br><span style="color: hsl(120, 100%, 40%);">+          cell_id := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+         lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+          mcc_mnc := '001F01'H,</span><br><span style="color: hsl(120, 100%, 40%);">+         lac := 1</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            ctrl_chan_desc := {</span><br><span style="color: hsl(120, 100%, 40%);">+               msc_r99 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+              att := true,</span><br><span style="color: hsl(120, 100%, 40%);">+          bs_ag_blks_res := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          ccch_conf := CCHAN_DESC_1CCCH_COMBINED,</span><br><span style="color: hsl(120, 100%, 40%);">+               si22ind := false,</span><br><span style="color: hsl(120, 100%, 40%);">+             cbq3 := CBQ3_IU_MODE_NOT_SUPPORTED,</span><br><span style="color: hsl(120, 100%, 40%);">+           spare := '00'B,</span><br><span style="color: hsl(120, 100%, 40%);">+               bs_pa_mfrms := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+             t3212 := 30</span><br><span style="color: hsl(120, 100%, 40%);">+       },</span><br><span style="color: hsl(120, 100%, 40%);">+            cell_options := {</span><br><span style="color: hsl(120, 100%, 40%);">+         dn_ind := false,</span><br><span style="color: hsl(120, 100%, 40%);">+              pwrc := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                dtx := MS_SHALL_USE_UL_DTX,</span><br><span style="color: hsl(120, 100%, 40%);">+           radio_link_tout_div4 := 7</span><br><span style="color: hsl(120, 100%, 40%);">+         },</span><br><span style="color: hsl(120, 100%, 40%);">+            cell_sel_par := {</span><br><span style="color: hsl(120, 100%, 40%);">+         cell_resel_hyst_2dB := 2,</span><br><span style="color: hsl(120, 100%, 40%);">+             ms_txpwr_max_cch := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                acs := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          neci := true,</span><br><span style="color: hsl(120, 100%, 40%);">+         rxlev_access_min := 0</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+            rach_control := {</span><br><span style="color: hsl(120, 100%, 40%);">+         max_retrans := RACH_MAX_RETRANS_7,</span><br><span style="color: hsl(120, 100%, 40%);">+            tx_integer := '1001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                cell_barr_access := false,</span><br><span style="color: hsl(120, 100%, 40%);">+            re_not_allowed := true,</span><br><span style="color: hsl(120, 100%, 40%);">+               acc := '0000010000000000'B</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+            rest_octets := {</span><br><span style="color: hsl(120, 100%, 40%);">+          sel_params := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             params := omit</span><br><span style="color: hsl(120, 100%, 40%);">+            },</span><br><span style="color: hsl(120, 100%, 40%);">+            pwr_offset := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             offset := omit</span><br><span style="color: hsl(120, 100%, 40%);">+            },</span><br><span style="color: hsl(120, 100%, 40%);">+            si_2ter_ind := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          early_cm_ind := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+         sched_where := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             where := omit</span><br><span style="color: hsl(120, 100%, 40%);">+             },</span><br><span style="color: hsl(120, 100%, 40%);">+            gprs_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+             presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  ra_colour := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                       si13_pos := '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%);">+            umts_early_cm_ind := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+            si2_quater_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+               presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             ind := '0'B</span><br><span style="color: hsl(120, 100%, 40%);">+               },</span><br><span style="color: hsl(120, 100%, 40%);">+            iu_mode_ind := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          si21_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+             presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             pos := 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%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+    si4 := {</span><br><span style="color: hsl(120, 100%, 40%);">+          lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+          mcc_mnc := '001F01'H,</span><br><span style="color: hsl(120, 100%, 40%);">+         lac := 1</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            cell_sel_par := {</span><br><span style="color: hsl(120, 100%, 40%);">+         cell_resel_hyst_2dB := 2,</span><br><span style="color: hsl(120, 100%, 40%);">+             ms_txpwr_max_cch := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+                acs := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          neci := true,</span><br><span style="color: hsl(120, 100%, 40%);">+         rxlev_access_min := 0</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+            rach_control := {</span><br><span style="color: hsl(120, 100%, 40%);">+         max_retrans := RACH_MAX_RETRANS_7,</span><br><span style="color: hsl(120, 100%, 40%);">+            tx_integer := '1001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                cell_barr_access := false,</span><br><span style="color: hsl(120, 100%, 40%);">+            re_not_allowed := true,</span><br><span style="color: hsl(120, 100%, 40%);">+               acc := '0000010000000000'B</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+            cbch_chan_desc := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       cbch_mobile_alloc := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            rest_octets := {</span><br><span style="color: hsl(120, 100%, 40%);">+          sel_params := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             params := omit</span><br><span style="color: hsl(120, 100%, 40%);">+            },</span><br><span style="color: hsl(120, 100%, 40%);">+            pwr_offset := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             offset := omit</span><br><span style="color: hsl(120, 100%, 40%);">+            },</span><br><span style="color: hsl(120, 100%, 40%);">+            gprs_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+             presence := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+             ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  ra_colour := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                       si13_pos := '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%);">+            s_presence := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+           s := 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%);">+    si13 := '9000185A6FC9E08410AB2B2B2B2B2B2B2B2B2B2B'O,</span><br><span style="color: hsl(120, 100%, 40%);">+  si5 := {</span><br><span style="color: hsl(120, 100%, 40%);">+          bcch_freq_list := '10000000000000000000000000000000'O</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+    si5bis := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+       si5ter := {</span><br><span style="color: hsl(120, 100%, 40%);">+       extd_bcch_freq_list := '9E050020000000000000000000000000'O</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+    si6 := {</span><br><span style="color: hsl(120, 100%, 40%);">+          cell_id := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+         lai := {</span><br><span style="color: hsl(120, 100%, 40%);">+          mcc_mnc := '001F01'H,</span><br><span style="color: hsl(120, 100%, 40%);">+         lac := 1</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            cell_options := {</span><br><span style="color: hsl(120, 100%, 40%);">+         dtx_ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+              pwrc := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                dtx := '01'B,</span><br><span style="color: hsl(120, 100%, 40%);">+         radio_link_timeout := '0111'B</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+            ncc_permitted := '11111111'B,</span><br><span style="color: hsl(120, 100%, 40%);">+         rest_octets := ?</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* List of all the System Information received on all RSL ports */</span><br><span style="color: hsl(120, 100%, 40%);">+type record of SystemInformationConfig SystemInformationConfig_list;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function f_sysinfo_dec_raw(inout SystemInformationConfig si, RSL_Message rsl)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   var RSL_IE_Body sysinfo_type_ie;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RSL_IE_SysinfoType si_type;</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (f_rsl_find_ie(rsl, RSL_IE_SYSINFO_TYPE, sysinfo_type_ie) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Cannot find RSL_IE_SYSINFO_TYPE");</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%);">+     si_type := sysinfo_type_ie.sysinfo_type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (rsl.msg_type == RSL_MT_BCCH_INFO) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var RSL_IE_Body bcch_ie;</span><br><span style="color: hsl(120, 100%, 40%);">+              if (f_rsl_find_ie(rsl, RSL_IE_FULL_BCCH_INFO, bcch_ie)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     data := bcch_ie.other.payload;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if (rsl.msg_type == RSL_MT_SACCH_FILL) {</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(rsl, RSL_IE_L3_INFO, l3_ie)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      data := l3_ie.l3_info.payload;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Don't understand this System Information message");</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var boolean handled := false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       if (rsl.msg_type == RSL_MT_BCCH_INFO) {</span><br><span style="color: hsl(120, 100%, 40%);">+               handled := true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            if (si_type == RSL_SYSTEM_INFO_1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si1 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si1 := dec_SystemInformation(data).payload.si1;</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_2) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2 := dec_SystemInformation(data).payload.si2;</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_2bis) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2bis := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2bis := dec_SystemInformation(data).payload.si2bis;</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_2ter) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2ter := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2ter := dec_SystemInformation(data).payload.si2ter;</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_2quater) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si2quater := {};</span><br><span style="color: hsl(120, 100%, 40%);">+                   } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              var SystemInformationType2quater decoded := dec_SystemInformation(data).payload.si2quater;</span><br><span style="color: hsl(120, 100%, 40%);">+                            /* this is a *record* of SI2quaterRestOctets! (multiplexed) */</span><br><span style="color: hsl(120, 100%, 40%);">+                                si.si2quater[decoded.rest_octets.si2quater_index] := decoded.rest_octets;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_3) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si3 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si3 := dec_SystemInformation(data).payload.si3;</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_4) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si4 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si4 := dec_SystemInformation(data).payload.si4;</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_13) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si13 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si13 := dec_SystemInformation(data).payload.other;</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      handled := false;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if (rsl.msg_type == RSL_MT_SACCH_FILL) {</span><br><span style="color: hsl(120, 100%, 40%);">+               handled := true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            if (si_type == RSL_SYSTEM_INFO_5) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si5 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si5 := dec_SystemInformation(data).payload.si5;</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_5bis) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si5bis := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si5bis := dec_SystemInformation(data).payload.si5bis;</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_5ter) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si5ter := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                    } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si5ter := dec_SystemInformation(data).payload.si5ter;</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (si_type == RSL_SYSTEM_INFO_6) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (not isbound(data)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si6 := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              si.si6 := dec_SystemInformation(data).payload.si6;</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      handled := false;</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%);">+   if (not handled) {</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail, "Unexpected SI type in ", rsl.msg_type, " message: ", si_type);</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> type component test_CT extends CTRL_Adapter_CT {</span><br><span>   /* Array of per-BTS state */</span><br><span>         var BTS_State bts[NUM_BTS];</span><br><span>@@ -117,6 +472,9 @@</span><br><span>    timer T_guard := 30.0;</span><br><span> </span><br><span>   var CounterNameValsList g_ctr_msc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* System Information bytes as received during RSL startup, for each RSL[idx]. */</span><br><span style="color: hsl(120, 100%, 40%);">+     var SystemInformationConfig_list g_system_information := {};</span><br><span> }</span><br><span> </span><br><span> modulepar {</span><br><span>@@ -425,6 +783,54 @@</span><br><span>  f_vty_transceive(BSCVTY, "logp lglobal notice " & log_msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_sysinfo_seen(integer rsl_idx, RSL_Message rsl) runs on test_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      if (rsl_idx >= lengthof(g_system_information)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           g_system_information[rsl_idx] := SystemInformationConfig_omit</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sysinfo_dec_raw(g_system_information[rsl_idx], rsl);</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%);">+altstep as_catch_RSL_sysinfo(integer rsl_idx) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var ASP_RSL_Unitdata rx_rsl_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* For handler_mode := false, receiving the RSL bootstrap messages directly on IPA_RSL */</span><br><span style="color: hsl(120, 100%, 40%);">+     [] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_BCCH_INFO)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+               f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_BCCH_INFO)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_SACCH_FILL)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] IPA_RSL[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_SACCH_FILL)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+         f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</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%);">+   /* For handler_mode := true, receiving the RSL bootstrap messages via RSL_Emulation  */</span><br><span style="color: hsl(120, 100%, 40%);">+       [] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_BCCH_INFO)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_BCCH_INFO)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_NO_SACCH_FILL)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+            f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN[rsl_idx].receive(tr_ASP_RSL_UD(tr_RSL_SACCH_FILL)) -> value rx_rsl_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+               f_sysinfo_seen(rsl_idx, rx_rsl_ud.rsl);</span><br><span style="color: hsl(120, 100%, 40%);">+               repeat;</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> /* global initialization function</span><br><span>  * \param nr_bts Number of BTSs we should start/bring up</span><br><span>  * \param handler_mode Start an RSL_Emulation_CT component (true) or not (false).</span><br><span>@@ -484,6 +890,32 @@</span><br><span>  f_wait_oml(bts_idx, "connected", 5.0);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_init_bts_and_check_sysinfo(integer bts_idx := 0, boolean handler_mode := false,</span><br><span style="color: hsl(120, 100%, 40%);">+                               template SystemInformationConfig expect_si)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var default sysinfo := activate(as_catch_RSL_sysinfo(bts_idx));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     f_init_bts(bts_idx, handler_mode);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Give some time to (hopefully/most likely) collect all system informations from RSL startup.</span><br><span style="color: hsl(120, 100%, 40%);">+         * We could stop as soon as all expected SI are received, but then we might miss SI that we don't expect and</span><br><span style="color: hsl(120, 100%, 40%);">+       * that might be sent afterwards. So rather give a generous timeout and be quite sure to catch all SI.</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(5.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ log("RSL ", bts_idx, " SYSTEM INFORMATION: ", g_system_information[bts_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   deactivate(sysinfo);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (match(g_system_information[bts_idx], expect_si)) {</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("RSL ", bts_idx, ": EXPECTED SI: ", expect_si);</span><br><span style="color: hsl(120, 100%, 40%);">+               log("RSL ", bts_idx, ": GOT SI: ", g_system_information[bts_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "received SI does not match expectations");</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%);">+</span><br><span> /* expect to receive a RSL message matching a specified template on a given BTS / stream */</span><br><span> function f_exp_ipa_rx(integer bts_nr, template RSL_Message t_rx, float t_secs := 2.0, IpaStreamId sid := IPAC_PROTO_RSL_TRX0)</span><br><span> runs on test_CT return RSL_Message {</span><br><span>@@ -1273,8 +1705,10 @@</span><br><span>      setverdict(pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_si_default() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init(0);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_bts_and_check_sysinfo(0, expect_si := SystemInformationConfig_default);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> testcase TC_ctrl_msc_connection_status() runs on test_CT {</span><br><span>  var charstring ctrl_resp;</span><br><span>@@ -5237,6 +5671,8 @@</span><br><span>            execute( TC_ctrl_location() );</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_si_default() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* RSL DCHAN Channel ACtivation / Deactivation */</span><br><span>    execute( TC_chan_act_noreply() );</span><br><span>    execute( TC_chan_act_counter() );</span><br><span>diff --git a/bsc/gen_links.sh b/bsc/gen_links.sh</span><br><span>index a936ef3..343cc1c 100755</span><br><span>--- a/bsc/gen_links.sh</span><br><span>+++ b/bsc/gen_links.sh</span><br><span>@@ -67,7 +67,7 @@</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> DIR=../library</span><br><span style="color: hsl(0, 100%, 40%);">-FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn RAN_Adapter.ttcnpp Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn SCCP_Templates.ttcn IPA_Testing.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcnpp RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn RAN_Adapter.ttcnpp Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn SCCP_Templates.ttcn IPA_Testing.ttcn GSM_SystemInformation.ttcn GSM_RestOctets.ttcn "</span><br><span> FILES+="CBSP_Types.ttcn CBSP_Templates.ttcn "</span><br><span> FILES+="CBSP_CodecPort.ttcn CBSP_CodecPort_CtrlFunct.ttcn CBSP_CodecPort_CtrlFunctdef.cc CBSP_Adapter.ttcn "</span><br><span> gen_links $DIR $FILES</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19062">change 19062</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/+/19062"/><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: I6a8ef404087efee491390dc1d2452ac323f145f0 </div>
<div style="display:none"> Gerrit-Change-Number: 19062 </div>
<div style="display:none"> Gerrit-PatchSet: 11 </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>