From 4265b2a2bca66f8618573805751c3d9d8f8816a8 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Fri, 5 May 2023 18:06:25 +0900 Subject: [PATCH] [MME] try to fix the #2287 issue --- src/mme/mme-context.c | 11 ++++++++--- src/mme/mme-context.h | 14 ++++++++++++++ src/mme/mme-gtp-path.c | 2 +- src/mme/mme-s11-handler.c | 5 +---- src/mme/mme-sm.c | 6 +++--- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/mme/mme-context.c b/src/mme/mme-context.c index 73c5618a8..3257d766b 100644 --- a/src/mme/mme-context.c +++ b/src/mme/mme-context.c @@ -3596,8 +3596,9 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( pti = message->esm.h.procedure_transaction_identity; ebi = message->esm.h.eps_bearer_identity; - ogs_debug("mme_bearer_find_or_add_by_message() [PTI:%d, EBI:%d]", - pti, ebi); + ogs_debug("mme_bearer_find_or_add_by_message() : " + "ESM message type:%d, PTI:%d, EBI:%d", + message->esm.h.message_type, pti, ebi); if (ebi != OGS_NAS_EPS_BEARER_IDENTITY_UNASSIGNED) { bearer = mme_bearer_find_by_ue_ebi(mme_ue, ebi); @@ -3736,7 +3737,11 @@ mme_bearer_t *mme_bearer_find_or_add_by_message( } bearer = mme_default_bearer_in_sess(sess); - ogs_assert(bearer); + if (!bearer) { + ogs_error("No Bearer(%d) : ESM message type:%d, PTI:%d, EBI:%d", + mme_sess_count(mme_ue), message->esm.h.message_type, pti, ebi); + ogs_assert_if_reached(); + } return bearer; } diff --git a/src/mme/mme-context.h b/src/mme/mme-context.h index 39b80288a..e2a24aff7 100644 --- a/src/mme/mme-context.h +++ b/src/mme/mme-context.h @@ -619,6 +619,20 @@ struct mme_ue_s { ((__mME)->sgw_ue)->sgw_s11_teid = 0; \ } while(0) +#define MME_SESS_CLEAR(__sESS) \ + do { \ + mme_ue_t *mme_ue = NULL; \ + ogs_assert(__sESS); \ + mme_ue = __sESS->mme_ue; \ + ogs_assert(mme_ue); \ + ogs_info("Removed Session: UE IMSI:[%s] APN:[%s]", \ + mme_ue->imsi_bcd, \ + sess->session ? sess->session->name : "Unknown"); \ + if (mme_sess_count(mme_ue) == 1) /* Last Session */ \ + CLEAR_SESSION_CONTEXT(mme_ue); \ + mme_sess_remove(sess); \ + } while(0) + #define ACTIVE_EPS_BEARERS_IS_AVAIABLE(__mME) \ (mme_ue_have_active_eps_bearers(__mME)) #define MME_SESSION_RELEASE_PENDING(__mME) \ diff --git a/src/mme/mme-gtp-path.c b/src/mme/mme-gtp-path.c index 6919183bf..8596a4ffe 100644 --- a/src/mme/mme-gtp-path.c +++ b/src/mme/mme-gtp-path.c @@ -336,7 +336,7 @@ void mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue, int action) if (MME_HAVE_SGW_S1U_PATH(sess)) { mme_gtp_send_delete_session_request(sgw_ue, sess, action); } else { - mme_sess_remove(sess); + MME_SESS_CLEAR(sess); } } } diff --git a/src/mme/mme-s11-handler.c b/src/mme/mme-s11-handler.c index 59f1ea98d..f52ce7ec1 100644 --- a/src/mme/mme-s11-handler.c +++ b/src/mme/mme-s11-handler.c @@ -745,10 +745,7 @@ void mme_s11_handle_delete_session_response( ogs_assert_if_reached(); } - if (mme_sess_count(mme_ue) == 1) /* Last Session */ - CLEAR_SESSION_CONTEXT(mme_ue); - - mme_sess_remove(sess); + MME_SESS_CLEAR(sess); } void mme_s11_handle_create_bearer_request( diff --git a/src/mme/mme-sm.c b/src/mme/mme-sm.c index 801df5d2e..5b9dff2f1 100644 --- a/src/mme/mme-sm.c +++ b/src/mme/mme-sm.c @@ -365,7 +365,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) if (default_bearer->ebi == bearer->ebi) { /* if the bearer is a default bearer, * remove all session context linked the default bearer */ - mme_sess_remove(sess); + MME_SESS_CLEAR(sess); } else { /* if the bearer is not a default bearer, * just remove the bearer context */ @@ -374,7 +374,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) } else if (OGS_FSM_CHECK(&bearer->sm, esm_state_pdn_did_disconnect)) { ogs_assert(default_bearer->ebi == bearer->ebi); - mme_sess_remove(sess); + MME_SESS_CLEAR(sess); } else if (OGS_FSM_CHECK(&bearer->sm, esm_state_exception)) { @@ -386,7 +386,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e) * * Just we'll remove MME session context. */ - mme_sess_remove(sess); + MME_SESS_CLEAR(sess); } ogs_pkbuf_free(pkbuf);