<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10383">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">BSSGP_Emulation: move LLC layer out of BSSGP<br><br>The LLC layer needs to be accessed by the SGSN tests<br>in order to do multi-BSSGP tests.<br>Otherwise the sgsn will see LLC frame with wrong sequence<br>numbers and drop them.<br><br>Change-Id: Ie9e9d7da0a78a96f4f431c9085b9e273a39535f1<br>---<br>M library/BSSGP_Emulation.ttcn<br>M sgsn/SGSN_Tests.ttcn<br>2 files changed, 54 insertions(+), 35 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/83/10383/1</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 ca97ccd..c650fd5 100644</span><br><span>--- a/library/BSSGP_Emulation.ttcn</span><br><span>+++ b/library/BSSGP_Emulation.ttcn</span><br><span>@@ -136,6 +136,14 @@</span><br><span>   uint9_t n_u_rx_last optional</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_llc_create(boolean sgsn_role := false) return LLC_Entities {</span><br><span style="color: hsl(120, 100%, 40%);">+       var LLC_Entities llc;</span><br><span style="color: hsl(120, 100%, 40%);">+ for (var integer i := 0; i < 16; i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+               llc[i] := valueof(t_LLC_init(sgsn_role));</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return llc;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private template LLC_Entity t_LLC_init(boolean sgsn_role := false) := {</span><br><span>  sgsn_role := sgsn_role,</span><br><span>      n_u_tx_next := 0,</span><br><span>@@ -576,13 +584,13 @@</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_llc_get_n_u_tx(inout LLC_Entity llc) return uint9_t {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_llc_get_n_u_tx(inout LLC_Entity llc) return uint9_t {</span><br><span>         var uint9_t ret := llc.n_u_tx_next;</span><br><span>  llc.n_u_tx_next := llc.n_u_tx_next + 1;</span><br><span>      return ret;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-private function f_llc_sapi_by_l3_mo(PDU_L3_MS_SGSN l3_mo) return BIT4 {</span><br><span style="color: hsl(120, 100%, 40%);">+function f_llc_sapi_by_l3_mo(PDU_L3_MS_SGSN l3_mo) return BIT4 {</span><br><span>       if (ischosen(l3_mo.msgs.gprs_mm)) {</span><br><span>          return c_LLC_SAPI_LLGMM;</span><br><span>     } else if (ischosen(l3_mo.msgs.gprs_sm)) {</span><br><span>diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn</span><br><span>index 54a5fe1..974576f 100644</span><br><span>--- a/sgsn/SGSN_Tests.ttcn</span><br><span>+++ b/sgsn/SGSN_Tests.ttcn</span><br><span>@@ -73,6 +73,7 @@</span><br><span> type component BSSGP_ConnHdlr extends BSSGP_Client_CT, GSUP_ConnHdlr, GTP_ConnHdlr {</span><br><span>  var BSSGP_ConnHdlrPars g_pars;</span><br><span>       timer g_Tguard;</span><br><span style="color: hsl(120, 100%, 40%);">+       var LLC_Entities llc;</span><br><span> }</span><br><span> </span><br><span> type record SGSN_ConnHdlrNetworkPars {</span><br><span>@@ -301,6 +302,8 @@</span><br><span>       /* do some common stuff like setting up g_pars */</span><br><span>    g_pars := pars;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   llc := f_llc_create(false);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        /* register with BSSGP core */</span><br><span>       f_bssgp_client_register(g_pars.imsi, g_pars.tlli, g_pars.bssgp_cell_id[0]);</span><br><span>  /* tell GSUP dispatcher to send this IMSI to us */</span><br><span>@@ -335,16 +338,24 @@</span><br><span>   f_sleep(20.0);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_send_llc(template PDU_L3_MS_SGSN l3_mo, integer gb_index := 0) runs on BSSGP_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+   var octetstring l3_enc := enc_PDU_L3_MS_SGSN(valueof(l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+ var BIT4 sapi := f_llc_sapi_by_l3_mo(valueof(l3_mo));</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer n_u := f_llc_get_n_u_tx(llc[bit2int(sapi)]);</span><br><span style="color: hsl(120, 100%, 40%);">+      var octetstring llc_enc := enc_PDU_LLC(valueof(ts_LLC_UI(l3_enc, sapi, '0'B, n_u)));</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSGP[gb_index].send(ts_BSSGP_UL_UD(g_pars.tlli, g_pars.bssgp_cell_id[gb_index], llc_enc));</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> altstep as_mm_identity() runs on BSSGP_ConnHdlr {</span><br><span>        var MobileL3_CommonIE_Types.MobileIdentityLV mi;</span><br><span>     [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span>            mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span style="color: hsl(0, 100%, 40%);">-              BSSGP[0].send(ts_GMM_ID_RESP(mi));</span><br><span style="color: hsl(120, 100%, 40%);">+            f_send_llc(ts_GMM_ID_RESP(mi));</span><br><span>              repeat;</span><br><span>      }</span><br><span>    [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span>            mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span style="color: hsl(0, 100%, 40%);">-              BSSGP[0].send(ts_GMM_ID_RESP(mi));</span><br><span style="color: hsl(120, 100%, 40%);">+            f_send_llc(ts_GMM_ID_RESP(mi));</span><br><span>              repeat;</span><br><span>      }</span><br><span> }</span><br><span>@@ -413,7 +424,7 @@</span><br><span>                         l3_mo.msgs.gprs_mm.authenticationAndCipheringResponse.imeisv :=</span><br><span>                                              valueof(ts_MI_IMEISV_TLV(g_pars.imei & '0'H));</span><br><span>           }</span><br><span style="color: hsl(0, 100%, 40%);">-               BSSGP[0].send(l3_mo);</span><br><span style="color: hsl(120, 100%, 40%);">+         f_send_llc(l3_mo);</span><br><span>   } else {</span><br><span>             /* wait for identity procedure */</span><br><span>            f_sleep(1.0);</span><br><span>@@ -519,7 +530,7 @@</span><br><span>   * revisionLevelIndicatior is at the wrong place! */</span><br><span>         attach_req.msgs.gprs_mm.attachRequest.msNetworkCapability.msNetworkCapabilityV.solSACapability := '0'B;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     BSSGP[0].send(attach_req);</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(attach_req);</span><br><span>      f_gmm_auth(umts_aka_challenge, force_gsm_sres);</span><br><span>      /* Expect SGSN to perform LU with HLR */</span><br><span>     f_gmm_gsup_lu_isd();</span><br><span>@@ -528,7 +539,7 @@</span><br><span>           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>         }</span><br><span>    /* FIXME: Extract P-TMSI, if any. Only send Complete if necessary */</span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_COMPL);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_send_llc(ts_GMM_ATTACH_COMPL);</span><br><span> }</span><br><span> </span><br><span> private function f_TC_attach(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>@@ -580,7 +591,7 @@</span><br><span> private function f_TC_attach_auth_id_timeout(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>      var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>      alt {</span><br><span>        [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ(?))) {</span><br><span>                 /* don't send ID Response */</span><br><span>@@ -606,7 +617,7 @@</span><br><span> private function f_TC_attach_auth_sai_timeout(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>      var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_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>         [] GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi)); { }</span><br><span>@@ -626,7 +637,7 @@</span><br><span> private function f_TC_attach_auth_sai_reject(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>     var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_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>         [] GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi)); {</span><br><span>@@ -648,7 +659,7 @@</span><br><span>       var BssgpDecoded bd;</span><br><span>         var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>      f_gmm_auth();</span><br><span>        /* Expect MSC to perform LU with HLR */</span><br><span>      GSUP.receive(tr_GSUP_UL_REQ(g_pars.imsi));</span><br><span>@@ -677,7 +688,7 @@</span><br><span>     var BssgpDecoded bd;</span><br><span>         var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>      f_gmm_auth();</span><br><span>        /* Expect MSC to perform LU with HLR */</span><br><span>      GSUP.receive(tr_GSUP_UL_REQ(g_pars.imsi)) {</span><br><span>@@ -708,7 +719,7 @@</span><br><span>    var BssgpDecoded bd;</span><br><span>         var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, true, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+     f_send_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, true, false, omit, omit));</span><br><span>       f_gmm_auth();</span><br><span>        /* Expect MSC to perform LU with HLR */</span><br><span>      f_gmm_gsup_lu_isd();</span><br><span>@@ -716,7 +727,7 @@</span><br><span>   BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span>           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].send(ts_GMM_ATTACH_COMPL);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_send_llc(ts_GMM_ATTACH_COMPL);</span><br><span>     setverdict(pass);</span><br><span> }</span><br><span> testcase TC_attach_combined() runs on test_CT {</span><br><span>@@ -734,12 +745,12 @@</span><br><span> </span><br><span>        g_pars.net.expect_auth := false;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span>      f_gmm_auth();</span><br><span>        BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {</span><br><span>           f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].send(ts_GMM_ATTACH_COMPL);</span><br><span style="color: hsl(120, 100%, 40%);">+   f_send_llc(ts_GMM_ATTACH_COMPL);</span><br><span>     setverdict(pass);</span><br><span> }</span><br><span> testcase TC_attach_accept_all() runs on test_CT {</span><br><span>@@ -761,7 +772,7 @@</span><br><span> </span><br><span>        g_pars.net.expect_auth := false;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_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>         [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT('07'O))) {</span><br><span>@@ -793,7 +804,7 @@</span><br><span> private function f_TC_rau_unknown(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>   var RoutingAreaIdentificationV old_ra := f_random_RAI();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, old_ra, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+       f_send_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>        [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_RAU_REJECT('0a'O))) {</span><br><span>                 setverdict(pass);</span><br><span>@@ -831,7 +842,7 @@</span><br><span> function f_detach_mo(BIT3 detach_type, boolean power_off, boolean expect_purge) runs on BSSGP_ConnHdlr {</span><br><span>  var BssgpDecoded bd;</span><br><span>         timer T := 5.0;</span><br><span style="color: hsl(0, 100%, 40%);">- BSSGP[0].send(ts_GMM_DET_REQ_MO(detach_type, power_off));</span><br><span style="color: hsl(120, 100%, 40%);">+     f_send_llc(ts_GMM_DET_REQ_MO(detach_type, power_off));</span><br><span>       if (expect_purge) {</span><br><span>          GSUP.receive(tr_GSUP_PURGE_MS_REQ(g_pars.imsi, OSMO_GSUP_CN_DOMAIN_PS));</span><br><span>             GSUP.send(ts_GSUP_PURGE_MS_RES(g_pars.imsi));</span><br><span>@@ -958,7 +969,7 @@</span><br><span>          recovery := ts_Recovery(apars.ggsn_restart_ctr);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   BSSGP[0].send(ts_SM_ACT_PDP_REQ(apars.tid, apars.nsapi, apars.sapi, apars.qos, apars.addr,</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(ts_SM_ACT_PDP_REQ(apars.tid, apars.nsapi, apars.sapi, apars.qos, apars.addr,</span><br><span>                                   apars.apn, apars.pco));</span><br><span>         GTP.receive(tr_GTPC_MsgType(?, createPDPContextRequest, ?)) -> value g_ud {</span><br><span>               f_process_gtp_ctx_act_req(apars, g_ud.gtpc);</span><br><span>@@ -993,7 +1004,7 @@</span><br><span>  var boolean exp_rej := ispresent(apars.exp_rej_cause);</span><br><span>       var Gtp1cUnitdata g_ud;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     BSSGP[0].send(ts_SM_DEACT_PDP_REQ_MO(apars.tid, cause, false, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+ f_send_llc(ts_SM_DEACT_PDP_REQ_MO(apars.tid, cause, false, omit));</span><br><span>   GTP.receive(tr_GTPC_MsgType(?, deletePDPContextRequest, apars.ggsn_tei_c)) -> value g_ud {</span><br><span>                var integer seq_nr := oct2int(g_ud.gtpc.opt_part.sequenceNumber);</span><br><span>            BSSGP[0].clear;</span><br><span>@@ -1024,7 +1035,7 @@</span><br><span> </span><br><span>  alt {</span><br><span>        [] BSSGP[0].receive(tr_BD_L3_MT(tr_SM_DEACT_PDP_REQ_MT(apars.tid, ?, true))) {</span><br><span style="color: hsl(0, 100%, 40%);">-          BSSGP[0].send(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span style="color: hsl(120, 100%, 40%);">+          f_send_llc(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span>            }</span><br><span>    [not error_ind] GTP.receive(tr_GTPC_MsgType(?, deletePDPContextResponse, apars.ggsn_tei_c)) {</span><br><span>                repeat;</span><br><span>@@ -1207,7 +1218,7 @@</span><br><span> /* PDP Context activation for not-attached subscriber; expect fail */</span><br><span> private function f_TC_pdp_act_unattached(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>         var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));</span><br><span style="color: hsl(0, 100%, 40%);">-      BSSGP[0].send(ts_SM_ACT_PDP_REQ(apars.tid, apars.nsapi, apars.sapi, apars.qos, apars.addr,</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_llc(ts_SM_ACT_PDP_REQ(apars.tid, apars.nsapi, apars.sapi, apars.qos, apars.addr,</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>@@ -1355,7 +1366,7 @@</span><br><span>       var OCT1 cause_network_failure := int2oct(38, 1)</span><br><span>     alt {</span><br><span>        [] 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(0, 100%, 40%);">-              BSSGP[0].send(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span style="color: hsl(120, 100%, 40%);">+          f_send_llc(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span>            setverdict(pass);</span><br><span>            }</span><br><span>    [] as_xid(apars);</span><br><span>@@ -1436,7 +1447,7 @@</span><br><span> </span><br><span>        GTP.receive(tr_GTPC_MsgType(?, deletePDPContextResponse, apars.ggsn_tei_c)) {}</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      BSSGP[0].send(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span style="color: hsl(120, 100%, 40%);">+  f_send_llc(ts_SM_DEACT_PDP_ACCEPT_MO(apars.tid));</span><br><span>    setverdict(pass);</span><br><span> }</span><br><span> testcase TC_attach_pdp_act_deact_mt_t3395_expire() runs on test_CT {</span><br><span>@@ -1519,7 +1530,7 @@</span><br><span> </span><br><span>   /* MS: receive a Detach Request */</span><br><span>   BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_DET_REQ_MT(c_GMM_DTT_MT_IMSI_DETACH, ?, ?)));</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].send(ts_GMM_DET_ACCEPT_MO);</span><br><span style="color: hsl(120, 100%, 40%);">+  f_send_llc(ts_GMM_DET_ACCEPT_MO);</span><br><span> </span><br><span>        setverdict(pass);</span><br><span> }</span><br><span>@@ -1610,7 +1621,7 @@</span><br><span>       var integer count_req := 0;</span><br><span>  var MobileL3_CommonIE_Types.MobileIdentityLV mi;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+     f_send_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>                [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span>@@ -1618,7 +1629,7 @@</span><br><span>          }</span><br><span>            [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {</span><br><span>                    mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));</span><br><span style="color: hsl(0, 100%, 40%);">-                      BSSGP[0].send(ts_GMM_ID_RESP(mi));</span><br><span style="color: hsl(120, 100%, 40%);">+                    f_send_llc(ts_GMM_ID_RESP(mi));</span><br><span>                      repeat;</span><br><span>              }</span><br><span>            [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span>@@ -1658,7 +1669,7 @@</span><br><span>    /* set p_tmsi to use it in Attach Req via f_mi_get_lv() */</span><br><span>   g_pars.p_tmsi := 'c0000035'O;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+     f_send_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>                [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span>@@ -1671,7 +1682,7 @@</span><br><span>          }</span><br><span>            [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {</span><br><span>                    mi := valueof(ts_MI_IMEI_LV(g_pars.imei));</span><br><span style="color: hsl(0, 100%, 40%);">-                      BSSGP[0].send(ts_GMM_ID_RESP(mi));</span><br><span style="color: hsl(120, 100%, 40%);">+                    f_send_llc(ts_GMM_ID_RESP(mi));</span><br><span>                      repeat;</span><br><span>              }</span><br><span>    }</span><br><span>@@ -1732,7 +1743,7 @@</span><br><span>    /* there is no auth */</span><br><span>       g_pars.net.expect_auth := false;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), old_ra, false, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+    f_send_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>                [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {</span><br><span>@@ -1741,7 +1752,7 @@</span><br><span>          }</span><br><span>            [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) -> value bd {</span><br><span>                     f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);</span><br><span style="color: hsl(0, 100%, 40%);">-                    BSSGP[0].send(ts_GMM_ATTACH_COMPL);</span><br><span style="color: hsl(120, 100%, 40%);">+                   f_send_llc(ts_GMM_ATTACH_COMPL);</span><br><span>                     setverdict(pass);</span><br><span>            }</span><br><span>    }</span><br><span>@@ -1778,7 +1789,7 @@</span><br><span> private function f_TC_attach_check_complete_resend(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>      var integer count_req := 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- BSSGP[0].send(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+     f_send_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), f_random_RAI(), true, false, omit, omit));</span><br><span>       f_gmm_auth();</span><br><span> </span><br><span>    alt {</span><br><span>@@ -1815,11 +1826,11 @@</span><br><span>      var BssgpDecoded bd;</span><br><span> </span><br><span>     /* then send RAU */</span><br><span style="color: hsl(0, 100%, 40%);">-     BSSGP[bssgp].send(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, g_pars.ra, false, omit, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+        f_send_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>        [] BSSGP[bssgp].receive(tr_BD_L3_MT(tr_GMM_RAU_ACCEPT)) -> value bd {</span><br><span>             f_process_rau_accept(bd.l3_mt.msgs.gprs_mm.routingAreaUpdateAccept);</span><br><span style="color: hsl(0, 100%, 40%);">-            BSSGP[bssgp].send(ts_GMM_RAU_COMPL);</span><br><span style="color: hsl(120, 100%, 40%);">+          f_send_llc(ts_GMM_RAU_COMPL, bssgp);</span><br><span>                 setverdict(pass);</span><br><span>            }</span><br><span>    [] BSSGP[bssgp].receive(tr_BD_L3_MT(tr_GMM_RAU_REJECT)) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10383">change 10383</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/10383"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ie9e9d7da0a78a96f4f431c9085b9e273a39535f1 </div>
<div style="display:none"> Gerrit-Change-Number: 10383 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>