<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/19910">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BSC_Tests/hopping: add TC_fh_params_{chan_activ,imm_ass}<br><br>This test case verifies presence and correctness of the hopping<br>parameters in the following messages and their IEs:<br><br>  1. RSL CHANnel ACTIVation<br>  1.1. Channel Identification IE<br><br>  2. RSL IMMEDIATE ASSIGN COMMAND<br>  2.1. Channel Description IE<br>  2.2. Mobile Allocation IE<br><br>The hopping parameters are randomly generated and configured<br>via the VTY interface in the beginning, and unset in the end.<br><br>Change-Id: Ib9218b61a2b0c0467340656e4b65a36b7b0ba302<br>Related: SYS#4868, OS#4545<br>---<br>M bsc/BSC_Tests.ttcn<br>1 file changed, 271 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/10/19910/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 dce9ae9..20480a5 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -6434,6 +6434,274 @@</span><br><span>        chan_nr := rx_rsl.ies[0].body.chan_nr;</span><br><span>       f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, 33));</span><br><span>       rx_rsl := f_exp_ipa_rx(0, tr_RSL_IMM_ASSIGN(0));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Hopping parameters per a timeslot */</span><br><span style="color: hsl(120, 100%, 40%);">+private type record length(0..64) of integer ArfcnList;</span><br><span style="color: hsl(120, 100%, 40%);">+private type record FHParamsTs {</span><br><span style="color: hsl(120, 100%, 40%);">+     boolean         enabled,</span><br><span style="color: hsl(120, 100%, 40%);">+      uint6_t         hsn,</span><br><span style="color: hsl(120, 100%, 40%);">+  uint6_t         maio,</span><br><span style="color: hsl(120, 100%, 40%);">+ ArfcnList       ma</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%);">+/* Hopping parameters per a transceiver */</span><br><span style="color: hsl(120, 100%, 40%);">+private type record length(8) of FHParamsTs FHParamsTrx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Randomly generate the hopping parameters for the given timeslot numbers */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_fh_params_gen(template integer tr_tn := (1, 3, 5))</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT return FHParamsTrx {</span><br><span style="color: hsl(120, 100%, 40%);">+       var FHParamsTrx fhp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        for (var integer tn := 0; tn < 8; tn := tn + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if (not match(tn, tr_tn)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   fhp[tn].enabled := false;</span><br><span style="color: hsl(120, 100%, 40%);">+                     fhp[tn].ma := { };</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Random HSN / MAIO values: 0..63 */</span><br><span style="color: hsl(120, 100%, 40%);">+         fhp[tn].hsn := f_rnd_int(64);</span><br><span style="color: hsl(120, 100%, 40%);">+         fhp[tn].maio := f_rnd_int(64);</span><br><span style="color: hsl(120, 100%, 40%);">+                fhp[tn].ma := { };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Random Mobile Allocation (hopping channels) */</span><br><span style="color: hsl(120, 100%, 40%);">+             var integer ma_len := 2 + f_rnd_int(9); /* 2..10 channels */</span><br><span style="color: hsl(120, 100%, 40%);">+          var integer step := 3 + f_rnd_int(4); /* 3..6 stepping */</span><br><span style="color: hsl(120, 100%, 40%);">+             for (var integer i := 1; i <= ma_len; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        fhp[tn].ma := fhp[tn].ma & { i * step };</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%);">+           fhp[tn].enabled := true;</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("f_TC_fh_params_gen(): ", fhp);</span><br><span style="color: hsl(120, 100%, 40%);">+ return fhp;</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%);">+/* Make sure that the given Channel Description IE matches the hopping configuration */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_fh_params_match_chan_desc(in FHParamsTrx fhp, in ChannelDescription cd)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (present) ChannelDescription tr_cd;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template (present) MaioHsn tr_maio_hsn;</span><br><span style="color: hsl(120, 100%, 40%);">+   var uint3_t tn := cd.chan_nr.tn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (fhp[tn].enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+                tr_maio_hsn := tr_HsnMaio(fhp[tn].hsn, fhp[tn].maio);</span><br><span style="color: hsl(120, 100%, 40%);">+         tr_cd := tr_ChanDescH1(cd.chan_nr, tr_maio_hsn);</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              tr_cd := tr_ChanDescH0(cd.chan_nr);</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 match(cd, tr_cd)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Channel Description IE does not match: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                    cd, " vs expected ", tr_cd);</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%);">+/* Make sure that the given Mobile Allocation IE matches the hopping configuration */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_fh_params_match_ma(in FHParamsTrx fhp, uint3_t tn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        in MobileAllocationLV ma)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ var template MobileAllocationLV tr_ma := f_TC_fh_params_gen_tr_ma(fhp, tn, ma);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (not match(ma, tr_ma)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Mobile Allocation IE does not match (tn := ",</span><br><span style="color: hsl(120, 100%, 40%);">+                        tn, "): ", ma, " vs expected: ", tr_ma);</span><br><span style="color: hsl(120, 100%, 40%);">+       } else {</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%);">+private function f_TC_fh_params_gen_tr_ma(in FHParamsTrx fhp, uint3_t tn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       in MobileAllocationLV ma)</span><br><span style="color: hsl(120, 100%, 40%);">+return template MobileAllocationLV {</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Mobile Allocation IE is expected to be empty if hopping is not enabled */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (not fhp[tn].enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+            return { len := 0, ma := ''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%);">+   var bitstring full_mask := f_pad_bit(''B, 1024, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+        var bitstring slot_mask := f_pad_bit(''B, 1024, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+        var bitstring ma_mask := ''B;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer ma_mask_len := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Compose the full bit-mask (all channels, up to 1024 entries) */</span><br><span style="color: hsl(120, 100%, 40%);">+    for (var integer i := 0; i < lengthof(fhp); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          for (var integer j := 0; j < lengthof(fhp[i].ma); j := j + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    if (full_mask[fhp[i].ma[j]] == '1'B)</span><br><span style="color: hsl(120, 100%, 40%);">+                          { continue; }</span><br><span style="color: hsl(120, 100%, 40%);">+                 full_mask[fhp[i].ma[j]] := '1'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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Compose a bit-mask for the given timeslot number */</span><br><span style="color: hsl(120, 100%, 40%);">+        for (var integer i := 0; i < lengthof(fhp[tn].ma); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+           slot_mask[fhp[tn].ma[i]] := '1'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%);">+   /* Finally, compose the Mobile Allocation bit-mask */</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer i := 0; i < lengthof(full_mask); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (full_mask[i] != '1'B)</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%);">+               /* FIXME: ma_mask := ma_mask & slot_mask[i]; // triggers a bug in TITAN */</span><br><span style="color: hsl(120, 100%, 40%);">+                if (slot_mask[i] == '1'B) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   ma_mask_len := lengthof(ma_mask);</span><br><span style="color: hsl(120, 100%, 40%);">+                     ma_mask := ma_mask & '1'B;</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      ma_mask := ma_mask & '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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Ensure that ma_mask is octet-aligned */</span><br><span style="color: hsl(120, 100%, 40%);">+    ma_mask := substr(ma_mask, 0, ma_mask_len + 1);</span><br><span style="color: hsl(120, 100%, 40%);">+       ma_mask_len := (ma_mask_len + 8 - 1) / 8;</span><br><span style="color: hsl(120, 100%, 40%);">+     ma_mask := f_pad_bit(ma_mask, ma_mask_len * 8, '0'B);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return { len := ma_mask_len, ma := ma_mask };</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%);">+/* Configure the hopping parameters in accordance with the given record */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_fh_params_set(in FHParamsTrx fhp)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    /* (Re)configure TS1..7: enable frequency hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_enter_cfg_trx(BSCVTY, trx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Enable frequency hopping on odd numbered timeslots within TS1..7 */</span><br><span style="color: hsl(120, 100%, 40%);">+        for (var integer tn := 1; tn < 7; tn := tn + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_vty_transceive(BSCVTY, "timeslot " & int2str(tn));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          if (not fhp[tn].enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    f_vty_transceive(BSCVTY, "hopping enabled 0");</span><br><span style="color: hsl(120, 100%, 40%);">+                      f_vty_transceive(BSCVTY, "exit"); /* go back */</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Configure HSN / MAIO values */</span><br><span style="color: hsl(120, 100%, 40%);">+             f_vty_transceive(BSCVTY, "hopping sequence-number " & int2str(fhp[tn].hsn));</span><br><span style="color: hsl(120, 100%, 40%);">+            f_vty_transceive(BSCVTY, "hopping maio " & int2str(fhp[tn].maio));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Configure the Mobile Allocation (hopping channels) */</span><br><span style="color: hsl(120, 100%, 40%);">+              for (var integer i := 0; i < lengthof(fhp[tn].ma); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   f_vty_transceive(BSCVTY, "hopping arfcn add " & int2str(fhp[tn].ma[i]));</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_vty_transceive(BSCVTY, "hopping enabled 1");</span><br><span style="color: hsl(120, 100%, 40%);">+              f_vty_transceive(BSCVTY, "exit"); /* go back */</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_vty_transceive(BSCVTY, "end");</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%);">+/* Disable frequency hopping on all timeslots */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_fh_params_unset(in FHParamsTrx fhp)</span><br><span style="color: hsl(120, 100%, 40%);">+runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       /* (Re)configure TS1..7: disable frequency hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+ f_vty_enter_cfg_trx(BSCVTY, trx := 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      for (var integer tn := 1; tn < 7; tn := tn + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+          f_vty_transceive(BSCVTY, "timeslot " & int2str(tn));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+          /* Delete all ARFCNs from the Mobile Allocation (if any) */</span><br><span style="color: hsl(120, 100%, 40%);">+           for (var integer i := 0; i < lengthof(fhp[tn].ma); i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   f_vty_transceive(BSCVTY, "hopping arfcn del " & int2str(fhp[tn].ma[i]));</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_vty_transceive(BSCVTY, "hopping enabled 0");</span><br><span style="color: hsl(120, 100%, 40%);">+              f_vty_transceive(BSCVTY, "exit"); /* go back */</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_vty_transceive(BSCVTY, "end");</span><br><span style="color: hsl(120, 100%, 40%);">+    f_vty_transceive(BSCVTY, "drop bts connection 0 oml");</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 presence and correctness of the hopping parameters (HSN, MAIO)</span><br><span style="color: hsl(120, 100%, 40%);">+ * in the Channel Identification IE of the RSL CHANnel ACTIVation message. */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_fh_params_chan_activ() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var FHParamsTrx fhp := f_TC_fh_params_gen();</span><br><span style="color: hsl(120, 100%, 40%);">+  var RSL_Message rsl_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RSL_IE_Body ie;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_vty();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_fh_params_set(fhp); /* Enable frequency hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "drop bts connection 0 oml");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init(1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* CS domain: 3 (SDCCH/4+CBCH) + 4 (TCH/F) + 2 (TCH/H) channels available */</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < 9; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_ipa_tx(0, ts_RSL_CHAN_RQD(f_rnd_ra_cs(), 23));</span><br><span style="color: hsl(120, 100%, 40%);">+              rsl_msg := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Make sure that Channel Identification IE is present */</span><br><span style="color: hsl(120, 100%, 40%);">+             if (not f_rsl_find_ie(rsl_msg, RSL_IE_CHAN_IDENT, ie)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      setverdict(fail, "RSL Channel Identification IE is absent");</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Make sure that hopping parameters (HSN/MAIO) match */</span><br><span style="color: hsl(120, 100%, 40%);">+              f_TC_fh_params_match_chan_desc(fhp, ie.chan_ident.ch_desc.v);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* "Mobile Allocation shall be included but empty" - let's check this */</span><br><span style="color: hsl(120, 100%, 40%);">+                if (ie.chan_ident.ma.v.len != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    setverdict(fail, "Mobile Allocation IE is not empty: ",</span><br><span style="color: hsl(120, 100%, 40%);">+                                ie.chan_ident.ma, ", despite it shall be");</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%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Disable frequency hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_fh_params_unset(fhp);</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+/* verifying hopping parameters (HSN, MAIO, MA) in (RR) Immediate Assignment */</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_fh_params_imm_ass() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var FHParamsTrx fhp := f_TC_fh_params_gen();</span><br><span style="color: hsl(120, 100%, 40%);">+  var RSL_Message rsl_msg;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RSL_IE_Body ie;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ f_init_vty();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_fh_params_set(fhp); /* Enable frequency hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_vty_transceive(BSCVTY, "drop bts connection 0 oml");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_init(1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* CS domain: 3 (SDCCH/4+CBCH) + 4 (TCH/F) + 2 (TCH/H) channels available */</span><br><span style="color: hsl(120, 100%, 40%);">+  for (var integer i := 0; i < 9; i := i + 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_ipa_tx(0, ts_RSL_CHAN_RQD(f_rnd_ra_cs(), 23));</span><br><span style="color: hsl(120, 100%, 40%);">+              rsl_msg := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(rsl_msg.ies[0].body.chan_nr, 33));</span><br><span style="color: hsl(120, 100%, 40%);">+            rsl_msg := f_exp_ipa_rx(0, tr_RSL_MsgTypeC(RSL_MT_IMMEDIATE_ASSIGN_CMD));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Make sure that Full Immediate Assign Info IE is present */</span><br><span style="color: hsl(120, 100%, 40%);">+         if (not f_rsl_find_ie(rsl_msg, RSL_IE_FULL_IMM_ASS_INFO, ie)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       setverdict(fail, "RSL Full Immediate Assign Info IE is absent");</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Decode the actual Immediate Assignment message */</span><br><span style="color: hsl(120, 100%, 40%);">+          var GsmRrMessage rr_msg := dec_GsmRrMessage(ie.full_imm_ass_info.payload);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (not match(rr_msg.header, t_RrHeader(IMMEDIATE_ASSIGNMENT, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  setverdict(fail, "Failed to match Immediate Assignment: ", rr_msg);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Make sure that hopping parameters (HSN/MAIO) match */</span><br><span style="color: hsl(120, 100%, 40%);">+              f_TC_fh_params_match_chan_desc(fhp, rr_msg.payload.imm_ass.chan_desc);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Make sure that the Mobile Allocation IE matches */</span><br><span style="color: hsl(120, 100%, 40%);">+         f_TC_fh_params_match_ma(fhp, rr_msg.payload.imm_ass.chan_desc.chan_nr.tn,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     rr_msg.payload.imm_ass.mobile_allocation);</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%);">+   /* Disable frequency hopping */</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_fh_params_unset(fhp);</span><br><span> </span><br><span>       setverdict(pass);</span><br><span> }</span><br><span>@@ -6666,6 +6934,9 @@</span><br><span>       execute( TC_assignment_emerg_setup_deny_bts() );</span><br><span>     execute( TC_emerg_premption() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /* Frequency hopping parameters handling */</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_fh_params_chan_activ() );</span><br><span style="color: hsl(120, 100%, 40%);">+ execute( TC_fh_params_imm_ass() );</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/+/19910">change 19910</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/+/19910"/><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: Ib9218b61a2b0c0467340656e4b65a36b7b0ba302 </div>
<div style="display:none"> Gerrit-Change-Number: 19910 </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>