refine code
This commit is contained in:
parent
3f7c3d3041
commit
7ca9ead4b9
|
@ -2374,6 +2374,21 @@ mme_sess_t* mme_sess_next(mme_sess_t *sess)
|
|||
return list_next(sess);
|
||||
}
|
||||
|
||||
unsigned int mme_sess_count(mme_ue_t *mme_ue)
|
||||
{
|
||||
unsigned int count = 0;
|
||||
mme_sess_t *sess = NULL;
|
||||
|
||||
sess = mme_sess_first(mme_ue);
|
||||
while(sess)
|
||||
{
|
||||
sess = mme_sess_next(sess);
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
mme_bearer_t* mme_bearer_add(mme_sess_t *sess)
|
||||
{
|
||||
event_t e;
|
||||
|
|
|
@ -364,7 +364,9 @@ struct _mme_ue_t {
|
|||
|
||||
#define MAX_NUM_OF_GTP_COUNTER 16
|
||||
|
||||
#if 0 /* Deprecated */
|
||||
#define GTP_COUNTER_DELETE_SESSION 0
|
||||
#endif
|
||||
#define GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH 1
|
||||
#define GTP_COUNTER_MODIFY_BEARER_BY_HANDOVER_NOTIFY 2
|
||||
struct {
|
||||
|
@ -591,6 +593,7 @@ CORE_DECLARE(mme_sess_t*) mme_sess_find_by_apn(
|
|||
mme_ue_t *mme_ue, c_int8_t *apn);
|
||||
CORE_DECLARE(mme_sess_t*) mme_sess_first(mme_ue_t *mme_ue);
|
||||
CORE_DECLARE(mme_sess_t*) mme_sess_next(mme_sess_t *sess);
|
||||
CORE_DECLARE(unsigned int) mme_sess_count(mme_ue_t *mme_ue);
|
||||
|
||||
CORE_DECLARE(mme_bearer_t*) mme_bearer_add(mme_sess_t *sess);
|
||||
CORE_DECLARE(status_t) mme_bearer_remove(mme_bearer_t *bearer);
|
||||
|
|
|
@ -194,8 +194,6 @@ status_t mme_gtp_send_delete_session_request(mme_sess_t *sess)
|
|||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "xact_commit error");
|
||||
|
||||
GTP_COUNTER_INCREMENT(mme_ue, GTP_COUNTER_DELETE_SESSION);
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -116,16 +116,16 @@ void mme_s11_handle_modify_bearer_response(
|
|||
status_t rv;
|
||||
enb_ue_t *source_ue = NULL, *target_ue = NULL;
|
||||
|
||||
d_assert(xact, return, "Null param");
|
||||
d_assert(mme_ue, return, "Null param");
|
||||
d_assert(rsp, return, "Null param");
|
||||
d_assert(xact, goto cleanup, "Null param");
|
||||
d_assert(rsp, goto cleanup, "Null param");
|
||||
|
||||
d_trace(3, "[MME] Modify Bearer Response\n");
|
||||
d_trace(5, " MME_S11_TEID[%d] SGW_S11_TEID[%d]\n",
|
||||
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
d_assert(rv == CORE_OK, goto cleanup, "xact_commit error");
|
||||
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH,
|
||||
rv = s1ap_send_path_switch_ack(mme_ue);
|
||||
|
@ -144,6 +144,12 @@ void mme_s11_handle_modify_bearer_response(
|
|||
S1AP_UE_CTX_REL_DELETE_INDIRECT_TUNNEL, 300);
|
||||
d_assert(rv == CORE_OK, return, "s1ap send error");
|
||||
);
|
||||
|
||||
return;
|
||||
|
||||
cleanup:
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_PATH_SWITCH,);
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_MODIFY_BEARER_BY_HANDOVER_NOTIFY,);
|
||||
}
|
||||
|
||||
void mme_s11_handle_delete_session_response(
|
||||
|
@ -152,100 +158,84 @@ void mme_s11_handle_delete_session_response(
|
|||
status_t rv;
|
||||
mme_sess_t *sess = NULL;
|
||||
|
||||
d_assert(rsp, return, "Null param");
|
||||
d_assert(mme_ue, return, "Null param");
|
||||
d_assert(xact, return, "Null param");
|
||||
sess = GTP_XACT_RETRIEVE_SESSION(xact);
|
||||
d_assert(sess, return, "Null param");
|
||||
d_assert(rsp, goto cleanup, "Null param");
|
||||
|
||||
d_trace(3, "[MME] Delete Session Response\n");
|
||||
if (rsp->cause.presence == 0)
|
||||
{
|
||||
d_error("No Cause");
|
||||
return;
|
||||
goto cleanup;
|
||||
}
|
||||
d_trace(5, " MME_S11_TEID[%d] SGW_S11_TEID[%d]\n",
|
||||
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
|
||||
|
||||
rv = gtp_xact_commit(xact);
|
||||
d_assert(rv == CORE_OK, return, "xact_commit error");
|
||||
d_assert(rv == CORE_OK, goto cleanup, "xact_commit error");
|
||||
|
||||
if (FSM_CHECK(&mme_ue->sm, emm_state_authentication))
|
||||
{
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
CLEAR_SGW_S11_PATH(mme_ue);
|
||||
if (mme_sess_count(mme_ue) == 1) /* Last Session */
|
||||
{
|
||||
mme_s6a_send_air(mme_ue, NULL);
|
||||
);
|
||||
|
||||
mme_sess_remove(sess);
|
||||
}
|
||||
}
|
||||
else if (FSM_CHECK(&mme_ue->sm, emm_state_de_registered))
|
||||
{
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
CLEAR_SGW_S11_PATH(mme_ue);
|
||||
if (mme_sess_count(mme_ue) == 1) /* Last Session */
|
||||
{
|
||||
rv = nas_send_detach_accept(mme_ue);
|
||||
d_assert(rv == CORE_OK,, "nas_send_detach_accept failed");
|
||||
);
|
||||
|
||||
mme_sess_remove(sess);
|
||||
}
|
||||
}
|
||||
else if (FSM_CHECK(&mme_ue->sm, emm_state_registered))
|
||||
{
|
||||
mme_bearer_t *bearer = mme_default_bearer_in_sess(sess);
|
||||
d_assert(bearer, return, "Null param");
|
||||
d_assert(bearer, goto cleanup, "Null param");
|
||||
|
||||
if (FSM_CHECK(&bearer->sm, esm_state_pdn_will_disconnect))
|
||||
{
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,);
|
||||
|
||||
rv = nas_send_deactivate_bearer_context_request(bearer);
|
||||
d_assert(rv == CORE_OK,,
|
||||
"nas_send_deactivate_bearer_context_request failed");
|
||||
}
|
||||
else if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
#if 0
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return, );
|
||||
|
||||
rv = s1ap_send_ue_context_release_command(enb_ue,
|
||||
S1ap_Cause_PR_nas, S1ap_CauseNas_normal_release,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT, 0);
|
||||
d_assert(rv == CORE_OK, return, "s1ap send error");
|
||||
);
|
||||
#else
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,);
|
||||
d_assert(0,, "Invalid ESM state");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* mme_sess_remove() should be called.
|
||||
*
|
||||
* Session will be removed
|
||||
* if Deactivate bearer context accept is received */
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,);
|
||||
d_assert(0,, "Invalid ESM state");
|
||||
}
|
||||
}
|
||||
else if (FSM_CHECK(&mme_ue->sm, emm_state_initial_context_setup) ||
|
||||
FSM_CHECK(&mme_ue->sm, emm_state_exception))
|
||||
{
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
if (mme_sess_count(mme_ue) == 1) /* Last Session */
|
||||
{
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return, );
|
||||
d_assert(enb_ue, goto cleanup, );
|
||||
|
||||
rv = s1ap_send_ue_context_release_command(enb_ue,
|
||||
S1ap_Cause_PR_nas, S1ap_CauseNas_normal_release,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT, 0);
|
||||
d_assert(rv == CORE_OK,, "s1ap send error");
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,);
|
||||
d_assert(0,, "Invalid EMM state");
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (mme_sess_count(mme_ue) == 1) /* Last Session */
|
||||
CLEAR_SGW_S11_PATH(mme_ue);
|
||||
|
||||
mme_sess_remove(sess);
|
||||
}
|
||||
|
||||
void mme_s11_handle_create_bearer_request(
|
||||
|
|
Loading…
Reference in New Issue