<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14116">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: Add tests for CBCH LOAD IND (underflow, overflow)<br><br>Change-Id: Ia0a82771ba2912ef06fb0d9ee0816e8150701005<br>Related: OS#4011<br>---<br>M bts/BTS_Tests_SMSCB.ttcn<br>M library/RSL_Types.ttcn<br>2 files changed, 248 insertions(+), 5 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/16/14116/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests_SMSCB.ttcn b/bts/BTS_Tests_SMSCB.ttcn</span><br><span>index ac7ec9f..f7f2f91 100644</span><br><span>--- a/bts/BTS_Tests_SMSCB.ttcn</span><br><span>+++ b/bts/BTS_Tests_SMSCB.ttcn</span><br><span>@@ -19,6 +19,7 @@</span><br><span> import from L1CTL_PortType all;</span><br><span> import from L1CTL_Types all;</span><br><span> import from LAPDm_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from IPA_Emulation all;</span><br><span> </span><br><span> import from RSL_Types all;</span><br><span> </span><br><span>@@ -186,13 +187,10 @@</span><br><span>                 RSL_CCHAN.send(ts_RSL_UD(rsl));</span><br><span>      }</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     f_cbch_compute_exp_blocks(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_vty_cbch_setup(boolean use_sdcch4 := true) runs on test_CT {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   f_init_vty_bsc();</span><br><span style="color: hsl(0, 100%, 40%);">-       /* ensure that a CBCH is present in channel combination */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (pars.use_sdcch4) {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (use_sdcch4 == true) {</span><br><span>            f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 0"},</span><br><span>                                   "phys_chan_config CCCH+SDCCH4+CBCH");</span><br><span>              f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 6"},</span><br><span>@@ -205,6 +203,14 @@</span><br><span>    }</span><br><span>    f_vty_transceive(BSCVTY, "drop bts connection 0 oml");</span><br><span>     f_sleep(2.0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_smscb_setup(inout CbchTestPars pars) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_cbch_compute_exp_blocks(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init_vty_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+     /* ensure that a CBCH is present in channel combination */</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_cbch_setup(pars.use_sdcch4);</span><br><span>   f_init(testcasename());</span><br><span> </span><br><span>  f_init_l1ctl();</span><br><span>@@ -687,6 +693,171 @@</span><br><span>      Misc_Helpers.f_shutdown(__BFILE__, __LINE__, pass);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Verify there are no CBCH load indications if no CBCH is present */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cbch_load_idle_no_cbch() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var ASP_RSL_Unitdata rx_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+   timer T := 10.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+       f_init_vty_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_BASIC)) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Received unexpected CBCH LOAD IND: ", rx_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_EXTD)) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Received unexpected CBCH LOAD IND: ", rx_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+      [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(pass);</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%);">+/* Verify the CBCH load indications of an idle cell (without CBCH load) */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_TC_cbc_load_idle() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   template integer tr_slot_count := (2 .. 15);</span><br><span style="color: hsl(120, 100%, 40%);">+  const integer min_load_ind := 4;</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer basic_count := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer extd_count := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  var ASP_RSL_Unitdata rx_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+   timer T := 10.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL_CCHAN.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+      T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_BASIC(false, tr_slot_count))) {</span><br><span style="color: hsl(120, 100%, 40%);">+           basic_count := basic_count + 1;</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.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_EXTD(false, tr_slot_count))) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+          extd_count := extd_count + 1;</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.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_BASIC)) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Received unexpected CBCH LOAD IND: ", rx_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_EXTD)) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Received unexpected CBCH LOAD IND: ", rx_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+      [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                if ((basic_count >= min_load_ind) and (extd_count >= min_load_ind)) {</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%);">+                      setverdict(fail, "Insufficient number of CBCH LOAD IND: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                             "BASIC=", basic_count, " EXTD=", extd_count);</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%);">+     f_smscb_cleanup();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cbc_sdcch4_load_idle() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init_vty_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_cbch_setup(use_sdcch4 := true);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_cbc_load_idle();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cbc_sdcch8_load_idle() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+        f_init_vty_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_cbch_setup(use_sdcch4 := false);</span><br><span style="color: hsl(120, 100%, 40%);">+        f_TC_cbc_load_idle();</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%);">+/* Verify CBCH overload indications are sent when sending too many SMS CB CMD */</span><br><span style="color: hsl(120, 100%, 40%);">+function f_TC_cbc_load_overload(CbchTestPars pars) runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    template integer tr_slot_count_basic := (11 .. 13);</span><br><span style="color: hsl(120, 100%, 40%);">+   template integer tr_slot_count_extd := (2 .. 15);</span><br><span style="color: hsl(120, 100%, 40%);">+     const integer min_load_ind := 4;</span><br><span style="color: hsl(120, 100%, 40%);">+      var integer basic_count := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer extd_count := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  var ASP_RSL_Unitdata rx_ud;</span><br><span style="color: hsl(120, 100%, 40%);">+   timer T_total := 10.0;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer T_retransmit := 0.2;</span><br><span style="color: hsl(120, 100%, 40%);">+    timer T_initial_guard := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_init(testcasename());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* send tons of SMSCB Command */</span><br><span style="color: hsl(120, 100%, 40%);">+      for (i := 0; i < 30; i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_smscb_setup_rsl_chan(pars.basic);</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%);">+   /* keep sending SMSCB Commands for another two seconds */</span><br><span style="color: hsl(120, 100%, 40%);">+     T_initial_guard.start;</span><br><span style="color: hsl(120, 100%, 40%);">+        T_retransmit.start;</span><br><span style="color: hsl(120, 100%, 40%);">+   alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] T_retransmit.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_smscb_setup_rsl_chan(pars.basic);</span><br><span style="color: hsl(120, 100%, 40%);">+           T_retransmit.start;</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%);">+     [] T_initial_guard.timeout { }</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* clear any pending messages (where load may not have peaked yet) */</span><br><span style="color: hsl(120, 100%, 40%);">+ RSL_CCHAN.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* keep sending SMSCB Commands while verifying LOAD INDICATIONS */</span><br><span style="color: hsl(120, 100%, 40%);">+    T_total.start;</span><br><span style="color: hsl(120, 100%, 40%);">+        T_retransmit.start;</span><br><span style="color: hsl(120, 100%, 40%);">+   alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_BASIC(true, tr_slot_count_basic))) {</span><br><span style="color: hsl(120, 100%, 40%);">+              basic_count := basic_count + 1;</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.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_EXTD(false, tr_slot_count_extd))) {</span><br><span style="color: hsl(120, 100%, 40%);">+               extd_count := extd_count + 1;</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.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_BASIC)) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(fail, "Received unexpected CBCH LOAD IND: ", rx_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CBCH_LOAD_IND_EXTD)) -> value rx_ud {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "Received unexpected CBCH LOAD IND: ", rx_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RSL_CCHAN.receive { repeat; }</span><br><span style="color: hsl(120, 100%, 40%);">+      [] T_retransmit.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+             f_smscb_setup_rsl_chan(pars.basic);</span><br><span style="color: hsl(120, 100%, 40%);">+           T_retransmit.start;</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%);">+     [] T_total.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+          if ((basic_count >= min_load_ind) and (extd_count >= min_load_ind)) {</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%);">+                      setverdict(fail, "Insufficient number of CBCH LOAD IND: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                             "BASIC=", basic_count, " EXTD=", extd_count);</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%);">+     f_smscb_cleanup();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cbc_sdcch4_load_overload() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       var CbchTestPars pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+            use_sdcch4 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+           basic := valueof(t_CbchPC(msgs_1m_3b_norm)),</span><br><span style="color: hsl(120, 100%, 40%);">+          extended := 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%);">+  f_init_vty_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_cbch_setup(use_sdcch4 := true);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_cbc_load_overload(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_cbc_sdcch8_load_overload() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var CbchTestPars pars := {</span><br><span style="color: hsl(120, 100%, 40%);">+            use_sdcch4 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+           basic := valueof(t_CbchPC(msgs_1m_3b_norm)),</span><br><span style="color: hsl(120, 100%, 40%);">+          extended := 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%);">+  f_init_vty_bsc();</span><br><span style="color: hsl(120, 100%, 40%);">+     f_vty_cbch_setup(use_sdcch4 := true);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_cbc_load_overload(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> </span><br><span> /* SMSCB TODO:</span><br><span>@@ -696,6 +867,8 @@</span><br><span>  */</span><br><span> </span><br><span> control {</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_cbch_load_idle_no_cbch() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    execute( TC_sms_cb_cmd_sdcch4_1block() );</span><br><span>    execute( TC_sms_cb_cmd_sdcch4_2block() );</span><br><span>    execute( TC_sms_cb_cmd_sdcch4_3block() );</span><br><span>@@ -705,6 +878,9 @@</span><br><span>      execute( TC_sms_cb_cmd_sdcch4_default_only() );</span><br><span>      execute( TC_sms_cb_cmd_sdcch4_default_and_normal() );</span><br><span>        execute( TC_sms_cb_cmd_sdcch4_default_then_null() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_cbc_sdcch4_load_idle() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_cbc_sdcch4_load_overload() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (false) { /* FIXME: SDCCH/8 support broken, needs trxcon + L1CTL work */</span><br><span>  execute( TC_sms_cb_cmd_sdcch8_1block() );</span><br><span>    execute( TC_sms_cb_cmd_sdcch8_2block() );</span><br><span>@@ -714,6 +890,8 @@</span><br><span>      execute( TC_sms_cb_cmd_sdcch8_schedule() );</span><br><span>  execute( TC_sms_cb_cmd_sdcch8_default_only() );</span><br><span>      execute( TC_sms_cb_cmd_sdcch8_default_and_normal() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_cbc_sdcch8_load_idle() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_cbc_sdcch8_load_overload() );</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn</span><br><span>index 74de46a..bfa0af4 100644</span><br><span>--- a/library/RSL_Types.ttcn</span><br><span>+++ b/library/RSL_Types.ttcn</span><br><span>@@ -658,6 +658,24 @@</span><br><span>               last_block := last_block</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* 9.4.43 CBCH Load Information */</span><br><span style="color: hsl(120, 100%, 40%);">+    type record RSL_IE_CbchLoadInfo {</span><br><span style="color: hsl(120, 100%, 40%);">+             boolean         overflow,</span><br><span style="color: hsl(120, 100%, 40%);">+             BIT3            spare,</span><br><span style="color: hsl(120, 100%, 40%);">+                uint4_t         slot_count</span><br><span style="color: hsl(120, 100%, 40%);">+    };</span><br><span style="color: hsl(120, 100%, 40%);">+    template RSL_IE_CbchLoadInfo tr_CbchLoadInfo(template boolean overflow,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           template uint4_t slot_count) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         overflow := overflow,</span><br><span style="color: hsl(120, 100%, 40%);">+         spare := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           slot_count := slot_count</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RSL_IE_CbchLoadInfo ts_CbchLoadInfo(boolean overflow, uint4_t slot_count) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               overflow := overflow,</span><br><span style="color: hsl(120, 100%, 40%);">+         spare := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+              slot_count := slot_count</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* 9.3.53 */</span><br><span>         type record RSL_IE_MultirateCtrl {</span><br><span>           uint3_t         spare,</span><br><span>@@ -762,6 +780,7 @@</span><br><span>                 RSL_IE_ChanNeeded       chan_needed,</span><br><span>                 RSL_IE_CbCommandType    cb_cmd_type,</span><br><span>                 RSL_LV                  smscb_message,</span><br><span style="color: hsl(120, 100%, 40%);">+                RSL_IE_CbchLoadInfo     cbch_load_info,</span><br><span>              RSL_SacchInfo           sacch_info,</span><br><span> </span><br><span>              RSL_IE_StartingTime     starting_time,</span><br><span>@@ -816,6 +835,7 @@</span><br><span>                                         chan_needed, iei = RSL_IE_CHAN_NEEDED;</span><br><span>                                       cb_cmd_type, iei = RSL_IE_CB_CMD_TYPE;</span><br><span>                                       smscb_message, iei = RSL_IE_SMSCB_MSG;</span><br><span style="color: hsl(120, 100%, 40%);">+                                        cbch_load_info, iei = RSL_IE_CBCH_LOAD_INFO;</span><br><span>                                         sacch_info, iei = RSL_IE_SACCH_INFO;</span><br><span>                                         starting_time, iei = RSL_IE_STARTNG_TIME;</span><br><span>                                    encr_info, iei = RSL_IE_ENCR_INFO;</span><br><span>@@ -1600,6 +1620,51 @@</span><br><span>          }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* 8.5.9 BTS -> BSC CBCH LOAD INDICATION */</span><br><span style="color: hsl(120, 100%, 40%);">+        template RSL_Message tr_RSL_CBCH_LOAD_IND_BASIC(template boolean overflow := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       template uint4_t slot_count := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     template RslChannelNr chan_nr := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_CBCH_LOAD_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+             ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tr_RSL_IE(RSL_IE_Body:{cbch_load_info := tr_CbchLoadInfo(overflow, slot_count)})</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RSL_Message ts_RSL_CBCH_LOAD_IND_BASIC(boolean overflow, uint4_t slot_count,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         template (value) RslChannelNr chan_nr :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                      ts_RslChanNr_SDCCH4(0, 2)) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_CBCH_LOAD_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+             ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                   t_RSL_IE(RSL_IE_CBCH_LOAD_INFO, RSL_IE_Body:{cbch_load_info := ts_CbchLoadInfo(overflow, slot_count)})</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RSL_Message tr_RSL_CBCH_LOAD_IND_EXTD(template boolean overflow := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                        template uint4_t slot_count := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     template RslChannelNr chan_nr := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_CBCH_LOAD_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+             ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                  tr_RSL_IE(RSL_IE_Body:{cbch_load_info := tr_CbchLoadInfo(overflow, slot_count)}),</span><br><span style="color: hsl(120, 100%, 40%);">+                     tr_RSL_IE(RSL_IE_Body:{smscb_chan_ind := 1})</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RSL_Message ts_RSL_CBCH_LOAD_IND_EXTD(boolean overflow, uint4_t slot_count,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                          template (value) RslChannelNr chan_nr :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                      ts_RslChanNr_SDCCH4(0, 2)) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),</span><br><span style="color: hsl(120, 100%, 40%);">+           msg_type := RSL_MT_CBCH_LOAD_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+             ies := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),</span><br><span style="color: hsl(120, 100%, 40%);">+                   t_RSL_IE(RSL_IE_CBCH_LOAD_INFO, RSL_IE_Body:{cbch_load_info := ts_CbchLoadInfo(overflow, slot_count)}),</span><br><span style="color: hsl(120, 100%, 40%);">+                       t_RSL_IE(RSL_IE_SMSCB_CHAN_INDICATOR, RSL_IE_Body:{smscb_chan_ind := 1})</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>        /* 8.6.2 BTS <- BSC */</span><br><span>    template (value) RSL_Message ts_RSL_SACCH_FILL(RSL_IE_SysinfoType si_type, octetstring l3_info) := {</span><br><span>                 msg_disc := ts_RSL_MsgDisc(RSL_MDISC_TRX_MGMT, false),</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14116">change 14116</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/14116"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ia0a82771ba2912ef06fb0d9ee0816e8150701005 </div>
<div style="display:none"> Gerrit-Change-Number: 14116 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>