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

Change subject: msc: add inter-BSC HO tests with A5 encryption
......................................................................

msc: add inter-BSC HO tests with A5 encryption

Related: SYS#5324
Change-Id: I57e43c60d4389bd301d0195179321a34401bd1dc
---
M library/BSSMAP_Templates.ttcn
M msc/MSC_Tests.ttcn
2 files changed, 80 insertions(+), 7 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved



diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index 21cf742..67537fb 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -954,11 +954,18 @@
        }
 }

-template PDU_BSSAP tr_BSSMAP_HandoverRequest modifies tr_BSSAP_BSSMAP := {
+template PDU_BSSAP tr_BSSMAP_HandoverRequest(template 
BSSMAP_IE_EncryptionInformation encryptionInformation := *,
+                                            template 
BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm := *,
+                                            template BSSMAP_IE_KC128 kC128 := *
+                                           )
+  modifies tr_BSSAP_BSSMAP := {
        pdu := {
                bssmap := {
                        handoverRequest := {
-                               messageType := '10'O
+                               messageType := '10'O,
+                               encryptionInformation := encryptionInformation,
+                               chosenEncryptionAlgorithm := 
chosenEncryptionAlgorithm,
+                               kC128 := kC128
                        }
                }
        }
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 46a368e..221123b 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -5764,8 +5764,22 @@
         * from now on this here is the new BSS. */
        f_create_bssmap_exp_handoverRequest(193);

+       var template BSSMAP_IE_EncryptionInformation encryptionInformation;
+       var template BSSMAP_IE_ChosenEncryptionAlgorithm 
chosenEncryptionAlgorithm;
+       var template BSSMAP_IE_KC128 kC128;
+       var OCT1 a5_perm_alg;
+       f_get_expected_encryption(encryptionInformation, 
chosenEncryptionAlgorithm, kC128, a5_perm_alg);
+       var template PDU_BSSAP expect_ho_request := 
tr_BSSMAP_HandoverRequest(encryptionInformation, chosenEncryptionAlgorithm, 
kC128);
        var PDU_BSSAP ho_request;
-       BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request;
+       alt {
+       [] BSSAP.receive(expect_ho_request);
+       [] BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request {
+               log("Error: Wrong handoverRequest received. Expected: ", 
expect_ho_request,
+                   " got ", ho_request);
+               setverdict(fail, "Wrong handoverRequest received");
+               mtc.stop;
+               }
+       }

        /* new BSS composes a RR Handover Command */
        var PDU_ML3_NW_MS rr_ho_cmd := valueof(ts_RR_HandoverCommand);
@@ -5812,9 +5826,22 @@
        f_init_handler(pars);
        f_create_bssmap_exp_handoverRequest(194);

+       var template BSSMAP_IE_EncryptionInformation encryptionInformation;
+       var template BSSMAP_IE_ChosenEncryptionAlgorithm 
chosenEncryptionAlgorithm;
+       var template BSSMAP_IE_KC128 kC128;
+       var OCT1 a5_perm_alg;
+       f_get_expected_encryption(encryptionInformation, 
chosenEncryptionAlgorithm, kC128, a5_perm_alg);
+       var template PDU_BSSAP expect_ho_request := 
tr_BSSMAP_HandoverRequest(encryptionInformation, chosenEncryptionAlgorithm, 
kC128);
        var PDU_BSSAP ho_request;
-       BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request;
-
+       alt {
+       [] BSSAP.receive(expect_ho_request);
+       [] BSSAP.receive(tr_BSSMAP_HandoverRequest) -> value ho_request {
+               log("Error: Wrong handoverRequest received. Expected: ", 
expect_ho_request,
+                   " got ", ho_request);
+               setverdict(fail, "Wrong handoverRequest received");
+               mtc.stop;
+               }
+       }
        /* new BSS composes a RR Handover Command */
        var PDU_ML3_NW_MS rr_ho_cmd := valueof(ts_RR_HandoverCommand);
        var octetstring rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);
@@ -5861,15 +5888,42 @@
        f_expect_clear();
        setverdict(pass);
 }
-function f_tc_ho_inter_bsc_main(boolean use_ipv6 := false) runs on MTC_CT {
+function f_tc_ho_inter_bsc_main(boolean use_ipv6 := false, integer a5_n := 0) 
runs on MTC_CT {
        var BSC_ConnHdlr vc_conn0;
        var BSC_ConnHdlr vc_conn1;
        f_init(2);

        var BSC_ConnHdlrPars pars0 := f_init_pars(53);
        pars0.use_ipv6 := use_ipv6;
+       pars0.net.expect_ciph := a5_n > 0;
+       pars0.net.expect_auth := pars0.net.expect_ciph;
+       pars0.net.kc_support := bit2oct('00000001'B << a5_n);
+       pars0.cm2.classmarkInformationType2_oct5.a5_3 := '1'B;
+       pars0.cm2.classmarkInformationType2_oct5.a5_2 := '0'B;
+       pars0.cm2.classmarkInformationType2_oct5.cm3 := '1'B;
+       pars0.cm3 := valueof(ts_CM3_default);
+       pars0.use_umts_aka := true;
+       pars0.vec := f_gen_auth_vec_3g();
+       pars0.vec_keep := true;
+
        var BSC_ConnHdlrPars pars1 := f_init_pars(53);
        pars1.use_ipv6 := use_ipv6;
+       pars1.net.expect_ciph := pars0.net.expect_ciph;
+       pars1.net.expect_auth := pars0.net.expect_ciph;
+       pars1.net.kc_support := bit2oct('00000001'B << a5_n);
+       pars1.cm2 := pars0.cm2;
+       pars1.cm3 := pars0.cm3;
+       pars1.use_umts_aka := true;
+       /* Both components need the same auth vector info because we expect 
f_tc_ho_inter_bsc0's ciphering key to be
+        * identical to the one that shows up in f_tc_ho_inter_bsc1. Can only 
do that by feeding in a vector to both
+        * components and then not overwriting it in BSC_ConnectionHandler. */
+       pars1.vec := pars0.vec;
+       pars1.vec_keep := true;
+
+       if (a5_n > 0) {
+               f_vty_config(MSCVTY, "network", "authentication required");
+       }
+       f_vty_config(MSCVTY, "network", "encryption a5 " & int2str(a5_n));

        vc_conn0 := f_start_handler_with_pars(refers(f_tc_ho_inter_bsc0), 
pars0, 0);
        vc_conn1 := f_start_handler_with_pars(refers(f_tc_ho_inter_bsc1), 
pars1, 1);
@@ -5877,7 +5931,16 @@
        vc_conn1.done;
 }
 testcase TC_ho_inter_bsc() runs on MTC_CT {
-       f_tc_ho_inter_bsc_main(false);
+       f_tc_ho_inter_bsc_main(false, a5_n := 0);
+}
+testcase TC_ho_inter_bsc_a5_1() runs on MTC_CT {
+       f_tc_ho_inter_bsc_main(false, a5_n := 1);
+}
+testcase TC_ho_inter_bsc_a5_3() runs on MTC_CT {
+       f_tc_ho_inter_bsc_main(false, a5_n := 3);
+}
+testcase TC_ho_inter_bsc_a5_4() runs on MTC_CT {
+       f_tc_ho_inter_bsc_main(false, a5_n := 4);
 }
 testcase TC_ho_inter_bsc_ipv6() runs on MTC_CT {
        f_tc_ho_inter_bsc_main(true);
@@ -6614,6 +6677,9 @@

        execute( TC_ho_inter_bsc_unknown_cell() );
        execute( TC_ho_inter_bsc() );
+       execute( TC_ho_inter_bsc_a5_1() );
+       execute( TC_ho_inter_bsc_a5_3() );
+       execute( TC_ho_inter_bsc_a5_4() );
        execute( TC_ho_inter_bsc_ipv6() );

        execute( TC_ho_inter_msc_out() );

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24761
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: I57e43c60d4389bd301d0195179321a34401bd1dc
Gerrit-Change-Number: 24761
Gerrit-PatchSet: 3
Gerrit-Owner: neels <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to