diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2024-03-14 14:45:19 +0100 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2024-03-14 16:53:59 +0100 |
commit | 660cfe5169fe778345947f26c19668fa6c2f69fa (patch) | |
tree | 1d417916a1a8cfda7749e7a797456a1664f45f03 | |
parent | a7823b96cb566dd9ce6a9f640803833c9f6c6a9f (diff) |
epdg: Several fixes to TC_hss_initiated_deregister_permanent_termination
I forgot to submit some fixes before merging.
Fixes: a7823b96cb566dd9ce6a9f640803833c9f6c6a9f
Change-Id: Ic4d0d649221d669dee32edeb94b89e95ec1b1c08
-rw-r--r-- | epdg/EPDG_Tests.ttcn | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index 71b65c0d..bc4219ba 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -473,7 +473,8 @@ private altstep as_DIA_SWx_SA_success(template (present) CxDx_3GPP_Server_Assign /* Send RTR as HSS to AAA server, expect back RTA */ private function f_DIA_SWx_RT(template (value) CxDx_3GPP_Reason_Code reason_code, - template (present) GenericAVP exp_result_tmpl := tr_AVP_ResultCode(DIAMETER_SUCCESS)) runs on EPDG_ConnHdlr { + template (present) GenericAVP exp_result_tmpl := tr_AVP_ResultCode(DIAMETER_SUCCESS), + boolean exp_aaa_proc := true) runs on EPDG_ConnHdlr { var PDU_DIAMETER rx_dia; var UINT32 hbh_id := f_rnd_octstring(4); var UINT32 ete_id := f_rnd_octstring(4); @@ -489,12 +490,14 @@ private function f_DIA_SWx_RT(template (value) CxDx_3GPP_Reason_Code reason_code hbh_id := hbh_id, ete_id := ete_id)); - if (match(reason_code_permanent_termination, reason_code)) { + if (match(reason_code_permanent_termination, reason_code) and exp_aaa_proc) { /* Expect Abort-Session procedure (ASR + ASA) in the S6b interface: */ as_DIA_S6b_AS_success(); /* Here AAA-Server starts an ASR + ASA procedure towards ePDG, which forwards it to strongswan: */ as_GSUP_rx_CL_REQ(OSMO_GSUP_CANCEL_TYPE_WITHDRAW); f_GSUP_tx_CL_RES(); + /* No need to so STR+STA, since the session was already aborted above during ASR+ASA: */ + as_GTP2C_DeleteSession_success(do_s6b_st_proc := false); } alt { @@ -566,7 +569,7 @@ private altstep as_DIA_S6b_AS_success() runs on EPDG_ConnHdlr { [] S6b.receive(tr_DIA_S6b_ASR(f_nai())) -> value rx_dia { avp := f_DIAMETER_get_avp(rx_dia, c_AVP_Code_BASE_NONE_Session_Id); sess_id := valueof(avp.avp_data.avp_BASE_NONE_Session_Id); - SWx.send(ts_DIA_S6b_ASA(DIAMETER_SUCCESS, + S6b.send(ts_DIA_S6b_ASA(DIAMETER_SUCCESS, sess_id := sess_id, hbh_id := rx_dia.hop_by_hop_id, ete_id := rx_dia.end_to_end_id)); @@ -702,7 +705,7 @@ private altstep as_GTP2C_CreateSession_error(GTP2C_Cause resp_cause, boolean do_ } /* ePDG Deletes session at the PGW. PGW sends Diameter s6b AAR + AAA. */ -private altstep as_GTP2C_DeleteSession_success() runs on EPDG_ConnHdlr { +private altstep as_GTP2C_DeleteSession_success(boolean do_s6b_st_proc := true) runs on EPDG_ConnHdlr { var PDU_GTPCv2 rx_msg; var BearerContextIEs rx_bctx_ies; var template (value) FullyQualifiedTEID fteid_c_ie, fteid_u_ie; @@ -710,8 +713,10 @@ private altstep as_GTP2C_DeleteSession_success() runs on EPDG_ConnHdlr { var template (value) BearerContextIEs bctx_ies; [] GTP2.receive(tr_GTP2C_DeleteSessionReq(g_pars.teic_local)) -> value rx_msg { - /* Upon rx of DeleteSession, emulate PGW requesting the AAA server for Sesssion Termination. */ - f_S6b_ST_success(); + if (do_s6b_st_proc) { + /* Upon rx of DeleteSession, emulate PGW requesting the AAA server for Sesssion Termination. */ + f_S6b_ST_success(); + } GTP2.send(ts_GTP2C_DeleteSessionResp(g_pars.teic_remote, rx_msg.sequenceNumber, @@ -1121,7 +1126,8 @@ private function f_TC_hss_initiated_deregister_permanent_termination(charstring f_DIA_SWx_RT(PERMANENT_TERMINATION, tr_AVP_ResultCode(DIAMETER_SUCCESS)); /* Subscriber was already removed, it should fail if requested again: */ var DIAMETER_ts29_229_ExperimentalResultcode erc := DIAMETER_ERROR_USER_UNKNOWN; - f_DIA_SWx_RT(PERMANENT_TERMINATION, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(erc), 4))); + f_DIA_SWx_RT(PERMANENT_TERMINATION, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(erc), 4)), + exp_aaa_proc := false); } testcase TC_hss_initiated_deregister_permanent_termination() runs on MTC_CT { var EPDG_ConnHdlrPars pars := f_init_pars(); |