pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23969 )

Change subject: msc: Verify CommonID contains LastUsedEutranPLMNId when in CSFB
......................................................................

msc: Verify CommonID contains LastUsedEutranPLMNId when in CSFB

Validate in test that MSC sends Last Used E-UTRAN PLLMN Id IE when call
is started by SGs (CSFB).

Related: SYS#5337
Change-Id: I161529fd9c8cacb7d17ea18660998df06bb0b575
---
M library/BSSMAP_Templates.ttcn
M msc/BSC_ConnectionHandler.ttcn
M msc/MSC_Tests.ttcn
3 files changed, 61 insertions(+), 9 deletions(-)

Approvals:
  Jenkins Builder: Verified
  osmith: Looks good to me, approved



diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index 2b99a5b..1949fd6 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -1163,7 +1163,10 @@
        elementIdentifier := '95'O,
        mcc_mnc := mcc_mnc
 }
-
+template BSSAMAP_IE_LastUsedEUTRANPLMNId 
tr_BSSMAP_LastUsedEUTRANPLMNId(template OCT3 mcc_mnc) := {
+       elementIdentifier := '95'O,
+       mcc_mnc := mcc_mnc
+}
 function f_ts_BSSMAP_LastUsedEUTRANPLMNId(template (omit) OCT3 mcc_mnc)
                        return template (omit) BSSAMAP_IE_LastUsedEUTRANPLMNId {
        if (not istemplatekind(mcc_mnc, "omit")) {
@@ -1172,6 +1175,18 @@
                return omit;
        }
 }
+function f_tr_BSSMAP_LastUsedEUTRANPLMNId(template OCT3 mcc_mnc)
+return template BSSAMAP_IE_LastUsedEUTRANPLMNId {
+       if (istemplatekind(mcc_mnc, "*")) {
+               return *;
+       } else if (istemplatekind(mcc_mnc, "?")) {
+               return ?;
+       } else if (istemplatekind(mcc_mnc, "omit")) {
+               return omit;
+       } else {
+               return ts_BSSMAP_LastUsedEUTRANPLMNId(valueof(mcc_mnc));
+       }
+}

 template BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_noCell := {
        cIl_noCell := ''O
@@ -1227,7 +1242,7 @@
 }


-private function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 {
+function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 {
        if (lengthof(mnc) == 2) {
                return hex2oct(mcc[1] & mcc[0] & 'F'H & mcc[2] & mnc[1] & 
mnc[0]);
        } else {
@@ -1235,6 +1250,15 @@
        }
 }

+function f_dec_mcc_mnc(in OCT3 mcc_mnc, out GsmMcc mcc, out GsmMnc mnc) {
+       var hexstring hs := oct2hex(mcc_mnc);
+       mcc := hs[1] & hs[0] & hs[3];
+       mnc := hs[5] & hs[4];
+       if (hs[2] == 'F'H) {
+               mnc := mnc & hs[2];
+       }
+}
+
 template (value) BSSMAP_FIELD_CellIdentification_CGI ts_BSSMAP_CI_CGI(GsmMcc 
mcc, GsmMnc mnc, GsmLac lac, GsmCellId ci) := {
        mcc_mnc := f_enc_mcc_mnc(mcc, mnc),
        lac := int2oct(lac, 2),
@@ -1737,14 +1761,17 @@
        }
 }

-template PDU_BSSAP tr_BSSMAP_CommonId(template hexstring imsi_digits)
+template PDU_BSSAP tr_BSSMAP_CommonId(template hexstring imsi_digits,
+                                     template BSSAMAP_IE_LastUsedEUTRANPLMNId 
lastUsedEUTRANPLMNId := *)
 modifies tr_BSSAP_BSSMAP := {
        pdu := {
                bssmap := {
                        commonID := {
                                messageType := '2F'O,
                                iMSI := tr_BSSMAP_Imsi(imsi_digits),
-                               sNAAccessInformation := *
+                               sNAAccessInformation := *,
+                               selectedPLMNId := *,
+                               lastUsedEUTRANPLMNId := lastUsedEUTRANPLMNId
                        }
                }
        }
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 30adb03..8ca8264 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -106,7 +106,8 @@
        boolean ran_is_geran,
        boolean use_osmux,
        boolean use_ipv6,
-       boolean verify_cell_id
+       boolean verify_cell_id,
+       OCT3 common_id_last_eutran_plmn optional
 };

 /* get a one-octet bitmaks of supported algorithms based on Classmark 
information */
@@ -524,7 +525,8 @@
 function f_expect_common_id() runs on BSC_ConnHdlr
 {
        if (g_pars.ran_is_geran) {
-               BSSAP.receive(tr_BSSMAP_CommonId(g_pars.imsi));
+               BSSAP.receive(tr_BSSMAP_CommonId(g_pars.imsi,
+                                                
f_tr_BSSMAP_LastUsedEUTRANPLMNId(g_pars.common_id_last_eutran_plmn)));
        } else {
                BSSAP.receive(tr_RANAP_CommonId(imsi_hex2oct(g_pars.imsi)));
        }
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 8325625..0fdc376 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -16,6 +16,7 @@

 import from General_Types all;
 import from Osmocom_Types all;
+import from GSM_Types all;

 import from M3UA_Types all;
 import from M3UA_Emulation all;
@@ -400,7 +401,8 @@
                ran_is_geran := ran_is_geran,
                use_osmux := use_osmux,
                use_ipv6 := false,
-               verify_cell_id := verify_cell_id
+               verify_cell_id := verify_cell_id,
+               common_id_last_eutran_plmn := omit
        };
        if (not ran_is_geran) {
                pars.use_umts_aka := true;
@@ -4536,13 +4538,19 @@
        var PDU_SGsAP lua;
        var PDU_SGsAP mm_info;
        var octetstring mm_info_dtap;
+       var GsmMcc mcc;
+       var GsmMnc mnc;
+       var template (omit) TrackingAreaIdentityValue tai := omit;

        /* tell GSUP dispatcher to send this IMSI to us */
        f_create_gsup_expect(hex2str(g_pars.imsi));
-
+       if (g_pars.common_id_last_eutran_plmn != omit) {
+               f_dec_mcc_mnc(g_pars.common_id_last_eutran_plmn, mcc, mnc);
+               tai := ts_SGsAP_TAI(mcc, mnc, 555);
+       }
        lur := valueof(ts_SGsAP_LU_REQ(g_pars.imsi, mme_name, IMSI_attach,
                                        ts_SGsAP_LAI('901'H, '70'H, 2342),
-                                       ts_SGsAP_TAI('901'H, '70'H, 555)));
+                                       tai));
        /* Old LAI, if MS sends it */
        /* TMSI status, if MS has no valid TMSI */
        /* IMEISV, if it supports "automatic device detection" */
@@ -4602,6 +4610,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11811, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := f_start_handler_with_pars(refers(f_tc_sgsap_lu), pars);
        vc_conn.done;
 }
@@ -4729,6 +4738,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11814, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_expl_imsi_det_eps), pars);
        vc_conn.done;
 }
@@ -4753,6 +4763,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11814, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_impl_imsi_det_eps), pars);
        vc_conn.done;
 }
@@ -4780,6 +4791,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11815, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_expl_imsi_det_noneps), pars);
        vc_conn.done;
 }
@@ -4807,6 +4819,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11815, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_impl_imsi_det_noneps), pars);
        vc_conn.done;
 }
@@ -4858,6 +4871,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11816, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := f_start_handler_with_pars(refers(f_tc_sgsap_paging_rej), 
pars);
        vc_conn.done;
 }
@@ -4907,6 +4921,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11817, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_paging_subscr_rej), pars);
        vc_conn.done;
 }
@@ -4951,6 +4966,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11818, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := f_start_handler_with_pars(refers(f_tc_sgsap_paging_ue_unr), 
pars);
        vc_conn.done;
 }
@@ -5010,6 +5026,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11819, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_paging_and_nothing), pars);
        vc_conn.done;
 }
@@ -5068,6 +5085,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11820, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := f_start_handler_with_pars(refers(f_tc_sgsap_paging_and_lu), 
pars);
        vc_conn.done;
 }
@@ -5276,6 +5294,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11823, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := f_start_handler_with_pars(refers(f_tc_sgsap_mt_sms), pars);
        vc_conn.done;
 }
@@ -5306,6 +5325,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11824, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := f_start_handler_with_pars(refers(f_tc_sgsap_mo_sms), pars);
        vc_conn.done;
 }
@@ -5369,6 +5389,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11825, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_mt_sms_and_nothing), pars);
        vc_conn.done;
 }
@@ -5429,6 +5450,7 @@
        var BSC_ConnHdlr vc_conn;
        f_init(1, true);
        pars := f_init_pars(11826, true);
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);
        vc_conn := 
f_start_handler_with_pars(refers(f_tc_sgsap_mt_sms_and_reject), pars);
        vc_conn.done;
 }
@@ -5445,6 +5467,7 @@
        if (bssmap_lu) {
                f_perform_lu();
        }
+       pars.common_id_last_eutran_plmn := f_enc_mcc_mnc('901'H, '70'H);

        f_sgs_perform_lu();
        f_sleep(1.0);

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/23969
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I161529fd9c8cacb7d17ea18660998df06bb0b575
Gerrit-Change-Number: 23969
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Hoernchen <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <[email protected]>
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: lynxis lazus <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to