pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43886?usp=email ) Change subject: WIP: smf: TC_pfcp_heartbeat_timeout: Expect Delete Bearer Request ...................................................................... WIP: smf: TC_pfcp_heartbeat_timeout: Expect Delete Bearer Request Change-Id: I5d55801923533b36ca2a1a573f1205281809f76d --- M library/GTPv2_Templates.ttcn M smf/SMF_Session_CT_4G.ttcn M smf/SMF_Tests.ttcn 3 files changed, 79 insertions(+), 8 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/86/43886/1 diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn index 31ec999..127ef4d 100644 --- a/library/GTPv2_Templates.ttcn +++ b/library/GTPv2_Templates.ttcn @@ -1355,6 +1355,26 @@ privateExtension := omit }}); +template (present) PDU_GTPCv2 +tr_GTP2C_DeleteBearerReq(template (present) OCT4 d_teid := ?, + template (present) OCT3 seq := ?, + template (present) GTP2C_Cause cause := ?) := +tr_PDU_GTP2C(d_teid, seq, { + deleteBearerRequest := { + epsBearerIdentity := *, + bearerContextGrouped := *, + procedureTransactionID := *, + protocolConfigOptions := *, + csid := *, + cause := tr_GTP2C_Cause(cause), + indicationFlags := *, + loadControlInformationGrouped := *, + overloadControlInformationGrouped := *, + nBIFOMContainer := *, + extendedProtocolConfigOptions := *, + privateExtension := * + }}); + template (value) PDU_GTPCv2 ts_GTP2C_DeleteBearerReq(template (value) OCT4 d_teid, template (value) integer proc_trans_id, @@ -1401,6 +1421,31 @@ privateExtension := * }}); +template (value) PDU_GTPCv2 +ts_GTP2C_DeleteBearerResp(template (value) OCT4 d_teid, + template (value) OCT3 seq, + template (value) uint4_t bearer_id, + template (value) GTP2C_Cause cause) := +ts_PDU_GTP2C(d_teid, seq, '64'O, { + deleteBearerResponse := { + cause := ts_GTP2C_Cause(cause, '0'B), + linkedBearerIdentity := ts_GTP2C_EpsBearerId(bearer_id), + bearerContextGrouped := omit, + recovery := omit, + csid := omit, + protocolConfigOptions := omit, + uE_TimeZone := omit, + uLI := omit, + uLITimestamp := omit, + trustedWLANAccessNetworkIdentifier := omit, + tWANIdentifierTimestamp := omit, + overloadControlInformationGrouped := omit, + iP_Addr := omit, + portNumber := omit, + nBIFOMContainer := omit, + privateExtension := omit + }}); + /* 8.18 */ template (value) ServingNetwork ts_GTP2C_ServingNetwork(template (value) hexstring mcc, diff --git a/smf/SMF_Session_CT_4G.ttcn b/smf/SMF_Session_CT_4G.ttcn index ba230cb..699f5eb 100644 --- a/smf/SMF_Session_CT_4G.ttcn +++ b/smf/SMF_Session_CT_4G.ttcn @@ -134,7 +134,7 @@ altstep as_DIA_Gy_CCR(DCC_NONE_CC_Request_Type req_type) runs on SMF_Session_CT { - [] DIAMETER[DIA_Gy].receive(f_tr_DIA_Gy_CCR_sess(req_type := req_type)) -> value g_rx_gy { + [] DIAMETER[DIA_Gy].receive(?) -> value g_rx_gy { var template (value) PDU_DIAMETER tx_dia; var template (omit) integer validity_time := omit; if (g_pars.gy.validity_time > 0) { @@ -448,4 +448,29 @@ f_delete_session(fteid_c_ie, tx_cause, exp_cause, expect_pfcp, expect_diameter); } +altstep as_s5s8_delete_bearer_req(boolean expect_diameter := true) runs on SMF_Session_CT { + var PDU_GTPCv2 rx_pdu; + [] GTP2.receive(tr_GTP2C_DeleteBearerReq(g_pars.teic_local, ?)) -> value rx_pdu { + var template (value) PDU_GTPCv2 tx_pdu; + tx_pdu := ts_GTP2C_DeleteBearerResp(g_pars.teic_remote, rx_pdu.sequenceNumber, 5, Request_accepted); + GTP2.send(tx_pdu); + + if (is_s2b_iface() and DIAMETER[DIA_S6b].checkstate("Connected") and expect_diameter) { + as_DIA_S6b_STR(); + } + + if (DIAMETER[DIA_Gx].checkstate("Connected") and expect_diameter) { + as_DIA_Gx_CCR(TERMINATION_REQUEST); + } + if (DIAMETER[DIA_Gy].checkstate("Connected") and expect_diameter) { + as_DIA_Gy_CCR(TERMINATION_REQUEST); + } + setverdict(pass); + } + [] GTP2.receive(PDU_GTPCv2:?) -> value rx_pdu { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Received unexpected GTPV2C ", rx_pdu)); + } +} + } diff --git a/smf/SMF_Tests.ttcn b/smf/SMF_Tests.ttcn index 9f874be..6c8ce5d 100644 --- a/smf/SMF_Tests.ttcn +++ b/smf/SMF_Tests.ttcn @@ -596,12 +596,13 @@ f_prometheus_expect(valueof(t_Metrics_Expect(1, 1)), wait_converge := true); /* Wait for IUT to detect peer went down after Heartbeat timeout, ie. wait for a 2nd ASSOC SETUP REQ - * after Heartbeat timeout: - * TODO: Handle tear down indication towards SGW-C (s5/s8c), PCRF (Gx) and OCS (Gy) */ + * after Heartbeat timeout: */ + as_s5s8_delete_bearer_req(); + PFCP.receive(tr_PFCP_Assoc_Setup_Req()) -> value m; deactivate(d); activate(as_pfcp_handle_heartbeat_req(rts, do_repeat := true)); - f_prometheus_expect(valueof(t_Metrics_Expect(0, 1)), wait_converge := true); + f_prometheus_expect(valueof(t_Metrics_Expect(0, 0)), wait_converge := true); PFCP.send(ts_PFCP_Assoc_Setup_Resp(m.sequence_number, ts_PFCP_Node_ID_ipv4(f_inet_addr(mp_pfcp_ip_local)), ts_PFCP_Cause(PFCP_Cause_REQUEST_ACCEPTED), @@ -615,10 +616,10 @@ * then delete the session to avoid leaving it dandling and open5gs-smfd trying to restore it (PFCP Sess Est Req) * on other tests executed afterwards and making them fail due to unexpected msg received: */ - // f_prometheus_expect(valueof(t_Metrics_Expect(1, 0)), wait_converge := true); - // setverdict(pass); - f_s5s8_delete_session(omit, Request_accepted); - setverdict(fail, "https://github.com/open5gs/open5gs/issues/4860"); + f_prometheus_expect(valueof(t_Metrics_Expect(1, 0)), wait_converge := true); + setverdict(pass); + //f_s5s8_delete_session(omit, Request_accepted); + //setverdict(fail, "https://github.com/open5gs/open5gs/issues/4860"); } testcase TC_pfcp_heartbeat_timeout() runs on SMF_Test_CT { var SMF_Session_CT vc_conn; -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43886?usp=email To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email Gerrit-MessageType: newchange Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I5d55801923533b36ca2a1a573f1205281809f76d Gerrit-Change-Number: 43886 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin@sysmocom.de>