<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/13865">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BSSGP_Emulation: Abandon "BssgpDecoded" intermediate structure<br><br>It originally seemed like a great idea to define a custom record<br>which aggregates the decoded BSSGP, LLC, L3 and/or SNDCP and passes<br>it to the individual ConnHdlr.  However, particularly with testcase<br>interoperability for IuPS in mind, this seems bogus.  Also, we<br>never really took advantage of this.<br><br>Let's now decode as far as we can decode any PDU, and then send the<br>decoded version of that PDU via the ports between the BSSGP_Emulation<br>and the ConnHdlr component.<br><br>Change-Id: I8c1082880902dd9a04935945f0293895f4d0c53a<br>---<br>M library/BSSGP_Emulation.ttcn<br>M pcu/PCU_Tests.ttcn<br>M pcu/PCU_Tests_RAW.ttcn<br>M sgsn/SGSN_Tests.ttcn<br>4 files changed, 112 insertions(+), 165 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/BSSGP_Emulation.ttcn b/library/BSSGP_Emulation.ttcn</span><br><span>index 5b5628e..f8b9f06 100644</span><br><span>--- a/library/BSSGP_Emulation.ttcn</span><br><span>+++ b/library/BSSGP_Emulation.ttcn</span><br><span>@@ -53,7 +53,9 @@</span><br><span>             PDU_LLC,</span><br><span>             PDU_L3_MS_SGSN,</span><br><span>              PDU_L3_SGSN_MS;</span><br><span style="color: hsl(0, 100%, 40%);">- out     BssgpDecoded,</span><br><span style="color: hsl(120, 100%, 40%);">+ out     PDU_BSSGP,</span><br><span style="color: hsl(120, 100%, 40%);">+            PDU_LLC,</span><br><span style="color: hsl(120, 100%, 40%);">+              PDU_SN,</span><br><span>              NsStatusIndication,</span><br><span>          BssgpStatusIndication,</span><br><span>               ASP_Event,</span><br><span>@@ -66,7 +68,9 @@</span><br><span>       in      ASP_Event,</span><br><span>           NsStatusIndication,</span><br><span>          BssgpStatusIndication,</span><br><span style="color: hsl(0, 100%, 40%);">-          BssgpDecoded,</span><br><span style="color: hsl(120, 100%, 40%);">+         PDU_BSSGP,</span><br><span style="color: hsl(120, 100%, 40%);">+            PDU_LLC,</span><br><span style="color: hsl(120, 100%, 40%);">+              PDU_SN,</span><br><span>              PDU_L3_MS_SGSN,</span><br><span>              PDU_L3_SGSN_MS;</span><br><span>      out     PDU_BSSGP,</span><br><span>@@ -492,6 +496,21 @@</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_send_bssgp_dec(BssgpDecoded dec, BSSGP_Client_CT vc_conn, BSSGP_SP_PT pt := BSSGP_SP) runs on BSSGP_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+       if (ispresent(dec.l3_mt)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           pt.send(dec.l3_mt) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+        } else if (ispresent(dec.l3_mo)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            pt.send(dec.l3_mo) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+        } else if (ispresent(dec.sndcp)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            pt.send(dec.sndcp) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+        } else if (ispresent(dec.llc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              pt.send(dec.llc) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              pt.send(dec.bssgp) to vc_conn;</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> altstep as_unblocked() runs on BSSGP_CT {</span><br><span>        var BSSGP_Client_CT vc_conn;</span><br><span>         var NsUnitdataIndication udi;</span><br><span>@@ -539,7 +558,7 @@</span><br><span>  [] BSCP.receive(f_BnsUdInd(tr_BSSGP_PS_PAGING(g_cfg.bvci), g_cfg.bvci)) -> value udi {</span><br><span>            var hexstring imsi := udi.bssgp.pDU_BSSGP_PAGING_PS.iMSI.digits</span><br><span>              vc_conn := f_tbl_comp_by_imsi(imsi);</span><br><span style="color: hsl(0, 100%, 40%);">-            BSSGP_SP.send(f_dec_bssgp(udi.bssgp)) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+             f_send_bssgp_dec(f_dec_bssgp(udi.bssgp), vc_conn);</span><br><span>   }</span><br><span> </span><br><span>        /* Any other PTP BSSGP message: If it has TLLi, route to component; otherwise broadcast */</span><br><span>@@ -548,14 +567,14 @@</span><br><span>           var template OCT4 tlli := f_bssgp_get_tlli(udi.bssgp);</span><br><span>               if (isvalue(tlli)) {</span><br><span>                         vc_conn := f_tbl_comp_by_tlli(valueof(tlli));</span><br><span style="color: hsl(0, 100%, 40%);">-                   BSSGP_SP.send(dec) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+                        f_send_bssgp_dec(dec, vc_conn);</span><br><span>              } else {</span><br><span>                     log("No TLLI: Broadcasting ", dec);</span><br><span>                        /* broadcast this message to all components */</span><br><span>                       // TITAN DOESN'T DO THIS, *SIGH*: "BSSGP_SP.send(dec) to all component;"</span><br><span>                       for (var integer i := 0; i < sizeof(ClientTable); i := i+1) {</span><br><span>                             if (isbound(ClientTable[i].comp_ref)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                 BSSGP_SP.send(dec) to ClientTable[i].comp_ref;</span><br><span style="color: hsl(120, 100%, 40%);">+                                        f_send_bssgp_dec(dec, ClientTable[i].comp_ref);</span><br><span>                              }</span><br><span>                    }</span><br><span>            }</span><br><span>@@ -567,14 +586,14 @@</span><br><span>            var template OCT4 tlli := f_bssgp_get_tlli(udi.bssgp);</span><br><span>               if (isvalue(tlli)) {</span><br><span>                         vc_conn := f_tbl_comp_by_tlli(valueof(tlli));</span><br><span style="color: hsl(0, 100%, 40%);">-                   BSSGP_SP_SIG.send(dec) to vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+                    f_send_bssgp_dec(dec, vc_conn, BSSGP_SP_SIG);</span><br><span>                } else {</span><br><span>                     log("No TLLI: Broadcasting ", dec);</span><br><span>                        /* broadcast this message to all components */</span><br><span>                       // TITAN DOESN'T DO THIS, *SIGH*: "BSSGP_SP.send(dec) to all component;"</span><br><span>                       for (var integer i := 0; i < sizeof(ClientTable); i := i+1) {</span><br><span>                             if (isbound(ClientTable[i].comp_ref)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                 BSSGP_SP_SIG.send(dec) to ClientTable[i].comp_ref;</span><br><span style="color: hsl(120, 100%, 40%);">+                                    f_send_bssgp_dec(dec, vc_conn, BSSGP_SP_SIG);</span><br><span>                                }</span><br><span>                    }</span><br><span>            }</span><br><span>@@ -731,47 +750,5 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template BssgpDecoded tr_BD_BSSGP(template PDU_BSSGP bg) := {</span><br><span style="color: hsl(0, 100%, 40%);">- bssgp := bg,</span><br><span style="color: hsl(0, 100%, 40%);">-    llc := *,</span><br><span style="color: hsl(0, 100%, 40%);">-       l3_mo := *,</span><br><span style="color: hsl(0, 100%, 40%);">-     l3_mt := *,</span><br><span style="color: hsl(0, 100%, 40%);">-     sndcp := *</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-template BssgpDecoded tr_BD_LLC(template PDU_LLC llc) := {</span><br><span style="color: hsl(0, 100%, 40%);">-   bssgp := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-     llc := llc,</span><br><span style="color: hsl(0, 100%, 40%);">-     l3_mo := *,</span><br><span style="color: hsl(0, 100%, 40%);">-     l3_mt := *,</span><br><span style="color: hsl(0, 100%, 40%);">-     sndcp := *</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-template BssgpDecoded tr_BD_L3_MT(template PDU_L3_SGSN_MS mt) := {</span><br><span style="color: hsl(0, 100%, 40%);">-   bssgp := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-     llc := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-       l3_mo := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-  l3_mt := mt,</span><br><span style="color: hsl(0, 100%, 40%);">-    sndcp := omit</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-template BssgpDecoded tr_BD_L3_MO(template PDU_L3_MS_SGSN mo) := {</span><br><span style="color: hsl(0, 100%, 40%);">-        bssgp := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-     llc := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-       l3_mo := mo,</span><br><span style="color: hsl(0, 100%, 40%);">-    l3_mt := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-  sndcp := omit</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-template BssgpDecoded tr_BD_SNDCP(template BIT4 sapi, template PDU_SN sn) := {</span><br><span style="color: hsl(0, 100%, 40%);">-    bssgp := ?,</span><br><span style="color: hsl(0, 100%, 40%);">-     llc := tr_LLC_UI(?, sapi),</span><br><span style="color: hsl(0, 100%, 40%);">-      l3_mo := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-  l3_mt := omit,</span><br><span style="color: hsl(0, 100%, 40%);">-  sndcp := sn</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> </span><br><span> }</span><br><span>diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn</span><br><span>index e00f92b..a88dfed 100644</span><br><span>--- a/pcu/PCU_Tests.ttcn</span><br><span>+++ b/pcu/PCU_Tests.ttcn</span><br><span>@@ -324,15 +324,15 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-function f_bssgp_wait_ul_ud(template BssgpDecoded bd_exp) runs on dummy_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_bssgp_wait_ul_ud(template PDU_BSSGP exp) runs on dummy_CT {</span><br><span>  timer T := 5.0;</span><br><span>      T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(bd_exp) {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSGP[0].receive(exp) {</span><br><span>           log("found matching BSSGP UL-UNITDATA PDU");</span><br><span>               }</span><br><span>    [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Timeout waiting for ", bd_exp);</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Timeout waiting for ", exp);</span><br><span>             mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span>@@ -373,7 +373,7 @@</span><br><span>      }</span><br><span> </span><br><span>        for (var integer i := 0; i < sizeof(us.tbf.llc_pdus_enc); i := i+1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                f_bssgp_wait_ul_ud(tr_BD_BSSGP(tr_BSSGP_UL_UD(g_mmctx.tlli, ?, us.tbf.llc_pdus_enc[i])));</span><br><span style="color: hsl(120, 100%, 40%);">+             f_bssgp_wait_ul_ud(tr_BSSGP_UL_UD(g_mmctx.tlli, ?, us.tbf.llc_pdus_enc[i]));</span><br><span>         }</span><br><span>    setverdict(pass);</span><br><span> </span><br><span>@@ -393,26 +393,6 @@</span><br><span> }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_nsem() runs on dummy_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  f_init();</span><br><span style="color: hsl(0, 100%, 40%);">-       f_bssgp_establish();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    while (true) {</span><br><span style="color: hsl(0, 100%, 40%);">-          var BssgpDecoded bd;</span><br><span style="color: hsl(0, 100%, 40%);">-            alt {</span><br><span style="color: hsl(0, 100%, 40%);">-                   [] BSSGP[0].receive(tr_BD_BSSGP(?)) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-                            log("BSSGP Rx: ", bd);</span><br><span style="color: hsl(0, 100%, 40%);">-                                //log("GMM Rx: ", dec_PDU_L3_MS_SGSN(pdu.payload));</span><br><span style="color: hsl(0, 100%, 40%);">-                           g_mmctx.tlli := bd.bssgp.pDU_BSSGP_UL_UNITDATA.tLLI;</span><br><span style="color: hsl(0, 100%, 40%);">-                            tx_gmm(LLC_CR_DL_CMD, gmm_auth_req);</span><br><span style="color: hsl(0, 100%, 40%);">-                    }</span><br><span style="color: hsl(0, 100%, 40%);">-                       [] BSSGP[0].receive(t_BssgpStsInd(?, ?, BVC_S_UNBLOCKED)) { repeat; }</span><br><span style="color: hsl(0, 100%, 40%);">-                   [] BSSGP[0].receive { repeat; }</span><br><span style="color: hsl(0, 100%, 40%);">-         }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> </span><br><span> function f_llc_dec_and_log(in octetstring inp) {</span><br><span>   log("LLC Input: ", inp);</span><br><span>diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn</span><br><span>index 36db225..4732da6 100644</span><br><span>--- a/pcu/PCU_Tests_RAW.ttcn</span><br><span>+++ b/pcu/PCU_Tests_RAW.ttcn</span><br><span>@@ -433,7 +433,7 @@</span><br><span> </span><br><span>    f_sleep(1.0);</span><br><span>        f_pcuif_tx(ts_PCUIF_SUSP_REQ(0, tlli, ra_id, 0));</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP_SIG[0].receive(tr_BD_BSSGP(tr_BSSGP_SUSPEND(tlli, mp_gb_cfg.cell_id.ra_id)));</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSGP_SIG[0].receive(tr_BSSGP_SUSPEND(tlli, mp_gb_cfg.cell_id.ra_id));</span><br><span> </span><br><span>   setverdict(pass);</span><br><span> }</span><br><span>diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn</span><br><span>index 03c9d05..e349719 100644</span><br><span>--- a/sgsn/SGSN_Tests.ttcn</span><br><span>+++ b/sgsn/SGSN_Tests.ttcn</span><br><span>@@ -401,12 +401,12 @@</span><br><span> </span><br><span> altstep as_mm_identity(integer gb_idx := 0) runs on BSSGP_ConnHdlr {</span><br><span>      var MobileL3_CommonIE_Types.MobileIdentityLV mi;</span><br><span style="color: hsl(0, 100%, 40%);">-        [] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSGP[gb_idx].receive(tr_GMM_ID_REQ('001'B)) {</span><br><span>            mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span>           f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi), gb_idx);</span><br><span>               repeat;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSGP[gb_idx].receive(tr_GMM_ID_REQ('010'B)) {</span><br><span>            mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span>           f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi), gb_idx);</span><br><span>               repeat;</span><br><span>@@ -416,12 +416,9 @@</span><br><span> /* receive a L3 (GMM/SM) message over whatever is the appropriate lower-layer bearer */</span><br><span> function f_receive_l3(template PDU_L3_SGSN_MS rx_tpl := ?, integer gb_idx := 0)</span><br><span> runs on BSSGP_ConnHdlr return PDU_L3_SGSN_MS {</span><br><span style="color: hsl(0, 100%, 40%);">-  var BssgpDecoded bd;</span><br><span>         var PDU_L3_SGSN_MS l3_mt;</span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[gb_idx].receive(tr_BD_L3_MT(rx_tpl)) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-          l3_mt := bd.l3_mt;</span><br><span style="color: hsl(0, 100%, 40%);">-              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSGP[gb_idx].receive(rx_tpl) -> value l3_mt { }</span><br><span>       }</span><br><span>    return l3_mt;</span><br><span> }</span><br><span>@@ -658,14 +655,14 @@</span><br><span> </span><br><span>       f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>       alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSGP[0].receive(tr_GMM_ID_REQ(?)) {</span><br><span>              /* don't send ID Response */</span><br><span>             repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT('09'O))) {</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT('09'O)) {</span><br><span>           setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>               setverdict(fail, "Wrong Attach Reject Cause");</span><br><span>             mtc.stop;</span><br><span>            }</span><br><span>@@ -688,7 +685,7 @@</span><br><span>      [] GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi)); { }</span><br><span>   }</span><br><span>    /* don't send SAI-response from HLR */</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?)));</span><br><span style="color: hsl(120, 100%, 40%);">+       BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?));</span><br><span>   setverdict(pass);</span><br><span> }</span><br><span> testcase TC_attach_auth_sai_timeout() runs on test_CT {</span><br><span>@@ -709,7 +706,7 @@</span><br><span>              GSUP.send(ts_GSUP_SAI_ERR(g_pars.imsi, 23));</span><br><span>                 }</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?)));</span><br><span style="color: hsl(120, 100%, 40%);">+       BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?));</span><br><span>   setverdict(pass);</span><br><span> }</span><br><span> testcase TC_attach_auth_sai_reject() runs on test_CT {</span><br><span>@@ -721,7 +718,7 @@</span><br><span> </span><br><span> /* HLR never responds to UL REQ, expect ATTACH REJECT */</span><br><span> private function f_TC_attach_gsup_lu_timeout(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-  var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span>    var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span>         f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>@@ -730,11 +727,11 @@</span><br><span>       GSUP.receive(tr_GSUP_UL_REQ(g_pars.imsi));</span><br><span>   /* Never follow-up with ISD_REQ or UL_RES */</span><br><span>         alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>               setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>            setverdict(fail);</span><br><span>            mtc.stop;</span><br><span>            }</span><br><span>@@ -750,7 +747,7 @@</span><br><span> </span><br><span> /* HLR rejects UL REQ, expect ATTACH REJECT */</span><br><span> private function f_TC_attach_gsup_lu_reject(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-    var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span>    var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span>         f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>@@ -760,11 +757,11 @@</span><br><span>               GSUP.send(ts_GSUP_UL_ERR(g_pars.imsi, 0));</span><br><span>   }</span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>               setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+           f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>            setverdict(fail);</span><br><span>            mtc.stop;</span><br><span>            }</span><br><span>@@ -781,7 +778,7 @@</span><br><span> </span><br><span> /* Attempt of combined GPRS + IMSI attach: network should ACK only GPRS attach  */</span><br><span> private function f_TC_attach_combined(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-      var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span>    var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span>         f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, true, false, omit, omit));</span><br><span>@@ -789,8 +786,8 @@</span><br><span>  /* Expect MSC to perform LU with HLR */</span><br><span>      f_gmm_gsup_lu_isd();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-              f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>    }</span><br><span>    f_send_l3_gmm_llc(ts_GMM_ATTACH_COMPL);</span><br><span>      setverdict(pass);</span><br><span>@@ -805,15 +802,15 @@</span><br><span> </span><br><span> /* Attempt of GPRS ATTACH in 'accept all' mode */</span><br><span> private function f_TC_attach_accept_all(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-   var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span>    var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span>         g_pars.net.expect_auth := false;</span><br><span> </span><br><span>         f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>       f_gmm_auth();</span><br><span style="color: hsl(0, 100%, 40%);">-   BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-              f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>    }</span><br><span>    f_send_l3_gmm_llc(ts_GMM_ATTACH_COMPL);</span><br><span>      setverdict(pass);</span><br><span>@@ -840,13 +837,13 @@</span><br><span>    f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>       alt {</span><br><span>        [] as_mm_identity();</span><br><span style="color: hsl(0, 100%, 40%);">-    [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT('07'O))) {</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT('07'O)) {</span><br><span>           setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>               setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) {</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT(*, *, *)) {</span><br><span>                 setverdict(fail);</span><br><span>            mtc.stop;</span><br><span>            }</span><br><span>@@ -871,7 +868,7 @@</span><br><span> </span><br><span>  f_send_l3_gmm_llc(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, old_ra, false, omit, omit));</span><br><span>  alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_RAU_REJECT('0a'O))) {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSGP[0].receive(tr_GMM_RAU_REJECT('0a'O)) {</span><br><span>              setverdict(pass);</span><br><span>            }</span><br><span>    /* FIXME: Expect XID RESET? */</span><br><span>@@ -887,8 +884,6 @@</span><br><span> }</span><br><span> </span><br><span> private function f_TC_attach_rau(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-       var BssgpDecoded bd;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>         /* first perform regular attach */</span><br><span>   f_TC_attach(id);</span><br><span> </span><br><span>@@ -905,7 +900,7 @@</span><br><span> </span><br><span> /* general GPRS DETACH helper */</span><br><span> function f_detach_mo(BIT3 detach_type, boolean power_off, boolean expect_purge, integer bssgp_index := 0) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-        var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span>    timer T := 5.0;</span><br><span>      f_send_l3_gmm_llc(ts_GMM_DET_REQ_MO(detach_type, power_off), bssgp_index);</span><br><span>   if (expect_purge) {</span><br><span>@@ -918,7 +913,7 @@</span><br><span>            setverdict(fail, "Unexpected GSUP PURGE MS for unregistered TLLI");</span><br><span>                mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [power_off] BSSGP[bssgp_index].receive(tr_BD_L3_MT(tr_GMM_DET_ACCEPT_MT)) -> value bd {</span><br><span style="color: hsl(120, 100%, 40%);">+    [power_off] BSSGP[bssgp_index].receive(tr_GMM_DET_ACCEPT_MT) -> value l3_mt {</span><br><span>             g_pars.ra := omit;</span><br><span>           setverdict(fail, "Unexpected DETACH ACCEPT in power-off DETACH");</span><br><span>          mtc.stop;</span><br><span>@@ -927,12 +922,12 @@</span><br><span>    [power_off] T.timeout {</span><br><span>              setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [not power_off] BSSGP[bssgp_index].receive(tr_BD_L3_MT(tr_GMM_DET_ACCEPT_MT)) -> value bd {</span><br><span style="color: hsl(120, 100%, 40%);">+        [not power_off] BSSGP[bssgp_index].receive(tr_GMM_DET_ACCEPT_MT) -> value l3_mt {</span><br><span>                 g_pars.ra := omit;</span><br><span>           setverdict(pass);</span><br><span>            /* TODO: check if any PDP contexts are deactivated on network side? */</span><br><span>               }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[bssgp_index].receive(tr_BD_L3_MT(?)) -> value bd {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSGP[bssgp_index].receive(PDU_L3_SGSN_MS:?) -> value l3_mt {</span><br><span>          if (power_off) {</span><br><span>                     setverdict(fail, "Unexpected Layer 3 package received in power-off DETACH");</span><br><span>               } else {</span><br><span>@@ -1056,22 +1051,22 @@</span><br><span>                                           omit, recovery));</span><br><span>    }</span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [exp_rej] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, apars.exp_rej_cause))) {</span><br><span style="color: hsl(120, 100%, 40%);">+     [exp_rej] BSSGP[gb_idx].receive(tr_SM_ACT_PDP_REJ(apars.tid, apars.exp_rej_cause)) {</span><br><span>                 setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [exp_rej] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT)) {</span><br><span style="color: hsl(120, 100%, 40%);">+  [exp_rej] BSSGP[gb_idx].receive(tr_SM_ACT_PDP_ACCEPT) {</span><br><span>              setverdict(fail, "Unexpected PDP CTX ACT ACC");</span><br><span>            mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [not exp_rej] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [not exp_rej] BSSGP[gb_idx].receive(tr_SM_ACT_PDP_REJ(apars.tid, ?)) {</span><br><span>               setverdict(fail, "Unexpected PDP CTX ACT FAIL");</span><br><span>           mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [not exp_rej] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [not exp_rej] BSSGP[gb_idx].receive(tr_SM_ACT_PDP_REJ(apars.tid, ?)) {</span><br><span>               setverdict(fail, "Unexpected PDP CTX ACT FAIL");</span><br><span>           mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [not exp_rej] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT(apars.tid, apars.sapi))) {</span><br><span style="color: hsl(120, 100%, 40%);">+       [not exp_rej] BSSGP[gb_idx].receive(tr_SM_ACT_PDP_ACCEPT(apars.tid, apars.sapi)) {</span><br><span>           setverdict(pass);</span><br><span>            }</span><br><span>    [] as_xid(apars, gb_idx);</span><br><span>@@ -1090,7 +1085,7 @@</span><br><span>            GTP.send(ts_GTPC_DeletePdpResp(g_ud.peer, seq_nr, apars.sgsn_tei_c, '7F'O));</span><br><span>         }</span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_ACCEPT_MT(apars.tid))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSGP[gb_idx].receive(tr_SM_DEACT_PDP_ACCEPT_MT(apars.tid)) {</span><br><span>             setverdict(pass);</span><br><span>            }</span><br><span>    [] as_xid(apars, gb_idx);</span><br><span>@@ -1114,7 +1109,7 @@</span><br><span>    T.start;</span><br><span> </span><br><span>         alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[gb_idx].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[gb_idx].receive(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true)) {</span><br><span>               f_send_l3_gmm_llc(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid), gb_idx);</span><br><span>             }</span><br><span>    [not error_ind] GTP.receive(tr_GTPC_MsgType(?, deletePDPContextResponse, apars.ggsn_tei_c)) {</span><br><span>@@ -1219,7 +1214,7 @@</span><br><span> }</span><br><span> </span><br><span> private altstep as_xid(PdpActPars apars, integer gb_idx := 0) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-        [] BSSGP[gb_idx].receive(tr_BD_LLC(tr_LLC_XID_MT_CMD(?, apars.sapi))) {</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSGP[gb_idx].receive(tr_LLC_XID_MT_CMD(?, apars.sapi)) {</span><br><span>                 repeat;</span><br><span>      }</span><br><span> }</span><br><span>@@ -1265,7 +1260,8 @@</span><br><span>       /* Expect PDU via BSSGP/LLC on simulated PCU from SGSN */</span><br><span>    alt {</span><br><span>        [] as_xid(apars, gb_idx);</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[gb_idx].receive(tr_BD_SNDCP(apars.sapi, tr_SN_UD(apars.nsapi, payload)));</span><br><span style="color: hsl(120, 100%, 40%);">+    //[] BSSGP[gb_idx].receive(tr_BD_SNDCP(apars.sapi, tr_SN_UD(apars.nsapi, payload)));</span><br><span style="color: hsl(120, 100%, 40%);">+  [] BSSGP[gb_idx].receive(tr_SN_UD(apars.nsapi, payload));</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span>@@ -1304,14 +1300,14 @@</span><br><span>                                      apars.apn, apars.pco));</span><br><span>         alt {</span><br><span>        /* We might want toalso actually expect a PDPC CTX ACT REJ? */</span><br><span style="color: hsl(0, 100%, 40%);">-  [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_DET_REQ_MT(?, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[0].receive(tr_GMM_DET_REQ_MT(?, ?)) {</span><br><span>               setverdict(pass);</span><br><span>            }</span><br><span>    [] GTP.receive(tr_GTPC_MsgType(?, createPDPContextRequest, ?)) {</span><br><span>             setverdict(fail, "Unexpected GTP PDP CTX ACT");</span><br><span>            mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[0].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT(?, ?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSGP[0].receive(tr_SM_ACT_PDP_ACCEPT(?, ?)) {</span><br><span>            setverdict(fail, "Unexpected SM PDP CTX ACT ACK");</span><br><span>                 mtc.stop;</span><br><span>            }</span><br><span>@@ -1447,7 +1443,7 @@</span><br><span>    }</span><br><span>    var OCT1 cause_network_failure := int2oct(38, 1)</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_REQ_MT(apars.tid, cause_network_failure, true))) {</span><br><span style="color: hsl(120, 100%, 40%);">+    [] BSSGP[0].receive(tr_SM_DEACT_PDP_REQ_MT(apars.tid, cause_network_failure, true)) {</span><br><span>                f_send_l3_gmm_llc(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span>             setverdict(pass);</span><br><span>            }</span><br><span>@@ -1522,7 +1518,7 @@</span><br><span> </span><br><span>        for (i := 0; i < 5; i := i+1) {</span><br><span>           alt {</span><br><span style="color: hsl(0, 100%, 40%);">-                   [] BSSGP[0].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true))) {}</span><br><span style="color: hsl(120, 100%, 40%);">+                       [] BSSGP[0].receive(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true)) {}</span><br><span>                   [] as_xid(apars);</span><br><span>            }</span><br><span>    }</span><br><span>@@ -1567,7 +1563,7 @@</span><br><span>                                            apars.ggsn_ip_c, apars.ggsn_ip_u, apars.chg_id,</span><br><span>                                              omit, omit));</span><br><span>        }</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT)) {}</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSGP[0].receive(tr_SM_ACT_PDP_ACCEPT) {}</span><br><span> </span><br><span>        /* Now the same with Deact */</span><br><span>        f_send_l3_gmm_llc(ts_SM_DEACT_PDP_REQ_MO(apars.tid, '00'O, false, omit), 0);</span><br><span>@@ -1583,7 +1579,7 @@</span><br><span>                 GTP.send(ts_GTPC_DeletePdpResp(g_ud_second.peer, seq_nr, apars.sgsn_tei_c, '7F'O));</span><br><span>  }</span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_ACCEPT_MT(apars.tid))) {</span><br><span style="color: hsl(120, 100%, 40%);">+      [] BSSGP[0].receive(tr_SM_DEACT_PDP_ACCEPT_MT(apars.tid)) {</span><br><span>          setverdict(pass);</span><br><span>            }</span><br><span>    [] as_xid(apars, 0);</span><br><span>@@ -1614,7 +1610,7 @@</span><br><span>         g_delete_req := ts_GTPC_DeletePDP(peer, seq_nr, apars.sgsn_tei_c, apars.nsapi, '1'B);</span><br><span>        GTP.send(g_delete_req);</span><br><span>      alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true))) {</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSGP[0].receive(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true)) {</span><br><span>                    f_send_l3_gmm_llc(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid), 0);</span><br><span>          }</span><br><span>    [] as_xid(apars, 0);</span><br><span>@@ -1669,7 +1665,7 @@</span><br><span>         timer T := 5.0;</span><br><span>      T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_DET_REQ_MT(*, *, *))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                [] BSSGP[0].receive(tr_GMM_DET_REQ_MT(*, *, *)) {</span><br><span>                    T.stop;</span><br><span>                      setverdict(fail, "Unexpected GMM Detach Request");</span><br><span>                         mtc.stop;</span><br><span>@@ -1728,7 +1724,7 @@</span><br><span>    GSUP.send(ts_GSUP_UL_RES(g_pars.imsi));</span><br><span> </span><br><span>  /* MS: receive a Detach Request */</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_DET_REQ_MT(c_GMM_DTT_MT_IMSI_DETACH, ?, ?)));</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSGP[0].receive(tr_GMM_DET_REQ_MT(c_GMM_DTT_MT_IMSI_DETACH, ?, ?));</span><br><span>         f_send_l3_gmm_llc(ts_GMM_DET_ACCEPT_MO);</span><br><span> </span><br><span>         setverdict(pass);</span><br><span>@@ -1823,15 +1819,15 @@</span><br><span>  f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));</span><br><span> </span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>                       /* break */</span><br><span>          }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('001'B)) {</span><br><span>                         mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span>                   f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));</span><br><span>                       repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('010'B)) {</span><br><span>                         /* ignore ID REQ IMEI */</span><br><span>                     count_req := count_req + 1;</span><br><span>                  repeat;</span><br><span>@@ -1871,15 +1867,15 @@</span><br><span>    f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));</span><br><span> </span><br><span>    alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>                       /* break */</span><br><span>          }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('001'B)) {</span><br><span>                         /* ignore ID REQ IMSI */</span><br><span>                     count_req := count_req + 1;</span><br><span>                  repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('010'B)) {</span><br><span>                         mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span>                   f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));</span><br><span>                       repeat;</span><br><span>@@ -1931,7 +1927,7 @@</span><br><span> </span><br><span> private function f_TC_attach_closed_imsi_added(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>        var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span style="color: hsl(0, 100%, 40%);">-        var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span> </span><br><span>        /* unregister the old IMSI */</span><br><span>        f_bssgp_client_unregister(g_pars.imsi);</span><br><span>@@ -1945,12 +1941,12 @@</span><br><span>    f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>       f_gmm_auth();</span><br><span>        alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>                       setverdict(fail, "Received unexpected GMM Attach REJECT");</span><br><span>                         mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-                        f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+          [] BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT(*, *, *)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+                        f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>                    f_send_l3_gmm_llc(ts_GMM_ATTACH_COMPL);</span><br><span>                      setverdict(pass);</span><br><span>            }</span><br><span>@@ -2004,7 +2000,7 @@</span><br><span>            [] T.timeout {</span><br><span>                       /* break */</span><br><span>          }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT(*, *, *)) {</span><br><span>                         /* ignore */</span><br><span>                         count_req := count_req + 1;</span><br><span>                  T.start;</span><br><span>@@ -2032,17 +2028,17 @@</span><br><span> }</span><br><span> </span><br><span> private function f_routing_area_update(RoutingAreaIdentificationV ra, integer bssgp := 0) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-       var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span> </span><br><span>        /* then send RAU */</span><br><span>  f_send_l3_gmm_llc(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, g_pars.ra, false, omit, omit), bssgp);</span><br><span>        alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[bssgp].receive(tr_BD_L3_MT(tr_GMM_RAU_ACCEPT)) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-                f_process_rau_accept(bd.l3_mt.msgs.gprs_mm.routingAreaUpdateAccept, bssgp);</span><br><span style="color: hsl(120, 100%, 40%);">+   [] BSSGP[bssgp].receive(tr_GMM_RAU_ACCEPT) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+                f_process_rau_accept(l3_mt.msgs.gprs_mm.routingAreaUpdateAccept, bssgp);</span><br><span>             f_send_l3_gmm_llc(ts_GMM_RAU_COMPL, bssgp);</span><br><span>          setverdict(pass);</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-       [] BSSGP[bssgp].receive(tr_BD_L3_MT(tr_GMM_RAU_REJECT)) {</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSGP[bssgp].receive(tr_GMM_RAU_REJECT) {</span><br><span>                 setverdict(fail, "Unexpected RAU Reject");</span><br><span>                 mtc.stop;</span><br><span>            }</span><br><span>@@ -2051,8 +2047,6 @@</span><br><span> }</span><br><span> </span><br><span> private function f_TC_attach_rau_a_a(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-      var BssgpDecoded bd;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>         /* first perform regular attach */</span><br><span>   f_TC_attach(id);</span><br><span> </span><br><span>@@ -2081,8 +2075,6 @@</span><br><span> }</span><br><span> </span><br><span> private function f_TC_attach_rau_a_b(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-   var BssgpDecoded bd;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>         f_TC_attach(id);</span><br><span> </span><br><span>         log("attach complete sending rau");</span><br><span>@@ -2117,21 +2109,21 @@</span><br><span>      var integer count_req := 0;</span><br><span>  var MobileL3_CommonIE_Types.MobileIdentityLV mi;</span><br><span>     var RoutingAreaIdentificationV rand_rai := f_random_RAI();</span><br><span style="color: hsl(0, 100%, 40%);">-      var BssgpDecoded bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var PDU_L3_SGSN_MS l3_mt;</span><br><span> </span><br><span>        f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), rand_rai, true, false, omit, omit));</span><br><span> </span><br><span>  alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>                       setverdict(fail, "Unexpected GMM ATTACH REJECT");</span><br><span>                  mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('001'B)) {</span><br><span>                         mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span>                   f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));</span><br><span>                       repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('010'B)) {</span><br><span>                         /* send out a second GMM_Attach Request.</span><br><span>                      * If the SGSN follows the rules, this 2nd ATTACH REQ should be ignored, because</span><br><span>                      * of the same content */</span><br><span>@@ -2144,21 +2136,21 @@</span><br><span> </span><br><span>      /* we've sent already a IMEI answer, we should NOT asked again for IMEI */</span><br><span>       alt {</span><br><span style="color: hsl(0, 100%, 40%);">-           [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('001'B)) {</span><br><span>                         mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span>                   f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));</span><br><span>                       repeat;</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             [] BSSGP[0].receive(tr_GMM_ID_REQ('010'B)) {</span><br><span>                         setverdict(fail, "Unexpected GMM ID REQ (IMEI).");</span><br><span>                         mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span style="color: hsl(120, 100%, 40%);">+           [] BSSGP[0].receive(tr_GMM_ATTACH_REJECT(?)) {</span><br><span>                       setverdict(fail, "Unexpected GMM ATTACH REJECT");</span><br><span>                  mtc.stop;</span><br><span>            }</span><br><span style="color: hsl(0, 100%, 40%);">-               [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-                   f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+          [] BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+                   f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>                    f_send_l3_gmm_llc(ts_GMM_ATTACH_COMPL);</span><br><span>                      setverdict(pass);</span><br><span>                    /* FIXME: Extract P-TMSI, if any. Only send Complete if necessary */</span><br><span>@@ -2186,7 +2178,6 @@</span><br><span> }</span><br><span> </span><br><span> private function f_TC_attach_usim_resync(charstring id) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-       var BssgpDecoded bd;</span><br><span>         var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span>         var template PDU_L3_MS_SGSN attach_req := ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit);</span><br><span>@@ -2227,7 +2218,7 @@</span><br><span> </span><br><span>    var template PDU_L3_SGSN_MS auth_ciph_req := tr_GMM_AUTH_REQ(g_pars.vec.rand);</span><br><span>       auth_ciph_req.msgs.gprs_mm.authenticationAndCipheringRequest.authenticationParameterAUTN := autn;</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].receive(tr_BD_L3_MT(auth_ciph_req)) -> value bd;</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP[0].receive(auth_ciph_req) -> value l3_mt;</span><br><span> </span><br><span>       /* send the gmm auth failure with resync IE */</span><br><span>       f_send_l3_gmm_llc(ts_GMM_AUTH_FAIL_UMTS_AKA_RESYNC(g_pars.vec.auts));</span><br><span>@@ -2259,8 +2250,7 @@</span><br><span>        /* wait for the new Auth Request */</span><br><span>  auth_ciph_req := tr_GMM_AUTH_REQ(g_pars.vec.rand);</span><br><span>   auth_ciph_req.msgs.gprs_mm.authenticationAndCipheringRequest.authenticationParameterAUTN := autn;</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].receive(tr_BD_L3_MT(auth_ciph_req)) -> value bd;</span><br><span style="color: hsl(0, 100%, 40%);">-    l3_mt := bd.l3_mt;</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSGP[0].receive(auth_ciph_req) -> value l3_mt;</span><br><span>   var BIT4 ac_ref := l3_mt.msgs.gprs_mm.authenticationAndCipheringRequest.acReferenceNumber.valueField;</span><br><span>        var template PDU_L3_MS_SGSN auth_ciph_resp := ts_GMM_AUTH_RESP_2G(ac_ref, g_pars.vec.sres);</span><br><span>  auth_ciph_resp := ts_GMM_AUTH_RESP_2G(ac_ref, g_pars.vec.sres);</span><br><span>@@ -2284,8 +2274,8 @@</span><br><span>      /* Expect SGSN to perform LU with HLR */</span><br><span>     f_gmm_gsup_lu_isd();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span style="color: hsl(0, 100%, 40%);">-              f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP[0].receive(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?)) -> value l3_mt {</span><br><span style="color: hsl(120, 100%, 40%);">+              f_process_attach_accept(l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>    }</span><br><span>    f_send_l3_gmm_llc(ts_GMM_ATTACH_COMPL);</span><br><span>      setverdict(pass);</span><br><span>@@ -2337,7 +2327,7 @@</span><br><span>    f_gmm_attach(false, false);</span><br><span>  f_sleep(1.0);</span><br><span>        f_send_llc(ts_LLC_SABM({}, '1'B, c_LLC_SAPI_LLGMM, LLC_CR_UL_CMD));</span><br><span style="color: hsl(0, 100%, 40%);">-     BSSGP[0].receive(tr_BD_LLC(tr_LLC_DM(?, c_LLC_SAPI_LLGMM, LLC_CR_DL_RSP)));</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSGP[0].receive(tr_LLC_DM(?, c_LLC_SAPI_LLGMM, LLC_CR_DL_RSP));</span><br><span>     setverdict(pass);</span><br><span> }</span><br><span> testcase TC_llc_sabm_dm_llgmm() runs on test_CT {</span><br><span>@@ -2353,7 +2343,7 @@</span><br><span>  f_gmm_attach(false, false);</span><br><span>  f_sleep(1.0);</span><br><span>        f_send_llc(ts_LLC_SABM({}, '1'B, c_LLC_SAPI_LL5, LLC_CR_UL_CMD));</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].receive(tr_BD_LLC(tr_LLC_DM(?, c_LLC_SAPI_LL5, LLC_CR_DL_RSP)));</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSGP[0].receive(tr_LLC_DM(?, c_LLC_SAPI_LL5, LLC_CR_DL_RSP));</span><br><span>       setverdict(pass);</span><br><span> }</span><br><span> testcase TC_llc_sabm_dm_ll5() runs on test_CT {</span><br><span>@@ -2380,7 +2370,7 @@</span><br><span>    xid_rx := { tr_XID_L3(''O) };</span><br><span>        f_send_llc(ts_LLC_XID_MO_CMD(xid, apars.sapi));</span><br><span>      alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_LLC(tr_LLC_XID(xid_rx, apars.sapi)));</span><br><span style="color: hsl(120, 100%, 40%);">+       [] BSSGP[0].receive(tr_LLC_XID(xid_rx, apars.sapi));</span><br><span>         [] as_xid(apars);</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span>@@ -2408,7 +2398,7 @@</span><br><span>    xid_rx := { tr_XID_N201U(1234) };</span><br><span>    f_send_llc(ts_LLC_XID_MO_CMD(xid, apars.sapi));</span><br><span>      alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] BSSGP[0].receive(tr_BD_LLC(tr_LLC_XID_MT_RSP(xid_rx, apars.sapi)));</span><br><span style="color: hsl(120, 100%, 40%);">+        [] BSSGP[0].receive(tr_LLC_XID_MT_RSP(xid_rx, apars.sapi));</span><br><span>  [] as_xid(apars);</span><br><span>    }</span><br><span>    setverdict(pass);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/13865">change 13865</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/+/13865"/><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: I8c1082880902dd9a04935945f0293895f4d0c53a </div>
<div style="display:none"> Gerrit-Change-Number: 13865 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>