[MME] try to fix the #2287 issue

This commit is contained in:
Sukchan Lee 2023-05-05 18:06:25 +09:00
parent 1f078cb3c6
commit 4265b2a2bc
5 changed files with 27 additions and 11 deletions

View File

@ -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;
}

View File

@ -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) \

View File

@ -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);
}
}
}

View File

@ -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(

View File

@ -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);