context association is re-architectured

This commit is contained in:
Sukchan Lee 2017-09-18 21:58:33 +09:00
parent bd9c8d467b
commit bf55e0112f
5 changed files with 23 additions and 16 deletions

View File

@ -1208,15 +1208,7 @@ status_t mme_ue_remove(mme_ue_t *mme_ue)
mme_sess_remove_all(mme_ue);
mme_pdn_remove_all(mme_ue);
#if 0 /* FIXME : Dees it needed? */
if (mme_ue->enb_ue)
{
if (mme_ue->enb_ue->mme_ue != mme_ue)
d_warn("Invalid mme_ue assigend to enb_ue");
else
mme_ue->enb_ue->mme_ue = NULL;
}
#endif
mme_ue_deassociate_enb_ue(mme_ue->enb_ue);
index_free(&mme_ue_pool, mme_ue);
@ -1500,11 +1492,18 @@ status_t mme_ue_associate_enb_ue(mme_ue_t *mme_ue, enb_ue_t *enb_ue)
* mme_ue_remove()
*
* Note : should not call in enb_ue_remove()
*
* When mme_ue is removed, enb_ue->mme_ue must be NULL.
* However, when enb_ue is removed, mme_ue->enb_ue need not be NULL.
* mme_ue->enb_ue will be updated again when enb_ue is added.
*/
status_t mme_ue_deassociate_enb_ue(mme_ue_t *mme_ue, enb_ue_t *enb_ue)
status_t mme_ue_deassociate_enb_ue(enb_ue_t *enb_ue)
{
d_assert(mme_ue, return CORE_ERROR, "Null param");
mme_ue_t *mme_ue = NULL;
d_assert(enb_ue, return CORE_ERROR, "Null param");
mme_ue = enb_ue->mme_ue;
d_assert(mme_ue, return CORE_ERROR, "Null param");
mme_ue->enb_ue = NULL;
enb_ue->mme_ue = NULL;
@ -1534,6 +1533,10 @@ status_t source_ue_associate_target_ue(
/*
* enb_ue_remove()
*
* enb_ue->mme_ue->enb_ue should not be set to NULL.
* This is because enb_ue is not known as source_ue or target_ue.
* Therefore, when enb_ue is removed, leave enb_ue->mme_ue->enb_ue as is.
*/
status_t source_ue_deassociate_target_ue(enb_ue_t *enb_ue)
{

View File

@ -465,8 +465,7 @@ CORE_DECLARE(status_t) mme_ue_set_imsi(
mme_ue_t *mme_ue, c_int8_t *imsi_bcd);
CORE_DECLARE(status_t) mme_ue_associate_enb_ue(
mme_ue_t *mme_ue, enb_ue_t *enb_ue);
CORE_DECLARE(status_t) mme_ue_deassociate_enb_ue(
mme_ue_t *mme_ue, enb_ue_t *enb_ue);
CORE_DECLARE(status_t) mme_ue_deassociate_enb_ue(enb_ue_t *enb_ue);
CORE_DECLARE(status_t) source_ue_associate_target_ue(
enb_ue_t *source_ue, enb_ue_t *target_ue);
CORE_DECLARE(status_t) source_ue_deassociate_target_ue(enb_ue_t *enb_ue);

View File

@ -296,8 +296,6 @@ void mme_state_operational(fsm_t *s, event_t *e)
d_assert(rv == CORE_OK,,
"nas_send_attach_reject failed");
mme_ue_remove(mme_ue);
pkbuf_free(s6abuf);
break;
}

View File

@ -131,7 +131,6 @@ status_t nas_send_attach_reject(mme_ue_t *mme_ue,
esmbuf ? pkbuf_free(esmbuf) : 1; return CORE_ERROR,
"nas send error");
/* FIXME : delay is needed */
cause.present = S1ap_Cause_PR_nas;
cause.choice.nas = s1ap_cause_nas;;
rv = s1ap_send_ue_context_release_commmand(enb_ue, &cause, 0);

View File

@ -501,6 +501,14 @@ void s1ap_handle_ue_context_release_complete(
mme_ue);
d_assert(rv == CORE_OK, return, "gtp send error");
}
else
{
if (!FSM_CHECK(&mme_ue->sm, emm_state_detached) &&
!FSM_CHECK(&mme_ue->sm, emm_state_attached))
{
mme_ue_remove(mme_ue);
}
}
}
void s1ap_handle_paging(mme_ue_t *mme_ue)