forked from acouzens/open5gs
[#203] MME also maintains one session context like SGW/PGW
This commit is contained in:
parent
6f44ff5f4d
commit
4b8e2a5c97
|
@ -2455,11 +2455,19 @@ mme_ue_t *mme_ue_find_by_message(ogs_nas_message_t *message)
|
|||
|
||||
int mme_ue_set_imsi(mme_ue_t *mme_ue, char *imsi_bcd)
|
||||
{
|
||||
mme_ue_t *old_mme_ue = NULL;
|
||||
ogs_assert(mme_ue && imsi_bcd);
|
||||
|
||||
ogs_cpystrn(mme_ue->imsi_bcd, imsi_bcd, OGS_MAX_IMSI_BCD_LEN+1);
|
||||
ogs_bcd_to_buffer(mme_ue->imsi_bcd, mme_ue->imsi, &mme_ue->imsi_len);
|
||||
|
||||
old_mme_ue = mme_ue_find_by_imsi(mme_ue->imsi, mme_ue->imsi_len);
|
||||
if (old_mme_ue) {
|
||||
if (old_mme_ue->enb_ue)
|
||||
enb_ue_deassociate(old_mme_ue->enb_ue);
|
||||
mme_ue_remove(old_mme_ue);
|
||||
}
|
||||
|
||||
ogs_hash_set(self.imsi_ue_hash, mme_ue->imsi, mme_ue->imsi_len, mme_ue);
|
||||
|
||||
mme_ue->guti_present = 1;
|
||||
|
|
|
@ -570,38 +570,46 @@ void s1ap_handle_initial_context_setup_failure(
|
|||
if (enb_ue == NULL) {
|
||||
ogs_warn("Initial context setup failure : "
|
||||
"cannot find eNB-UE-S1AP-ID[%d]", (int)*ENB_UE_S1AP_ID);
|
||||
goto cleanup;
|
||||
return;
|
||||
}
|
||||
mme_ue = enb_ue->mme_ue;
|
||||
|
||||
ogs_debug(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]",
|
||||
enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id);
|
||||
ogs_debug(" Cause[Group:%d Cause:%d]",
|
||||
Cause->present, (int)Cause->choice.radioNetwork);
|
||||
|
||||
ogs_assert(mme_ue);
|
||||
if (mme_ue && OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) {
|
||||
ogs_debug(" EMM-Registered");
|
||||
mme_ue = enb_ue->mme_ue;
|
||||
|
||||
/*
|
||||
* 19.2.2.3 in Spec 36.300
|
||||
*
|
||||
* In case of failure, eNB and MME behaviours are not mandated.
|
||||
*
|
||||
* Both implicit release (local release at each node) and
|
||||
* explicit release (MME-initiated UE Context Release procedure)
|
||||
* may in principle be adopted. The eNB should ensure
|
||||
* that no hanging resources remain at the eNB.
|
||||
*/
|
||||
} else {
|
||||
ogs_debug(" NOT EMM-Registered");
|
||||
ogs_assert(mme_ue);
|
||||
rv = mme_send_delete_session_or_ue_context_release(mme_ue, enb_ue);
|
||||
if (!mme_ue) {
|
||||
ogs_debug(" S1 Context Not Associated");
|
||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
||||
rv = s1ap_send_ue_context_release_command(enb_ue,
|
||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||
S1AP_UE_CTX_REL_NO_ACTION, 0);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
}
|
||||
} else {
|
||||
if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) {
|
||||
ogs_debug(" EMM-Registered");
|
||||
|
||||
cleanup:
|
||||
CLEAR_SERVICE_INDICATOR(mme_ue);
|
||||
/*
|
||||
* 19.2.2.3 in Spec 36.300
|
||||
*
|
||||
* In case of failure, eNB and MME behaviours are not mandated.
|
||||
*
|
||||
* Both implicit release (local release at each node) and
|
||||
* explicit release (MME-initiated UE Context Release procedure)
|
||||
* may in principle be adopted. The eNB should ensure
|
||||
* that no hanging resources remain at the eNB.
|
||||
*/
|
||||
} else {
|
||||
ogs_debug(" NOT EMM-Registered");
|
||||
ogs_assert(mme_ue);
|
||||
rv = mme_send_delete_session_or_ue_context_release(mme_ue, enb_ue);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
}
|
||||
|
||||
CLEAR_SERVICE_INDICATOR(mme_ue);
|
||||
}
|
||||
}
|
||||
|
||||
void s1ap_handle_ue_context_modification_response(
|
||||
|
|
Loading…
Reference in New Issue