From 4c422b76ff414707b42d7134de9eeb952154723c Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 17 Feb 2019 16:27:10 +0100 Subject: MSC: Verify CSFB INDICATOR is present in CLEAR COMMAND When a CSFB voice call is cleared by the MSC, it must include the CSFB INDICATOR in order to trigger the BSC to perform actions required for Fast Return to LTE. This patch changes TC_sgsap_lu_and_mt_call() and TC_bssap_lu_sgsap_lu_and_mt_call() to ensure the CSFB INDICATOR IE is present as expected. Change-Id: I6ce3a34f85aca7143cf7925cb9319bc679e8d395 --- msc/BSC_ConnectionHandler.ttcn | 9 +++++++-- msc/MSC_Tests.ttcn | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'msc') diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn index 7b881923..b0410075 100644 --- a/msc/BSC_ConnectionHandler.ttcn +++ b/msc/BSC_ConnectionHandler.ttcn @@ -646,13 +646,18 @@ runs on BSC_ConnHdlr { setverdict(pass); } -function f_call_hangup(inout CallParameters cpars, boolean release_by_ms) +function f_call_hangup(inout CallParameters cpars, boolean release_by_ms, boolean is_csfb := false) runs on BSC_ConnHdlr { var MobileIdentityLV mi; var MNCC_PDU mncc; var MgcpCommand mgcp_cmd; var boolean respond_to_dlcx; + var template PDU_BSSAP t_clear := tr_BSSMAP_ClearCommand; + + if (is_csfb) { + t_clear := tr_BSSMAP_ClearCommandCSFB; + } MNCC.send(ts_MNCC_DISC_req(cpars.mncc_callref, valueof(ts_MNCC_cause(23)))); BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_DISC(cpars.transaction_id))); @@ -673,7 +678,7 @@ runs on BSC_ConnHdlr { /* clearing of radio channel */ interleave { - [] BSSAP.receive(tr_BSSMAP_ClearCommand) { + [] BSSAP.receive(t_clear) { BSSAP.send(ts_BSSMAP_ClearComplete); BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND); } diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn index 00f9bec1..7129f81e 100644 --- a/msc/MSC_Tests.ttcn +++ b/msc/MSC_Tests.ttcn @@ -4471,7 +4471,7 @@ private function f_mt_lu_and_csfb_call(charstring id, BSC_ConnHdlrPars pars, boo /* Complete the call, hold it for some time and then tear it down */ f_mt_call_complete(cpars); f_sleep(3.0); - f_call_hangup(cpars, true); + f_call_hangup(cpars, true, is_csfb := true); /* Make sure that subscriber is still present and the SGs association is in tact (ref-counting) */ f_ctrl_get_exp(IPA_CTRL, "fsm.SGs-UE.id.imsi:" & hex2str(g_pars.imsi) & ".state", "SGs-ASSOCIATED"); -- cgit v1.2.3