<p>Hoernchen has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14419">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bts: more lapdm tests<br><br>Change-Id: I0db71de5f600022935f47573aa919990de4bfec0<br>---<br>M bts/BTS_Tests_LAPDm.ttcn<br>1 file changed, 267 insertions(+), 3 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/19/14419/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bts/BTS_Tests_LAPDm.ttcn b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>index edbd37b..69ca24c 100644</span><br><span>--- a/bts/BTS_Tests_LAPDm.ttcn</span><br><span>+++ b/bts/BTS_Tests_LAPDm.ttcn</span><br><span>@@ -548,12 +548,13 @@</span><br><span>  }</span><br><span> }</span><br><span> /* all of the above */</span><br><span style="color: hsl(0, 100%, 40%);">-private altstep as_ignore_background(boolean want_dcch := true) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+private altstep as_ignore_background(boolean want_dcch := true, boolean ignore_rsl_errors := false) runs on ConnHdlr {</span><br><span>   [want_dcch] as_lapdm_acch();</span><br><span>         [not want_dcch] as_lapdm_dcch();</span><br><span>     [] as_lapdm_idle();</span><br><span>  [] as_rsl_meas_rep();</span><br><span style="color: hsl(0, 100%, 40%);">-   [] as_rsl_fail_err();</span><br><span style="color: hsl(120, 100%, 40%);">+ [not ignore_rsl_errors] as_rsl_fail_err();</span><br><span style="color: hsl(120, 100%, 40%);">+    [ignore_rsl_errors] RSL.receive(tr_RSL_ERROR_IND(g_chan_nr, ?, ?)) { repeat;}</span><br><span> }</span><br><span> </span><br><span> /* Test the operation of Layer 2 sequence numbering.</span><br><span>@@ -641,7 +642,7 @@</span><br><span>         fp_common_init();</span><br><span> </span><br><span>        /* some common altstep for meas res and other background noise */</span><br><span style="color: hsl(0, 100%, 40%);">-       d := activate(as_ignore_background());</span><br><span style="color: hsl(120, 100%, 40%);">+        d := activate(as_ignore_background(ignore_rsl_errors := true));</span><br><span>      RSL.clear;</span><br><span>   LAPDM.clear;</span><br><span> </span><br><span>@@ -720,6 +721,266 @@</span><br><span>     f_testmatrix_each_chan(pars, refers(f_TC_iframe_timer_recovery));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* 25.2.6.1  ns sequence error</span><br><span style="color: hsl(120, 100%, 40%);">+sends wrong N(S), expects REJ, sends wrong N(S) with P=1, expects REJ with F=1 */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_ns_seq_error(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   const integer sapi := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(sapi));</span><br><span style="color: hsl(120, 100%, 40%);">+    var default d;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer T := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     fp_common_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* some common altstep for meas res and other background noise */</span><br><span style="color: hsl(120, 100%, 40%);">+     d := activate(as_ignore_background(ignore_rsl_errors := true));</span><br><span style="color: hsl(120, 100%, 40%);">+       RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+    LAPDM.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring l3_mo := f_rnd_octstring(12);</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring l3_mt := f_rnd_octstring(12);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /*  1) The BTS is brought into the multiple frame established state */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* MO Establish Request via LADPm: SAPI = 0, C = 0, P = 1, M = 0, 0 ≤ L ≤ N201.. */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+       /* UA: SAPI = 0, R = 0, F = 1, M = 0, L = L of SABM. */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_UA(sapi, cr_MT_RSP, f:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* 2) The MS sends an L3 Request to the BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+        l3_mo := f_rnd_octstring(18);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* SAPI = 0, C = 1, P = 0, M = 0, 0 ≤ L ≤ N201, N(S) = 0, N(R) = 0.  * */</span><br><span style="color: hsl(120, 100%, 40%);">+ LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=false,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               nr:=0, ns:=0, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+ RSL.receive(tr_RSL_DATA_IND(g_chan_nr, link_id, l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 3) The BTS shall respond with a RR frame though this may be incorporated with</span><br><span style="color: hsl(120, 100%, 40%);">+         the L3 Response I frame. */</span><br><span style="color: hsl(120, 100%, 40%);">+        RSL.send(ts_RSL_DATA_REQ(g_chan_nr, link_id, l3_mt));</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* SAPI = 0, R = 1, F = 0, M = 0, L = 0, N(R) = 1. */</span><br><span style="color: hsl(120, 100%, 40%);">+ [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_RR(sapi, c_r:=cr_MT_RSP, p:=false, nr:=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%);">+     /* SAPI = 0, C = 0, P = 0, M = 0, 0 ≤ L ≤ N201, N(R) = 1, N(S) = 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+     [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_I(sapi, c_r:=cr_MT_CMD, p:=false,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       nr:=1, ns:=0, l3:=l3_mt)));</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%);">+   /* 4) The MS shall then send an I frame containing Identity Request with incorrect N(S)</span><br><span style="color: hsl(120, 100%, 40%);">+       but correctly acknowledging the MS's I frame; P bit set to zero.  */</span><br><span style="color: hsl(120, 100%, 40%);">+      LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=false,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               nr:=1, ns:=0, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* no rsl data ind  due to wrong ns */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* The BTS shall send a REJ frame. */</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T1 := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+      T1.start;</span><br><span style="color: hsl(120, 100%, 40%);">+     alt{</span><br><span style="color: hsl(120, 100%, 40%);">+  [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_REJ(sapi, c_r:=cr_MT_RSP, p:=false, nr:=1)));</span><br><span style="color: hsl(120, 100%, 40%);">+   [] T1.timeout{ setverdict(fail, "Missing first REJ")}</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_sleep(2.0); // T200</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* The MS shall, after T200, send another I frame with incorrect N(S), P bit set to 1 this time. */</span><br><span style="color: hsl(120, 100%, 40%);">+   LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=true,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                nr:=1, ns:=0, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* The BTS shall respond with a REJ, F bit set to 1. */</span><br><span style="color: hsl(120, 100%, 40%);">+       T1.start;</span><br><span style="color: hsl(120, 100%, 40%);">+     alt{</span><br><span style="color: hsl(120, 100%, 40%);">+  [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_REJ(sapi, c_r:=cr_MT_RSP, p:=true, nr:=1)));</span><br><span style="color: hsl(120, 100%, 40%);">+    [] T1.timeout{ setverdict(fail, "Missing second REJ")}</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%);">+   deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+        fp_common_fini();</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%);">+testcase TC_ns_seq_error() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_testmatrix_each_chan(pars, refers(f_TC_ns_seq_error));</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%);">+/* 25.2.6.2 nr sequence error */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_nr_seq_error(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ const integer sapi := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(sapi));</span><br><span style="color: hsl(120, 100%, 40%);">+    var default d;</span><br><span style="color: hsl(120, 100%, 40%);">+        var integer n201 := 20;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (link_id.c == SACCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+             n201 := 18;</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%);">+   fp_common_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* some common altstep for meas res and other background noise */</span><br><span style="color: hsl(120, 100%, 40%);">+     d := activate(as_ignore_background(ignore_rsl_errors := true));</span><br><span style="color: hsl(120, 100%, 40%);">+       RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+    LAPDM.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring l3_mo := f_rnd_octstring(12);</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring l3_mt := f_rnd_octstring(12);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /*  1) The BTS is brought into the multiple frame established state */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* MO Establish Request via LADPm: SAPI = 0, C = 0, P = 1, M = 0, 0 ≤ L ≤ N201.. */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+       /* UA: SAPI = 0, R = 0, F = 1, M = 0, L = L of SABM. */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_UA(sapi, cr_MT_RSP, f:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* 2) The MS shall send an I frame containing an information field of length N201 and an</span><br><span style="color: hsl(120, 100%, 40%);">+       incorrect receive sequence number. */</span><br><span style="color: hsl(120, 100%, 40%);">+        l3_mo := f_rnd_octstring(n201);</span><br><span style="color: hsl(120, 100%, 40%);">+       /* SAPI = 0, C = 1, P = 0, M = 0,  L = N201, N(S) = 0, N(R) = 1.  * */</span><br><span style="color: hsl(120, 100%, 40%);">+        LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=false,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               nr:=1, ns:=0, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* The BTS may: a)   send a DISC frame within N200×T200; */</span><br><span style="color: hsl(120, 100%, 40%);">+  /* DISC SAPI = 0, C = 0, P = 1, M = 0, L = 0. */</span><br><span style="color: hsl(120, 100%, 40%);">+      timer T1 := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+      T1.start;</span><br><span style="color: hsl(120, 100%, 40%);">+     alt{</span><br><span style="color: hsl(120, 100%, 40%);">+  [] LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_DISC(sapi, c_r:=cr_MT_CMD, p:=true)));</span><br><span style="color: hsl(120, 100%, 40%);">+  [] T1.timeout{ setverdict(fail, "Missing DISC from BTS")}</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%);">+   /* a) the MS shall respond with a UA frame.</span><br><span style="color: hsl(120, 100%, 40%);">+   SAPI = 0, R = 0, F = 1, M = 0, L = 0. */</span><br><span style="color: hsl(120, 100%, 40%);">+      LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_UA(sapi, c_r:=cr_MO_CMD, f:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+        fp_common_fini();</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%);">+testcase TC_nr_seq_error() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+  var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_testmatrix_each_chan(pars, refers(f_TC_nr_seq_error));</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_rec_invalid_frame_txrx(integer sapi, LapdmFrame x) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+    LAPDM.send(t_PH_DATA(0, false, x));</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(2.0); // T200</span><br><span style="color: hsl(120, 100%, 40%);">+ LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=true, nr:=0)));</span><br><span style="color: hsl(120, 100%, 40%);">+   LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_RR(sapi, c_r:=cr_MT_RSP, p:=true , nr := 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%);">+/* 25.2.7     Test on receipt of invalid frames</span><br><span style="color: hsl(120, 100%, 40%);">+sends a bunch of different invalid frames, expects the BTS to ignore all of them */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_TC_rec_invalid_frame(charstring id) runs on ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+       const integer sapi := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      var RslLinkId link_id := valueof(ts_RslLinkID_DCCH(sapi));</span><br><span style="color: hsl(120, 100%, 40%);">+    var default d;</span><br><span style="color: hsl(120, 100%, 40%);">+        timer T := 3.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     fp_common_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* some common altstep for meas res and other background noise */</span><br><span style="color: hsl(120, 100%, 40%);">+     d := activate(as_ignore_background(ignore_rsl_errors := true));</span><br><span style="color: hsl(120, 100%, 40%);">+       RSL.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+    LAPDM.clear;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring l3_mo := f_rnd_octstring(12);</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring l3_mt := f_rnd_octstring(12);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /*  1) The BTS is brought into the multiple frame established state */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* MO Establish Request via LADPm: SAPI = 0, C = 0, P = 1, M = 0, 0 ≤ L ≤ N201.. */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.send(t_PH_DATA(0, false, ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo)));</span><br><span style="color: hsl(120, 100%, 40%);">+     RSL.receive(tr_RSL_EST_IND(g_chan_nr, link_id, l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+       /* UA: SAPI = 0, R = 0, F = 1, M = 0, L = L of SABM. */</span><br><span style="color: hsl(120, 100%, 40%);">+       LAPDM.receive(t_PH_DATA(0, false, tr_LAPDm_UA(sapi, cr_MT_RSP, f:=true, l3:=l3_mo)));</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%);">+     /* 1: One RR frame: SAPI = 0, R = 0, F = 0, M = 0, L > 0, N(R) = 1.</span><br><span style="color: hsl(120, 100%, 40%);">+        RR frame with the Length indicator greater than zero and a faulty N(R); */</span><br><span style="color: hsl(120, 100%, 40%);">+    var LapdmFrame x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+       x.ab.payload := f_rnd_octstring(5);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 3: One REJ frame: SAPI = 0, R = 0, F = 0, M = 0, L = 0, N(R) = 1, EA = 0.</span><br><span style="color: hsl(120, 100%, 40%);">+  EJ frame with the EA bit set to zero and a faulty N(R); */</span><br><span style="color: hsl(120, 100%, 40%);">+    x:= valueof(ts_LAPDm_REJ(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+     x.ab.addr.ea := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 4: One SABM frame: SAPI = 0, C = 1, P = 1, M = 0, L = 0, EL = 0.</span><br><span style="color: hsl(120, 100%, 40%);">+   SABM frame with the EL bit set to zero; */</span><br><span style="color: hsl(120, 100%, 40%);">+    l3_mo := ''O;</span><br><span style="color: hsl(120, 100%, 40%);">+ x:= valueof(ts_LAPDm_SABM(sapi, c_r:=cr_MO_CMD, p:=true, l3:=l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+ x.ab.el := 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 5: One DM frame: SAPI = 0, R = 0, F = 1, M = 0, L > 0.</span><br><span style="color: hsl(120, 100%, 40%);">+  DM frame with the Length indicator greater than zero;*/</span><br><span style="color: hsl(120, 100%, 40%);">+       x:= valueof(ts_LAPDm_DM(sapi, c_r:=cr_MO_CMD, f:=true));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.payload := f_rnd_octstring(5);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 6: One DISC frame: SAPI = 0, C = 1, P = 1, M = 1, L = 0.</span><br><span style="color: hsl(120, 100%, 40%);">+   DISC frame with the M bit set to 1; */</span><br><span style="color: hsl(120, 100%, 40%);">+        x:= valueof(ts_LAPDm_DISC(sapi, c_r:=cr_MO_CMD, p:=true));</span><br><span style="color: hsl(120, 100%, 40%);">+    x.ab.m := true;</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 7: One UA frame: SAPI = 0, R = 0, F = 0, M = 0, L = 0, EA = 0.</span><br><span style="color: hsl(120, 100%, 40%);">+     UA frame with the EA bit set to zero*/</span><br><span style="color: hsl(120, 100%, 40%);">+        x:= valueof(ts_LAPDm_UA(sapi, c_r:=cr_MO_CMD, f:=false, l3:=''O));</span><br><span style="color: hsl(120, 100%, 40%);">+    x.ab.addr.ea := false;</span><br><span style="color: hsl(120, 100%, 40%);">+        f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 8: One I frame: SAPI = 0, C = 1, P = 0, M = 0, L > N201, N(R) = 0, N(S) = 6.</span><br><span style="color: hsl(120, 100%, 40%);">+    I frame with the Length indicator greater than N201;*/</span><br><span style="color: hsl(120, 100%, 40%);">+        x:= valueof(ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=true, nr := 0, ns := 6, l3 := f_rnd_octstring(25)))</span><br><span style="color: hsl(120, 100%, 40%);">+   f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 9: One I frame: SAPI = 0, C = 1, P = 0, M = 1, L < N201, N(R) = 0, N(S) = 7.</span><br><span style="color: hsl(120, 100%, 40%);">+    I frame with the M bit set to 1 and the Length indicator less than N201;*/</span><br><span style="color: hsl(120, 100%, 40%);">+    x:= valueof(ts_LAPDm_I(sapi, c_r:=cr_MO_CMD, p:=true, nr := 0, ns := 7, l3 := f_rnd_octstring(5)))</span><br><span style="color: hsl(120, 100%, 40%);">+    x.ab.m := true;</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 10: One RR frame: SAPI = 0, C = 1, P = 1, M = 0, L = 0, N(R) = 0. */</span><br><span style="color: hsl(120, 100%, 40%);">+       x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=true, nr:=0));</span><br><span style="color: hsl(120, 100%, 40%);">+       f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* command frames with correct Address and Length indicator field and a non-implemented control field */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* 12: One command frame with Control Field = xxx1 1101. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('00011101'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 13: One command frame with Control field = xxx1 1011. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('00011011'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 14: One command frame with Control field = xxx1 0111. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('00010001'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 15: One command frame with Control field = 01x1 1111. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('01011111'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 16: One command frame with Control field = 1xx1 1111. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('10011111'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 17: One command frame with Control field = 0011 0011. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('00110011'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* 18: One command frame with Control field = 1xx1 0011. */</span><br><span style="color: hsl(120, 100%, 40%);">+   x:= valueof(ts_LAPDm_RR(sapi, c_r:=cr_MO_CMD, p:=false, nr:=1));</span><br><span style="color: hsl(120, 100%, 40%);">+      x.ab.ctrl.other := bit2int('10010011'B);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_TC_rec_invalid_frame_txrx(0, x);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  deactivate(d);</span><br><span style="color: hsl(120, 100%, 40%);">+        fp_common_fini();</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%);">+testcase TC_rec_invalid_frame() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+     var ConnHdlrPars pars := valueof(t_Pars(t_RslChanNr_Bm(1), ts_RSL_ChanMode_SIGN));</span><br><span style="color: hsl(120, 100%, 40%);">+    pars.t_guard := 60.0;</span><br><span style="color: hsl(120, 100%, 40%);">+ f_testmatrix_each_chan(pars, refers(f_TC_rec_invalid_frame));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type record LapdmDlConfig {</span><br><span>    integer n201,</span><br><span>        integer t200</span><br><span>@@ -1115,6 +1376,9 @@</span><br><span>         execute(TC_establish_ign_first_sabm());</span><br><span>      execute(TC_iframe_seq_and_ack());</span><br><span>    execute(TC_iframe_timer_recovery());</span><br><span style="color: hsl(120, 100%, 40%);">+  execute(TC_ns_seq_error());</span><br><span style="color: hsl(120, 100%, 40%);">+   execute(TC_nr_seq_error());</span><br><span style="color: hsl(120, 100%, 40%);">+   execute(TC_rec_invalid_frame());</span><br><span>     execute(TC_segm_concat_dcch());</span><br><span>      execute(TC_segm_concat_sacch());</span><br><span>     execute(TC_t200_n200());</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14419">change 14419</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/+/14419"/><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: I0db71de5f600022935f47573aa919990de4bfec0 </div>
<div style="display:none"> Gerrit-Change-Number: 14419 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>