<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19062">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: retrieve System Information seen on RSL startup<br><br>Change-Id: I6a8ef404087efee491390dc1d2452ac323f145f0<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 157 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/62/19062/1</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 f25c75d..f025eef 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -84,6 +84,35 @@</span><br><span>        { "mscpool:subscr:paged", 0 }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* One System Information payload as received on RSL.</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.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+type record SystemInformation {</span><br><span style="color: hsl(120, 100%, 40%);">+        RSL_IE_SysinfoType si_type,</span><br><span style="color: hsl(120, 100%, 40%);">+   RSL_MessageType from_rsl_msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+    octetstring data optional</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+type set of SystemInformation SystemInformationConfig;</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%);">+const SystemInformationConfig SystemInformationConfig_default := {</span><br><span style="color: hsl(120, 100%, 40%);">+      { si_type := RSL_SYSTEM_INFO_1, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+        { si_type := RSL_SYSTEM_INFO_2, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+        { si_type := RSL_SYSTEM_INFO_2bis, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+     { si_type := RSL_SYSTEM_INFO_2quater, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+  { si_type := RSL_SYSTEM_INFO_2ter, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+     { si_type := RSL_SYSTEM_INFO_3, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+        { si_type := RSL_SYSTEM_INFO_4, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+        { si_type := RSL_SYSTEM_INFO_13, from_rsl_msg_type := RSL_MT_BCCH_INFO, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     { si_type := RSL_SYSTEM_INFO_5, from_rsl_msg_type := RSL_MT_SACCH_FILL, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+       { si_type := RSL_SYSTEM_INFO_5bis, from_rsl_msg_type := RSL_MT_SACCH_FILL, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+    { si_type := RSL_SYSTEM_INFO_5ter, from_rsl_msg_type := RSL_MT_SACCH_FILL, data := omit },</span><br><span style="color: hsl(120, 100%, 40%);">+    { si_type := RSL_SYSTEM_INFO_6, from_rsl_msg_type := RSL_MT_SACCH_FILL, data := omit }</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 +146,58 @@</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 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_sysinfo_seen(integer rsl_idx, in SystemInformation si) runs on test_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       log("RSL ", rsl_idx, ": got System Information ", si);</span><br><span style="color: hsl(120, 100%, 40%);">+    var integer idx := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (lengthof(g_system_information) > rsl_idx) {</span><br><span style="color: hsl(120, 100%, 40%);">+            idx := lengthof(g_system_information[rsl_idx]);</span><br><span style="color: hsl(120, 100%, 40%);">+               for (var integer i := 0; i < lengthof(g_system_information[rsl_idx]); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (g_system_information[rsl_idx][i].si_type == si.si_type) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         idx := i;</span><br><span style="color: hsl(120, 100%, 40%);">+                             break;</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%);">+     g_system_information[rsl_idx][idx] := si;</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_sysinfo_verify_presence(integer rsl_idx, SystemInformationConfig expected_types := SystemInformationConfig_default)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    if (lengthof(expected_types) > 0</span><br><span style="color: hsl(120, 100%, 40%);">+       and (lengthof(g_system_information) < rsl_idx or lengthof(g_system_information[rsl_idx]) == 0))  {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "RSL ", rsl_idx, ": Expected to see ", lengthof(expected_types), " System Informations, but did not receive any");</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%);">+   for (var integer i := 0; i < lengthof(expected_types); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               var boolean found := false;</span><br><span style="color: hsl(120, 100%, 40%);">+           for (var integer j := 0; j < lengthof(g_system_information[rsl_idx]); j := j + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (g_system_information[rsl_idx][j].si_type != expected_types[i].si_type) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          continue;</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (g_system_information[rsl_idx][j].from_rsl_msg_type != expected_types[i].from_rsl_msg_type) {</span><br><span style="color: hsl(120, 100%, 40%);">+                              setverdict(fail, "RSL ", rsl_idx, ": Expected to see ", expected_types[i], " in ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                              expected_types[i].from_rsl_msg_type, " but got it from ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                           g_system_information[rsl_idx][j].from_rsl_msg_type);</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%);">+                     found := true;</span><br><span style="color: hsl(120, 100%, 40%);">+                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (not found) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      setverdict(fail, "RSL ", rsl_idx, ": Expected to see ", expected_types[i], " during startup, but it was not sent");</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%);">+     log("RSL ", rsl_idx, ": verified presence of ", lengthof(expected_types), " System Informations");</span><br><span style="color: hsl(120, 100%, 40%);">+      setverdict(pass);</span><br><span> }</span><br><span> </span><br><span> modulepar {</span><br><span>@@ -425,6 +506,76 @@</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_rsl_get_sysinfo(RSL_Message rsl)</span><br><span style="color: hsl(120, 100%, 40%);">+return SystemInformation</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  var SystemInformation ret;</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%);">+</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%);">+     ret.si_type := sysinfo_type_ie.sysinfo_type;</span><br><span style="color: hsl(120, 100%, 40%);">+  ret.from_rsl_msg_type := rsl.msg_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) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    ret.data := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ret.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) == false) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     ret.data := omit;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ret.data := l3_ie.l3_info.payload;</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 ret;</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%);">+       /* 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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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, f_rsl_get_sysinfo(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>@@ -472,10 +623,16 @@</span><br><span>         for (i := 0; i < nr_bts; i := i+1) {</span><br><span>              /* wait until osmo-bts-omldummy has respawned */</span><br><span>             f_wait_oml(i, "degraded", 5.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           var default sysinfo := activate(as_catch_RSL_sysinfo(i));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          /* start RSL connection */</span><br><span>           f_ipa_rsl_start(bts[i].rsl, mp_bsc_ip, mp_bsc_rsl_port, i, handler_mode);</span><br><span>            /* wait until BSC tells us "connected" */</span><br><span>          f_wait_oml(i, "connected", 5.0);</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%);">+          f_sysinfo_verify_presence(i);</span><br><span>        }</span><br><span> </span><br><span> }</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: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>