msc: add inter-MSC HO tests with A5 encryption
Related: SYS#5324 Change-Id: Ia1df783be33bf752d291acb857d3c48882c65975
This commit is contained in:
parent
0d841d98b6
commit
666d39abb9
|
@ -5992,10 +5992,24 @@ private function f_tc_ho_inter_msc_out(charstring id, BSC_ConnHdlrPars pars) run
|
||||||
/* The target cell 017-017 LAC 1 is configured to be a remote MSC of name "msc-017-017-1".
|
/* The target cell 017-017 LAC 1 is configured to be a remote MSC of name "msc-017-017-1".
|
||||||
* This MSC tries to reach the other MSC via GSUP. */
|
* This MSC tries to reach the other MSC via GSUP. */
|
||||||
|
|
||||||
|
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 octetstring remote_msc_name := '6D73632D3031372D3031372D3100'O; /* "msc-017-017-1\0" as octetstring */
|
var octetstring remote_msc_name := '6D73632D3031372D3031372D3100'O; /* "msc-017-017-1\0" as octetstring */
|
||||||
var GSUP_PDU prep_ho_req;
|
var GSUP_PDU prep_ho_req;
|
||||||
GSUP.receive(tr_GSUP_E_AN_APDU(OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_REQUEST,
|
alt {
|
||||||
pars.imsi, destination_name := remote_msc_name)) -> value prep_ho_req;
|
[] GSUP.receive(tr_GSUP_E_AN_APDU(OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_REQUEST,
|
||||||
|
pars.imsi, destination_name := remote_msc_name,
|
||||||
|
an_apdu := t_GSUP_AN_APDU(OSMO_GSUP_AN_PROTO_48006, decmatch expect_ho_request))) -> value prep_ho_req;
|
||||||
|
[] GSUP.receive(tr_GSUP_E_AN_APDU(OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_REQUEST)) {
|
||||||
|
setverdict(fail, "Wrong OSMO_GSUP_MSGT_E_PREPARE_HANDOVER_REQUEST message received");
|
||||||
|
mtc.stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var GSUP_IeValue source_name_ie;
|
var GSUP_IeValue source_name_ie;
|
||||||
f_gsup_find_ie(prep_ho_req, OSMO_GSUP_SOURCE_NAME_IE, source_name_ie);
|
f_gsup_find_ie(prep_ho_req, OSMO_GSUP_SOURCE_NAME_IE, source_name_ie);
|
||||||
|
@ -6006,7 +6020,8 @@ private function f_tc_ho_inter_msc_out(charstring id, BSC_ConnHdlrPars pars) run
|
||||||
var octetstring rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);
|
var octetstring rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);
|
||||||
var PDU_BSSAP ho_req_ack := valueof(ts_BSSMAP_HandoverRequestAcknowledge(rr_ho_cmd_enc, lengthof(rr_ho_cmd_enc),
|
var PDU_BSSAP ho_req_ack := valueof(ts_BSSMAP_HandoverRequestAcknowledge(rr_ho_cmd_enc, lengthof(rr_ho_cmd_enc),
|
||||||
aoIPTransportLayer := omit,
|
aoIPTransportLayer := omit,
|
||||||
speechCodec := ts_BSSMAP_IE_SpeechCodec({ts_CodecFR})));
|
speechCodec := ts_BSSMAP_IE_SpeechCodec({ts_CodecFR}),
|
||||||
|
chosenEncryptionAlgorithm := chosenEncryptionAlgorithm));
|
||||||
GSUP.send(ts_GSUP_E_PrepareHandoverResult(
|
GSUP.send(ts_GSUP_E_PrepareHandoverResult(
|
||||||
pars.imsi,
|
pars.imsi,
|
||||||
ho_number,
|
ho_number,
|
||||||
|
@ -6142,7 +6157,18 @@ private function f_tc_ho_inter_msc_out(charstring id, BSC_ConnHdlrPars pars) run
|
||||||
));
|
));
|
||||||
|
|
||||||
/* MSC asks local BSS to prepare Handover to it */
|
/* MSC asks local BSS to prepare Handover to it */
|
||||||
BSSAP.receive(tr_BSSMAP_HandoverRequest);
|
f_get_expected_encryption(encryptionInformation, chosenEncryptionAlgorithm, kC128, a5_perm_alg);
|
||||||
|
expect_ho_request := tr_BSSMAP_HandoverRequest(encryptionInformation, chosenEncryptionAlgorithm, kC128);
|
||||||
|
var PDU_BSSAP 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure the new BSSAP conn continues with the correct N_SD sequence numbers */
|
/* Make sure the new BSSAP conn continues with the correct N_SD sequence numbers */
|
||||||
f_bssmap_continue_after_n_sd(last_n_sd);
|
f_bssmap_continue_after_n_sd(last_n_sd);
|
||||||
|
@ -6153,7 +6179,8 @@ private function f_tc_ho_inter_msc_out(charstring id, BSC_ConnHdlrPars pars) run
|
||||||
var BSSMAP_IE_AoIP_TransportLayerAddress tla :=
|
var BSSMAP_IE_AoIP_TransportLayerAddress tla :=
|
||||||
valueof(f_ts_BSSMAP_IE_AoIP_TLA(cpars.bss_rtp_ip, cpars.bss_rtp_port));
|
valueof(f_ts_BSSMAP_IE_AoIP_TLA(cpars.bss_rtp_ip, cpars.bss_rtp_port));
|
||||||
BSSAP.send(ts_BSSMAP_HandoverRequestAcknowledge(rr_ho_cmd_enc, lengthof(rr_ho_cmd_enc),
|
BSSAP.send(ts_BSSMAP_HandoverRequestAcknowledge(rr_ho_cmd_enc, lengthof(rr_ho_cmd_enc),
|
||||||
tla, ts_BSSMAP_IE_SpeechCodec({ts_CodecFR})));
|
tla, ts_BSSMAP_IE_SpeechCodec({ts_CodecFR}),
|
||||||
|
chosenEncryptionAlgorithm := chosenEncryptionAlgorithm));
|
||||||
|
|
||||||
/* HandoverCommand goes out via remote MSC-I */
|
/* HandoverCommand goes out via remote MSC-I */
|
||||||
var GSUP_PDU prep_subsq_ho_res;
|
var GSUP_PDU prep_subsq_ho_res;
|
||||||
|
@ -6190,15 +6217,40 @@ private function f_tc_ho_inter_msc_out(charstring id, BSC_ConnHdlrPars pars) run
|
||||||
|
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
}
|
}
|
||||||
testcase TC_ho_inter_msc_out() runs on MTC_CT {
|
function f_tc_ho_inter_msc_out_a5(integer a5_n) runs on MTC_CT {
|
||||||
var BSC_ConnHdlr vc_conn;
|
var BSC_ConnHdlr vc_conn;
|
||||||
f_init(1);
|
f_init(1);
|
||||||
|
|
||||||
var BSC_ConnHdlrPars pars := f_init_pars(54);
|
var BSC_ConnHdlrPars pars := f_init_pars(54);
|
||||||
|
pars.net.expect_ciph := a5_n > 0;
|
||||||
|
pars.net.expect_auth := pars.net.expect_ciph;
|
||||||
|
pars.net.kc_support := bit2oct('00000001'B << a5_n);
|
||||||
|
pars.cm2.classmarkInformationType2_oct5.a5_3 := '1'B;
|
||||||
|
pars.cm2.classmarkInformationType2_oct5.a5_2 := '0'B;
|
||||||
|
pars.cm2.classmarkInformationType2_oct5.cm3 := '1'B;
|
||||||
|
pars.cm3 := valueof(ts_CM3_default);
|
||||||
|
pars.use_umts_aka := true;
|
||||||
|
|
||||||
|
if (a5_n > 0) {
|
||||||
|
f_vty_config(MSCVTY, "network", "authentication required");
|
||||||
|
}
|
||||||
|
f_vty_config(MSCVTY, "network", "encryption a5 " & int2str(a5_n));
|
||||||
|
|
||||||
vc_conn := f_start_handler_with_pars(refers(f_tc_ho_inter_msc_out), pars, 0);
|
vc_conn := f_start_handler_with_pars(refers(f_tc_ho_inter_msc_out), pars, 0);
|
||||||
vc_conn.done;
|
vc_conn.done;
|
||||||
}
|
}
|
||||||
|
testcase TC_ho_inter_msc_out() runs on MTC_CT {
|
||||||
|
f_tc_ho_inter_msc_out_a5(0);
|
||||||
|
}
|
||||||
|
testcase TC_ho_inter_msc_out_a5_1() runs on MTC_CT {
|
||||||
|
f_tc_ho_inter_msc_out_a5(1);
|
||||||
|
}
|
||||||
|
testcase TC_ho_inter_msc_out_a5_3() runs on MTC_CT {
|
||||||
|
f_tc_ho_inter_msc_out_a5(3);
|
||||||
|
}
|
||||||
|
testcase TC_ho_inter_msc_out_a5_4() runs on MTC_CT {
|
||||||
|
f_tc_ho_inter_msc_out_a5(4);
|
||||||
|
}
|
||||||
testcase TC_ho_inter_msc_out_ipv6() runs on MTC_CT {
|
testcase TC_ho_inter_msc_out_ipv6() runs on MTC_CT {
|
||||||
var BSC_ConnHdlr vc_conn;
|
var BSC_ConnHdlr vc_conn;
|
||||||
f_init(1);
|
f_init(1);
|
||||||
|
@ -6683,6 +6735,9 @@ control {
|
||||||
execute( TC_ho_inter_bsc_ipv6() );
|
execute( TC_ho_inter_bsc_ipv6() );
|
||||||
|
|
||||||
execute( TC_ho_inter_msc_out() );
|
execute( TC_ho_inter_msc_out() );
|
||||||
|
execute( TC_ho_inter_msc_out_a5_1() );
|
||||||
|
execute( TC_ho_inter_msc_out_a5_3() );
|
||||||
|
execute( TC_ho_inter_msc_out_a5_4() );
|
||||||
execute( TC_ho_inter_msc_out_ipv6() );
|
execute( TC_ho_inter_msc_out_ipv6() );
|
||||||
|
|
||||||
execute( TC_lu_imsi_auth_tmsi_check_imei() );
|
execute( TC_lu_imsi_auth_tmsi_check_imei() );
|
||||||
|
|
Loading…
Reference in New Issue