WIP: MSC_Tests: Add SGs testcases
This extens MSC_Tests.ttcn with an initial set of SGs interface test cases for RESET, LU, DETACH, PAGING, SMS and CSFB procedures In particular the following testcases are added: - TC_sgsap_reset: isolated reset procedure test - TC_sgsap_lu: isolated location update with TMSI realloc - TC_sgsap_lu_imsi_reject: location update, reject case - TC_sgsap_lu_and_nothing: location update with failed TMSI realloc - TC_sgsap_expl_imsi_det_eps: detach from EPS serveces - TC_sgsap_expl_imsi_det_noneps: detach from non-EPS services - TC_sgsap_paging_rej: isolated paging, reject case - TC_sgsap_paging_subscr_rej: isolated paging, subscr rejects call - TC_sgsap_paging_ue_unr: isolated paging, ue is unreachable - TC_sgsap_paging_and_nothing: page, but don't respond - TC_sgsap_paging_and_lu: check paging followed by an LU - TC_sgsap_mt_sms: mobile terminated SMS through SGs Interface - TC_sgsap_mo_sms: mobile originated SMS through SGs Interface - TC_sgsap_mt_sms_and_nothing: trigger SMS, but don't respond to paging - TC_sgsap_mt_sms_and_reject: trigger SMS, but reject paging - TC_sgsap_unexp_ud: Send unexpected unitdata (SGs Association: NULL) - TC_sgsap_unsol_ud: Send unsolicited unitdata (subscriber not in VLR) - TC_bssap_lu_sgsap_lu_and_mt_call: LU on 2G, LU on SGs and CSFB call - TC_sgsap_lu_and_mt_call: LU on SGs, and CSFB call Change-Id: I38543c35a9e74cea276e58d1d7ef01ef07ffe858 Depends: osmo-msc I73359925fc1ca72b33a1466e6ac41307f2f0b11d Related: OS#3645
This commit is contained in:
parent
9cc019a7ac
commit
4263c52bd4
|
@ -32,6 +32,7 @@ import from SGsAP_Templates all;
|
|||
import from Osmocom_Types all;
|
||||
import from IPL4asp_Types all;
|
||||
import from DNS_Helpers all;
|
||||
import from MobileL3_Types all;
|
||||
|
||||
type component SGsAP_ConnHdlr {
|
||||
port SGsAP_Conn_PT SGsAP;
|
||||
|
@ -41,7 +42,7 @@ type component SGsAP_ConnHdlr {
|
|||
|
||||
/* port between individual per-connection components and this dispatcher */
|
||||
type port SGsAP_Conn_PT message {
|
||||
inout PDU_SGsAP;
|
||||
inout PDU_SGsAP, PDU_ML3_MS_NW, PDU_ML3_NW_MS;
|
||||
} with { extension "internal" };
|
||||
|
||||
/* represents a single SGsAP Association */
|
||||
|
@ -292,6 +293,8 @@ function main(SGsAPOps ops, SGsAP_conn_parameters p, charstring id) runs on SGsA
|
|||
|
||||
while (true) {
|
||||
var SGsAP_ConnHdlr vc_conn;
|
||||
var PDU_ML3_MS_NW l3_mo;
|
||||
var PDU_ML3_NW_MS l3_mt;
|
||||
var template IMSI imsi_t;
|
||||
var hexstring imsi;
|
||||
var SGsAP_RecvFrom mrf;
|
||||
|
@ -305,6 +308,38 @@ function main(SGsAPOps ops, SGsAP_conn_parameters p, charstring id) runs on SGsA
|
|||
/* TODO: check which ConnectionID client has allocated + store in table? */
|
||||
SGsAP.send(t_SGsAP_Send(g_sgsap_conn_id, msg));
|
||||
}
|
||||
/* DTAP/MobileL3 from client (emulated MS): wrap in SGsAP-UL-UD and send */
|
||||
[] SGsAP_CLIENT.receive(PDU_ML3_MS_NW:?) -> value l3_mo sender vc_conn {
|
||||
var octetstring l3_enc := enc_PDU_ML3_MS_NW(l3_mo);
|
||||
imsi := f_imsi_by_comp(vc_conn);
|
||||
msg := valueof(ts_SGsAP_UL_UD(imsi, l3_enc));
|
||||
SGsAP.send(t_SGsAP_Send(g_sgsap_conn_id, msg));
|
||||
}
|
||||
[] SGsAP_CLIENT.receive(PDU_ML3_NW_MS:?) -> value l3_mt sender vc_conn {
|
||||
var octetstring l3_enc := enc_PDU_ML3_NW_MS(l3_mt);
|
||||
imsi := f_imsi_by_comp(vc_conn);
|
||||
msg := valueof(ts_SGsAP_DL_UD(imsi, l3_enc));
|
||||
SGsAP.send(t_SGsAP_Send(g_sgsap_conn_id, msg));
|
||||
}
|
||||
|
||||
/* DTAP/MobileL3 from MSC/VLR to MS wrapped in SGsAP-DL-UD: Extract, decode, forward */
|
||||
[] SGsAP.receive(tr_SGsAP_RecvFrom_R(tr_SGsAP_DL_UD(?,?))) -> value mrf {
|
||||
var octetstring l3_enc := mrf.msg.sGsAP_DOWNLINK_UNITDATA.nAS_MessageContainer.nAS_MessageContainer;
|
||||
imsi := mrf.msg.sGsAP_DOWNLINK_UNITDATA.iMSI.iMSI.digits;
|
||||
vc_conn := f_comp_by_imsi(imsi);
|
||||
l3_mt := dec_PDU_ML3_NW_MS(l3_enc);
|
||||
SGsAP_CLIENT.send(l3_mt) to vc_conn;
|
||||
}
|
||||
[] SGsAP.receive(tr_SGsAP_RecvFrom_R(tr_SGsAP_UL_UD(?,?))) -> value mrf {
|
||||
var octetstring l3_enc := mrf.msg.sGsAP_UPLINK_UNITDATA.nAS_MessageContainer.nAS_MessageContainer;
|
||||
imsi := mrf.msg.sGsAP_UPLINK_UNITDATA.iMSI.iMSI.digits;
|
||||
l3_mo := dec_PDU_ML3_MS_NW(l3_enc);
|
||||
vc_conn := f_comp_by_imsi(imsi);
|
||||
SGsAP_CLIENT.send(l3_mo) to vc_conn;
|
||||
}
|
||||
|
||||
|
||||
/* any other SGsAP from MSC/VLR */
|
||||
[] SGsAP.receive(tr_SGsAP_RecvFrom_R(?)) -> value mrf {
|
||||
imsi_t := f_SGsAP_get_imsi(mrf.msg);
|
||||
if (isvalue(imsi_t)) {
|
||||
|
|
|
@ -69,7 +69,10 @@ private function tr_SGsAP_IMSI(template hexstring digits) return template IMSI {
|
|||
return omit;
|
||||
} else if (istemplatekind(digits, "*")) {
|
||||
return *;
|
||||
} else if (istemplatekind(digits, "?")) {
|
||||
return ?;
|
||||
}
|
||||
log("tr_SGsAP_IMSI: ", digits);
|
||||
var template IMSI imsi := {
|
||||
iEI := '00000001'B,
|
||||
lengthIndicator := lengthof(digits)/2 + 1,
|
||||
|
|
|
@ -39,8 +39,10 @@ import from Osmocom_CTRL_Adapter all;
|
|||
import from TELNETasp_PortType all;
|
||||
import from Osmocom_VTY_Functions all;
|
||||
|
||||
import from SGsAP_Emulation all;
|
||||
|
||||
/* this component represents a single subscriber connection */
|
||||
type component BSC_ConnHdlr extends BSSAP_ConnHdlr, MNCC_ConnHdlr, GSUP_ConnHdlr, MGCP_ConnHdlr, SMPP_ConnHdlr, CTRL_Adapter_CT {
|
||||
type component BSC_ConnHdlr extends BSSAP_ConnHdlr, MNCC_ConnHdlr, GSUP_ConnHdlr, MGCP_ConnHdlr, SMPP_ConnHdlr, CTRL_Adapter_CT, SGsAP_ConnHdlr {
|
||||
var BSC_ConnHdlrPars g_pars;
|
||||
timer g_Tguard := 60.0;
|
||||
port TELNETasp_PT MSCVTY;
|
||||
|
@ -135,6 +137,8 @@ function f_init_handler(BSC_ConnHdlrPars pars, float t_guard := 60.0) runs on BS
|
|||
activate(as_Tguard());
|
||||
/* Route all SMPP messages for our MSISDN to us */
|
||||
f_create_smpp_expect(hex2str(pars.msisdn));
|
||||
/* Route all SGs message for our IMSI to us */
|
||||
f_create_sgsap_expect(pars.imsi);
|
||||
|
||||
if (g_pars.ipa_ctrl_enable == true) {
|
||||
f_ipa_ctrl_start(g_pars.ipa_ctrl_ip, g_pars.ipa_ctrl_port);
|
||||
|
@ -452,21 +456,22 @@ template (value) CallParameters t_CallParams(hexstring called, integer tid) := {
|
|||
mgcp_connection_id_mss := '0'H //
|
||||
};
|
||||
|
||||
function f_mt_call_establish(inout CallParameters cpars)
|
||||
/* Allocate a call reference and send SETUP via MNCC to MSC */
|
||||
function f_mt_call_initate(inout CallParameters cpars)
|
||||
runs on BSC_ConnHdlr {
|
||||
cpars.mncc_callref := f_rnd_int(2147483648);
|
||||
MNCC.send(ts_MNCC_SETUP_req(cpars.mncc_callref, hex2str(g_pars.msisdn),
|
||||
hex2str(cpars.called_party), hex2str(g_pars.imsi)));
|
||||
}
|
||||
|
||||
/* Complete call, begin with a paging response message via BSSAP */
|
||||
function f_mt_call_complete(inout CallParameters cpars)
|
||||
runs on BSC_ConnHdlr {
|
||||
var MNCC_PDU mncc;
|
||||
var MgcpCommand mgcp_cmd;
|
||||
|
||||
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
|
||||
|
||||
/* Allocate a call reference and send SETUP via MNCC to MSC */
|
||||
cpars.mncc_callref := f_rnd_int(2147483648);
|
||||
MNCC.send(ts_MNCC_SETUP_req(cpars.mncc_callref, hex2str(g_pars.msisdn),
|
||||
hex2str(cpars.called_party), hex2str(g_pars.imsi)));
|
||||
/* BSC <- MSC: Expect paging. FIXME: By TMSI or not? */
|
||||
BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi));
|
||||
|
||||
f_establish_fully(EST_TYPE_PAG_RESP);
|
||||
|
||||
/* MS <- MSC: Expect CC SETUP */
|
||||
|
@ -476,7 +481,6 @@ runs on BSC_ConnHdlr {
|
|||
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_ALERTING(cpars.transaction_id)));
|
||||
MNCC.receive(tr_MNCC_ALERT_ind(cpars.mncc_callref));
|
||||
|
||||
|
||||
/* Create MGCP expect */
|
||||
f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
|
||||
/* Ask MSC via MNCC to create the RTP socket on the MSC/MGW side */
|
||||
|
@ -531,6 +535,20 @@ runs on BSC_ConnHdlr {
|
|||
/* MS -> MSC: ALERTING */
|
||||
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_CONNECT(cpars.transaction_id)));
|
||||
MNCC.receive(tr_MNCC_SETUP_cnf(cpars.mncc_callref));
|
||||
}
|
||||
|
||||
function f_mt_call_establish(inout CallParameters cpars)
|
||||
runs on BSC_ConnHdlr {
|
||||
|
||||
/* Initiate the call via MNCC */
|
||||
f_mt_call_initate(cpars);
|
||||
|
||||
/* BSC <- MSC: Expect paging. FIXME: By TMSI or not? */
|
||||
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
|
||||
BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi));
|
||||
|
||||
/* Complete the call via BSSAP */
|
||||
f_mt_call_complete(cpars);
|
||||
|
||||
setverdict(pass);
|
||||
}
|
||||
|
@ -1008,7 +1026,6 @@ runs on BSC_ConnHdlr {
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
1028
msc/MSC_Tests.ttcn
1028
msc/MSC_Tests.ttcn
File diff suppressed because it is too large
Load Diff
|
@ -74,4 +74,23 @@
|
|||
<testcase classname='MSC_Tests' name='TC_cipher_complete_with_invalid_cipher' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_lu_imsi_auth_tmsi_encr_3_1_log_msc_debug' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_mo_cc_bssmap_clear' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_reset' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_lu' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_lu_imsi_reject' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_lu_and_nothing' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_expl_imsi_det_eps' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_expl_imsi_det_noneps' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_paging_rej' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_paging_subscr_rej' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_paging_ue_unr' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_paging_and_nothing' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_paging_and_lu' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_unexp_ud' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_unsol_ud' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_mt_sms' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_mo_sms' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_mt_sms_and_nothing' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_mt_sms_and_reject' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_bssap_lu_sgsap_lu_and_mt_call' time='MASKED'/>
|
||||
<testcase classname='MSC_Tests' name='TC_sgsap_lu_and_mt_call' time='MASKED'/>
|
||||
</testsuite>
|
||||
|
|
|
@ -94,7 +94,7 @@ FILES+="RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunctDef.cc "
|
|||
FILES+="MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunctDef.cc "
|
||||
FILES+="SMPP_CodecPort.ttcn SMPP_CodecPort_CtrlFunct.ttcn SMPP_CodecPort_CtrlFunctDef.cc SMPP_Emulation.ttcn SMPP_Templates.ttcn "
|
||||
FILES+="SS_Templates.ttcn SCCP_Templates.ttcn USSD_Helpers.ttcn "
|
||||
FILES+="SGsAP_Templates.ttcn "
|
||||
FILES+="SGsAP_Templates.ttcn SGsAP_CodecPort.ttcn SGsAP_CodecPort_CtrlFunct.ttcn SGsAP_CodecPort_CtrlFunctDef.cc SGsAP_Emulation.ttcn DNS_Helpers.ttcn "
|
||||
gen_links $DIR $FILES
|
||||
|
||||
ignore_pp_results
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
FILES="*.ttcn *.ttcnpp SCCP_EncDec.cc SCTPasp_PT.cc TCCConversion.cc TCCInterface.cc UD_PT.cc MNCC_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc SDP_EncDec.cc RTP_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc RTP_CodecPort_CtrlFunctDef.cc MGCP_CodecPort_CtrlFunctDef.cc TELNETasp_PT.cc Native_FunctionDefs.cc SMPP_EncDec.cc SMPP_CodecPort_CtrlFunctDef.cc MAP_EncDec.cc SS_EncDec.cc TCCEncoding.cc *.c *.asn"
|
||||
FILES="*.ttcn *.ttcnpp SCCP_EncDec.cc SCTPasp_PT.cc TCCConversion.cc TCCInterface.cc UD_PT.cc MNCC_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc SDP_EncDec.cc RTP_EncDec.cc IPA_CodecPort_CtrlFunctDef.cc RTP_CodecPort_CtrlFunctDef.cc MGCP_CodecPort_CtrlFunctDef.cc TELNETasp_PT.cc Native_FunctionDefs.cc SMPP_EncDec.cc SMPP_CodecPort_CtrlFunctDef.cc MAP_EncDec.cc SS_EncDec.cc TCCEncoding.cc SGsAP_CodecPort_CtrlFunctDef.cc *.c *.asn"
|
||||
|
||||
export CPPFLAGS_TTCN3="-DIPA_EMULATION_MGCP -DIPA_EMULATION_GSUP -DIPA_EMULATION_SCCP -DUSE_MTP3_DISTRIBUTOR"
|
||||
|
||||
|
|
Loading…
Reference in New Issue