bsc: TC_assignment_emerg_setup_allow(_imei): Test full voice establishment
Extend tests to also test the data plane setup. Related: OS#5849 Change-Id: I9f39f861398669a8eb1da242595de584725e5b83
This commit is contained in:
parent
39bd33c72c
commit
14076d3b72
|
@ -9180,12 +9180,63 @@ runs on MSC_ConnHdlr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function f_assignment_emerg_setup_voice()
|
||||||
|
runs on MSC_ConnHdlr {
|
||||||
|
/* Go on with voice call assignment */
|
||||||
|
var template PDU_BSSAP exp_compl := f_gen_exp_compl();
|
||||||
|
var PDU_BSSAP ass_cmd := f_gen_ass_req();
|
||||||
|
|
||||||
|
/* Below speechOrDataIndicator and codecList are copied from an emergency call captured during tests.
|
||||||
|
* They seem a bit weird (AMR-WB, and the order differ between speechId_DataIndicator and the codecList), but
|
||||||
|
* seems a good idea to see how osmo-bsc reacts to this. */
|
||||||
|
ass_cmd.pdu.bssmap.assignmentRequest.channelType := {
|
||||||
|
elementIdentifier := '0B'O, /* overwritten */
|
||||||
|
lengthIndicator := 0, /* overwritten */
|
||||||
|
speechOrDataIndicator := '0001'B, /* speech */
|
||||||
|
spare1_4 := '0000'B,
|
||||||
|
channelRateAndType := ChRate_TCHForH_Fpref,
|
||||||
|
speechId_DataIndicator := 'c2918105'O
|
||||||
|
};
|
||||||
|
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({
|
||||||
|
ts_CodecHR, ts_CodecAMR_WB, ts_CodecEFR, ts_CodecFR}));
|
||||||
|
|
||||||
|
f_rslem_dchan_queue_enable();
|
||||||
|
|
||||||
|
var ExpectCriteria mgcpcrit := {
|
||||||
|
connid := omit,
|
||||||
|
endpoint := omit,
|
||||||
|
transid := omit
|
||||||
|
};
|
||||||
|
f_create_mgcp_expect(mgcpcrit);
|
||||||
|
|
||||||
|
BSSAP.send(ass_cmd);
|
||||||
|
|
||||||
|
var AssignmentState st := valueof(ts_AssignmentStateInit);
|
||||||
|
st.voice_call := true;
|
||||||
|
st.is_assignment := false;
|
||||||
|
alt {
|
||||||
|
[] as_modify(st);
|
||||||
|
[] as_Media();
|
||||||
|
[st.modify_done] BSSAP.receive(exp_compl) {
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Voice call carries on ... */
|
||||||
|
f_sleep(2.0);
|
||||||
|
}
|
||||||
|
|
||||||
/* Test if the EMERGENCY SETUP gets passed on to the MSC via A when EMERGENCY
|
/* Test if the EMERGENCY SETUP gets passed on to the MSC via A when EMERGENCY
|
||||||
* CALLS are permitted by the BSC config. */
|
* CALLS are permitted by the BSC config. */
|
||||||
private function f_TC_assignment_emerg_setup_allow(charstring id) runs on MSC_ConnHdlr {
|
private function f_TC_assignment_emerg_setup_allow(charstring id) runs on MSC_ConnHdlr {
|
||||||
|
|
||||||
|
/* Make sure the CHAN RQD indicates an emergency call (0b101xxxxx). The difference is that osmo-bsc directly
|
||||||
|
* assigns a TCH lchan and establishing voice for the emergency call will use Mode Modify, not reassignment to
|
||||||
|
* another lchan. */
|
||||||
|
g_pars.ra := f_rnd_ra_emerg();
|
||||||
f_assignment_emerg_setup();
|
f_assignment_emerg_setup();
|
||||||
f_assignment_emerg_setup_exp_bssap();
|
f_assignment_emerg_setup_exp_bssap();
|
||||||
|
f_assignment_emerg_setup_voice();
|
||||||
|
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
f_perform_clear();
|
f_perform_clear();
|
||||||
|
@ -9197,6 +9248,10 @@ private function f_TC_assignment_emerg_setup_deny(charstring id) runs on MSC_Con
|
||||||
var PDU_BSSAP emerg_setup_data_ind_bssap;
|
var PDU_BSSAP emerg_setup_data_ind_bssap;
|
||||||
timer T := 3.0;
|
timer T := 3.0;
|
||||||
|
|
||||||
|
/* Make sure the CHAN RQD indicates an emergency call (0b101xxxxx). The difference is that osmo-bsc directly
|
||||||
|
* assigns a TCH lchan and establishing voice for the emergency call will use Mode Modify, not reassignment to
|
||||||
|
* another lchan. */
|
||||||
|
g_pars.ra := f_rnd_ra_emerg();
|
||||||
f_assignment_emerg_setup();
|
f_assignment_emerg_setup();
|
||||||
|
|
||||||
T.start;
|
T.start;
|
||||||
|
@ -10488,48 +10543,7 @@ private function f_tc_emerg_call_and_lcs_loc_req(charstring id) runs on MSC_Conn
|
||||||
BSSAP_LE.receive(BSSAP_LE_Conn_Prim:CONN_PRIM_DISC_IND);
|
BSSAP_LE.receive(BSSAP_LE_Conn_Prim:CONN_PRIM_DISC_IND);
|
||||||
BSSAP.receive(tr_BSSMAP_Perform_Location_Response(tr_BSSMAP_IE_LocationEstimate(gad_ell_point_unc_circle)));
|
BSSAP.receive(tr_BSSMAP_Perform_Location_Response(tr_BSSMAP_IE_LocationEstimate(gad_ell_point_unc_circle)));
|
||||||
|
|
||||||
/* Go on with voice call assignment */
|
f_assignment_emerg_setup_voice();
|
||||||
var template PDU_BSSAP exp_compl := f_gen_exp_compl();
|
|
||||||
var PDU_BSSAP ass_cmd := f_gen_ass_req();
|
|
||||||
|
|
||||||
/* Below speechOrDataIndicator and codecList are copied from an emergency call captured during tests.
|
|
||||||
* They seem a bit weird (AMR-WB, and the order differ between speechId_DataIndicator and the codecList), but
|
|
||||||
* seems a good idea to see how osmo-bsc reacts to this. */
|
|
||||||
ass_cmd.pdu.bssmap.assignmentRequest.channelType := {
|
|
||||||
elementIdentifier := '0B'O, /* overwritten */
|
|
||||||
lengthIndicator := 0, /* overwritten */
|
|
||||||
speechOrDataIndicator := '0001'B, /* speech */
|
|
||||||
spare1_4 := '0000'B,
|
|
||||||
channelRateAndType := ChRate_TCHForH_Fpref,
|
|
||||||
speechId_DataIndicator := 'c2918105'O
|
|
||||||
};
|
|
||||||
ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({
|
|
||||||
ts_CodecHR, ts_CodecAMR_WB, ts_CodecEFR, ts_CodecFR}));
|
|
||||||
|
|
||||||
f_rslem_dchan_queue_enable();
|
|
||||||
|
|
||||||
var ExpectCriteria mgcpcrit := {
|
|
||||||
connid := omit,
|
|
||||||
endpoint := omit,
|
|
||||||
transid := omit
|
|
||||||
};
|
|
||||||
f_create_mgcp_expect(mgcpcrit);
|
|
||||||
|
|
||||||
BSSAP.send(ass_cmd);
|
|
||||||
|
|
||||||
var AssignmentState st := valueof(ts_AssignmentStateInit);
|
|
||||||
st.voice_call := true;
|
|
||||||
st.is_assignment := false;
|
|
||||||
alt {
|
|
||||||
[] as_modify(st);
|
|
||||||
[] as_Media();
|
|
||||||
[st.modify_done] BSSAP.receive(exp_compl) {
|
|
||||||
setverdict(pass);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Voice call carries on ... */
|
|
||||||
f_sleep(2.0);
|
|
||||||
|
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
f_perform_clear();
|
f_perform_clear();
|
||||||
|
|
Loading…
Reference in New Issue