<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20101">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BTS_Tests: group hopping parameters into a separate record<br><br>Change-Id: Iedb5d858a2d4f5d5a45e7465ae6586b3ae4bbb72<br>Related: SYS#4868, OS#4708<br>---<br>M bts/BTS_Tests.ttcn<br>M bts/BTS_Tests_LAPDm.ttcn<br>M library/LAPDm_RAW_PT.ttcn<br>3 files changed, 62 insertions(+), 46 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/01/20101/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn</span><br><span>index ac781f6..3100d03 100644</span><br><span>--- a/bts/BTS_Tests.ttcn</span><br><span>+++ b/bts/BTS_Tests.ttcn</span><br><span>@@ -237,6 +237,17 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+friend type record FreqHopPars {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Whether frequency hopping is in use */</span><br><span style="color: hsl(120, 100%, 40%);">+     boolean enabled,</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Mobile Allocation Index Offset / Hopping Sequence Number */</span><br><span style="color: hsl(120, 100%, 40%);">+        MaioHsn maio_hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+     /* MA bitmap to be indicated in RR Immediate Assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+    MobileAllocationLV ma_map,</span><br><span style="color: hsl(120, 100%, 40%);">+    /* The actual Mobile Allocation (ARFCN list) to be used */</span><br><span style="color: hsl(120, 100%, 40%);">+    L1ctlMA ma</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type record ConnHdlrPars {</span><br><span>       RslChannelNr chan_nr,</span><br><span>        RSL_IE_ChannelMode chan_mode,</span><br><span>@@ -246,13 +257,9 @@</span><br><span>         RSL_IE_EncryptionInfo encr optional,</span><br><span>         BtsBand bts0_band optional,</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Frequency hopping parameters (disabled if absent) */</span><br><span style="color: hsl(0, 100%, 40%);">- MaioHsn maio_hsn optional,</span><br><span style="color: hsl(0, 100%, 40%);">-      /* MA bitmap to be indicated in RR Immediate Assignment */</span><br><span style="color: hsl(0, 100%, 40%);">-      MobileAllocationLV ma_map,</span><br><span style="color: hsl(0, 100%, 40%);">-      /* The actual Mobile Allocation (ARFCN list) to be used */</span><br><span style="color: hsl(0, 100%, 40%);">-      L1ctlMA ma</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Frequency hopping parameters */</span><br><span style="color: hsl(120, 100%, 40%);">+    FreqHopPars fhp</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> /* Test-specific parameters */</span><br><span> private type union TestSpecUnion {</span><br><span>@@ -529,36 +536,40 @@</span><br><span>      uint6_t                 maio</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-friend function f_resolve_fh_params(inout ConnHdlrPars pars, uint8_t trx_nr := 0)</span><br><span style="color: hsl(120, 100%, 40%);">+friend function f_resolve_fh_params(inout FreqHopPars fhp, uint8_t tn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   uint8_t trx_nr := 0)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   var FreqHopGroups groups := mp_fh_config[pars.chan_nr.tn];</span><br><span style="color: hsl(120, 100%, 40%);">+    var FreqHopGroups groups := mp_fh_config[tn];</span><br><span>        var integer i, j;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ fhp.enabled := false;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      for (i := 0; i < lengthof(groups); i := i + 1) {</span><br><span>          var FreqHopGroup g := groups[i];</span><br><span>             for (j := 0; j < lengthof(g.trx_maio); j := j + 1) {</span><br><span>                      var FreqHopGroupItem gi := g.trx_maio[j];</span><br><span>                    if (gi.trx_nr == trx_nr) {</span><br><span style="color: hsl(0, 100%, 40%);">-                              pars.maio_hsn := valueof(ts_HsnMaio(g.hsn, gi.maio));</span><br><span style="color: hsl(0, 100%, 40%);">-                           pars.ma := { }; /* to be composed below */</span><br><span style="color: hsl(120, 100%, 40%);">+                            fhp.maio_hsn.maio := gi.maio;</span><br><span style="color: hsl(120, 100%, 40%);">+                         fhp.maio_hsn.hsn := g.hsn;</span><br><span style="color: hsl(120, 100%, 40%);">+                            fhp.enabled := true;</span><br><span>                                 break;</span><br><span>                       }</span><br><span>            }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           if (ispresent(pars.maio_hsn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               if (fhp.enabled) {</span><br><span>                   /* Prepare the Mobile Allocation bitmask (length & padding) */</span><br><span style="color: hsl(0, 100%, 40%);">-                      pars.ma_map.len := (mp_transceiver_num + 8 - 1) / 8; /* in bytes */</span><br><span style="color: hsl(0, 100%, 40%);">-                     pars.ma_map.ma := f_pad_bit('0'B, pars.ma_map.len * 8, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+                 fhp.ma_map.len := (mp_transceiver_num + 8 - 1) / 8; /* in bytes */</span><br><span style="color: hsl(120, 100%, 40%);">+                    fhp.ma_map.ma := f_pad_bit('0'B, fhp.ma_map.len * 8, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+                   fhp.ma := { }; /* to be composed below */</span><br><span> </span><br><span>                        /* Compose the actual Mobile Allocation and the bitmask */</span><br><span>                   for (j := 0; j < lengthof(g.trx_maio); j := j + 1) {</span><br><span>                              var FreqHopGroupItem gi := g.trx_maio[j];</span><br><span style="color: hsl(0, 100%, 40%);">-                               pars.ma := pars.ma & { l1ctl_ma_def[gi.trx_nr] };</span><br><span style="color: hsl(0, 100%, 40%);">-                           pars.ma_map.ma[gi.trx_nr] := '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+                            fhp.ma := fhp.ma & { l1ctl_ma_def[gi.trx_nr] };</span><br><span style="color: hsl(120, 100%, 40%);">+                           fhp.ma_map.ma[gi.trx_nr] := '1'B;</span><br><span>                    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   log("Freq. hopping parameters: maio_hsn := ", pars.maio_hsn,</span><br><span style="color: hsl(0, 100%, 40%);">-                      ", ma := ", pars.ma, ", ma_map := ", pars.ma_map);</span><br><span style="color: hsl(120, 100%, 40%);">+                    log("Freq. hopping parameters: ", fhp);</span><br><span>                    break; /* We're done */</span><br><span>          }</span><br><span>    }</span><br><span>@@ -591,7 +602,7 @@</span><br><span> </span><br><span>  /* Obtain frequency hopping parameters for a given timeslot */</span><br><span>       if (mp_freq_hop_enabled and mp_transceiver_num > 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                f_resolve_fh_params(pars);</span><br><span style="color: hsl(120, 100%, 40%);">+            f_resolve_fh_params(pars.fhp, pars.chan_nr.tn);</span><br><span>      }</span><br><span> </span><br><span>        vc_conn.start(f_handler_init(fn, id, pars));</span><br><span>@@ -700,7 +711,6 @@</span><br><span> </span><br><span> friend template ConnHdlrPars t_Pars(template RslChannelNr chan_nr,</span><br><span>                                         template RSL_IE_ChannelMode chan_mode,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  template (omit) MaioHsn maio_hsn := omit,</span><br><span>                                    float t_guard := 20.0) := {</span><br><span>  chan_nr := valueof(chan_nr),</span><br><span>         chan_mode := valueof(chan_mode),</span><br><span>@@ -726,9 +736,12 @@</span><br><span>      spec := omit,</span><br><span>        encr := omit,</span><br><span>        bts0_band := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-      maio_hsn := maio_hsn,</span><br><span style="color: hsl(0, 100%, 40%);">-   ma_map := c_MA_null,</span><br><span style="color: hsl(0, 100%, 40%);">-    ma := l1ctl_ma_def</span><br><span style="color: hsl(120, 100%, 40%);">+    fhp := {</span><br><span style="color: hsl(120, 100%, 40%);">+              enabled := false,</span><br><span style="color: hsl(120, 100%, 40%);">+             maio_hsn := ts_HsnMaio(0, 0),</span><br><span style="color: hsl(120, 100%, 40%);">+         ma_map := c_MA_null,</span><br><span style="color: hsl(120, 100%, 40%);">+          ma := l1ctl_ma_def</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> }</span><br><span> </span><br><span> /***********************************************************************</span><br><span>@@ -2002,16 +2015,16 @@</span><br><span> </span><br><span> /* Tune to a dedicated channel: L1CTL only */</span><br><span> private function f_l1ctl_est_dchan(L1CTL_PT pt, ConnHdlrPars pars) {</span><br><span style="color: hsl(0, 100%, 40%);">-   if (not ispresent(pars.maio_hsn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (not pars.fhp.enabled) {</span><br><span>          pt.send(ts_L1CTL_DM_EST_REQ_H0(pars.chan_nr,</span><br><span>                                                 7 /* TODO: mp_tsc */,</span><br><span>                                                mp_trx0_arfcn));</span><br><span>     } else {</span><br><span>             pt.send(ts_L1CTL_DM_EST_REQ_H1(pars.chan_nr,</span><br><span>                                                 7 /* TODO: mp_tsc */,</span><br><span style="color: hsl(0, 100%, 40%);">-                                           pars.maio_hsn.hsn,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              pars.maio_hsn.maio,</span><br><span style="color: hsl(0, 100%, 40%);">-                                             pars.ma));</span><br><span style="color: hsl(120, 100%, 40%);">+                                            pars.fhp.maio_hsn.hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                pars.fhp.maio_hsn.maio,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               pars.fhp.ma));</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span>@@ -2029,14 +2042,14 @@</span><br><span>         f_rsl_chan_act(g_pars.chan_mode, encr_enable, more_ies);</span><br><span> </span><br><span>         /* Craft channel description (with or without frequency hopping parameters) */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ispresent(g_pars.maio_hsn)) {</span><br><span style="color: hsl(0, 100%, 40%);">-               ch_desc := valueof(ts_ChanDescH1(g_pars.chan_nr, g_pars.maio_hsn));</span><br><span style="color: hsl(120, 100%, 40%);">+   if (g_pars.fhp.enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+             ch_desc := valueof(ts_ChanDescH1(g_pars.chan_nr, g_pars.fhp.maio_hsn));</span><br><span>      } else {</span><br><span>             ch_desc := valueof(ts_ChanDescH0(g_pars.chan_nr, mp_trx0_arfcn));</span><br><span>    }</span><br><span> </span><br><span>        /* Send IMM.ASS via CCHAN */</span><br><span style="color: hsl(0, 100%, 40%);">-    var GsmRrMessage rr_msg := valueof(ts_IMM_ASS(ra, fn, 0, ch_desc, g_pars.ma_map));</span><br><span style="color: hsl(120, 100%, 40%);">+    var GsmRrMessage rr_msg := valueof(ts_IMM_ASS(ra, fn, 0, ch_desc, g_pars.fhp.ma_map));</span><br><span>       RSL.send(ts_RSL_IMM_ASSIGN(enc_GsmRrMessage(rr_msg)));</span><br><span> </span><br><span>   /* receive IMM.ASS on MS side */</span><br><span>@@ -2049,7 +2062,7 @@</span><br><span>     }</span><br><span> </span><br><span>        /* enable dedicated mode */</span><br><span style="color: hsl(0, 100%, 40%);">-     f_L1CTL_DM_EST_REQ_IA(L1CTL, ia_um, ma := g_pars.ma);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_L1CTL_DM_EST_REQ_IA(L1CTL, ia_um, ma := g_pars.fhp.ma);</span><br><span>    /* enable encryption, if requested */</span><br><span>        if (encr_enable) {</span><br><span>           var uint8_t alg_id := f_alg_id_to_l1ctl(g_pars.encr.alg_id);</span><br><span>@@ -4661,7 +4674,7 @@</span><br><span>         /* Tune trxcon to that PDCH channel */</span><br><span>       var ConnHdlrPars pars := valueof(t_Pars(ts_RslChanNr_PDCH(7), ts_RSL_ChanMode_SIGN));</span><br><span>        if (mp_freq_hop_enabled and mp_transceiver_num > 1)</span><br><span style="color: hsl(0, 100%, 40%);">-          { f_resolve_fh_params(pars); }</span><br><span style="color: hsl(120, 100%, 40%);">+                { f_resolve_fh_params(pars.fhp, pars.chan_nr.tn); }</span><br><span>  f_l1ctl_est_dchan(L1CTL, pars);</span><br><span> </span><br><span>  /* Verify PTCCH/U: send several access bursts, make sure they're received */</span><br><span>@@ -4925,7 +4938,7 @@</span><br><span>     /* Tune trxcon to that PDCH channel on TS7 */</span><br><span>        var ConnHdlrPars pars := valueof(t_Pars(ts_RslChanNr_PDCH(7), ts_RSL_ChanMode_SIGN));</span><br><span>        if (mp_freq_hop_enabled and mp_transceiver_num > 1)</span><br><span style="color: hsl(0, 100%, 40%);">-          { f_resolve_fh_params(pars); }</span><br><span style="color: hsl(120, 100%, 40%);">+                { f_resolve_fh_params(pars.fhp, pars.chan_nr.tn); }</span><br><span>  f_l1ctl_est_dchan(L1CTL, pars);</span><br><span> </span><br><span>  /* C/I in centiBels, test range: -256 .. +1280, step 128 */</span><br><span>@@ -5395,7 +5408,7 @@</span><br><span> /* Verify hopping parameters in the INFO.ind message (version >= 10) */</span><br><span> testcase TC_pcu_info_ind_fh_params() runs on test_CT {</span><br><span>  var PCUIF_info_ind info_ind;</span><br><span style="color: hsl(0, 100%, 40%);">-    var ConnHdlrPars pars;</span><br><span style="color: hsl(120, 100%, 40%);">+        var FreqHopPars fhp;</span><br><span> </span><br><span>     f_init();</span><br><span> </span><br><span>@@ -5408,17 +5421,18 @@</span><br><span>                              continue;</span><br><span>                    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   pars := valueof(t_Pars(t_RslChanNr_PDCH(tn), ts_RSL_ChanMode_SIGN));</span><br><span>                         if (mp_freq_hop_enabled and mp_transceiver_num > 1)</span><br><span style="color: hsl(0, 100%, 40%);">-                          { f_resolve_fh_params(pars); }</span><br><span style="color: hsl(120, 100%, 40%);">+                                { f_resolve_fh_params(fhp, tn); }</span><br><span style="color: hsl(120, 100%, 40%);">+                     else</span><br><span style="color: hsl(120, 100%, 40%);">+                          { fhp.enabled := false; }</span><br><span> </span><br><span>                        var template PCUIF_InfoTrxTs tr_ts;</span><br><span style="color: hsl(0, 100%, 40%);">-                     if (ispresent(pars.maio_hsn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (fhp.enabled) {</span><br><span>                           tr_ts := tr_PCUIF_InfoTrxTsH1(</span><br><span style="color: hsl(0, 100%, 40%);">-                                          hsn := pars.maio_hsn.hsn,</span><br><span style="color: hsl(0, 100%, 40%);">-                                               maio := pars.maio_hsn.maio,</span><br><span style="color: hsl(0, 100%, 40%);">-                                             ma := f_pad_bit(pars.ma_map.ma, 64, '0'B),</span><br><span style="color: hsl(0, 100%, 40%);">-                                              ma_bit_len := lengthof(pars.ma_map.ma));</span><br><span style="color: hsl(120, 100%, 40%);">+                                              hsn := fhp.maio_hsn.hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              maio := fhp.maio_hsn.maio,</span><br><span style="color: hsl(120, 100%, 40%);">+                                            ma := f_pad_bit(fhp.ma_map.ma, 64, '0'B),</span><br><span style="color: hsl(120, 100%, 40%);">+                                             ma_bit_len := lengthof(fhp.ma_map.ma));</span><br><span>                      } else {</span><br><span>                             tr_ts := tr_PCUIF_InfoTrxTsH0;</span><br><span>                       }</span><br><span>diff --git a/bts/BTS_Tests_LAPDm.ttcn b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>index 9981bbc..0e27ad1 100644</span><br><span>--- a/bts/BTS_Tests_LAPDm.ttcn</span><br><span>+++ b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>@@ -54,13 +54,15 @@</span><br><span> /* master function switching to a dedicated radio channel */</span><br><span> function f_switch_dcch() runs on ConnHdlr {</span><br><span>  var BCCH_tune_req tune_req := { arfcn := { false, mp_trx0_arfcn }, combined_ccch := true };</span><br><span style="color: hsl(0, 100%, 40%);">-     var DCCH_switch_req sw_req := { ma := g_pars.ma };</span><br><span style="color: hsl(120, 100%, 40%);">+    var DCCH_switch_req sw_req;</span><br><span> </span><br><span>      /* Craft channel description (with or without frequency hopping parameters) */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ispresent(g_pars.maio_hsn)) {</span><br><span style="color: hsl(0, 100%, 40%);">-               sw_req.chan_desc := valueof(ts_ChanDescH1(g_pars.chan_nr, g_pars.maio_hsn));</span><br><span style="color: hsl(120, 100%, 40%);">+  if (g_pars.fhp.enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+             sw_req.chan_desc := valueof(ts_ChanDescH1(g_pars.chan_nr, g_pars.fhp.maio_hsn));</span><br><span style="color: hsl(120, 100%, 40%);">+              sw_req.ma := g_pars.fhp.ma;</span><br><span>  } else {</span><br><span>             sw_req.chan_desc := valueof(ts_ChanDescH0(g_pars.chan_nr, mp_trx0_arfcn));</span><br><span style="color: hsl(120, 100%, 40%);">+            sw_req.ma := omit;</span><br><span>   }</span><br><span> </span><br><span>        LAPDM.send(tune_req);</span><br><span>@@ -239,7 +241,7 @@</span><br><span> </span><br><span>      /* Obtain frequency hopping parameters for a given timeslot */</span><br><span>       if (mp_freq_hop_enabled and mp_transceiver_num > 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                f_resolve_fh_params(g_pars);</span><br><span style="color: hsl(120, 100%, 40%);">+          f_resolve_fh_params(g_pars.fhp, g_pars.chan_nr.tn);</span><br><span>  }</span><br><span> </span><br><span>        /* activate the channel on the BTS side */</span><br><span>diff --git a/library/LAPDm_RAW_PT.ttcn b/library/LAPDm_RAW_PT.ttcn</span><br><span>index 77f0452..d0ad24b 100644</span><br><span>--- a/library/LAPDm_RAW_PT.ttcn</span><br><span>+++ b/library/LAPDm_RAW_PT.ttcn</span><br><span>@@ -39,7 +39,7 @@</span><br><span>      /* directly switch to a dedicated channel (without RACH/IMM.ASS */</span><br><span>   type record DCCH_switch_req {</span><br><span>                ChannelDescription chan_desc,</span><br><span style="color: hsl(0, 100%, 40%);">-           L1ctlMA ma</span><br><span style="color: hsl(120, 100%, 40%);">+            L1ctlMA ma optional</span><br><span>  }</span><br><span> </span><br><span>        type record DCCH_switch_res {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20101">change 20101</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/+/20101"/><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: Iedb5d858a2d4f5d5a45e7465ae6586b3ae4bbb72 </div>
<div style="display:none"> Gerrit-Change-Number: 20101 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>