if TAU_REJECT or SERVICE_REJECT, MME UE Context is removed.
This commit is contained in:
parent
2701add779
commit
e4c189fec2
|
@ -76,11 +76,9 @@ status_t emm_handle_attach_request(
|
|||
{
|
||||
/* Send Attach Reject */
|
||||
nas_send_attach_reject(mme_ue,
|
||||
S1ap_CauseNas_unspecified,
|
||||
EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED,
|
||||
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT);
|
||||
return CORE_OK;
|
||||
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
/* Store UE specific information */
|
||||
|
@ -313,8 +311,8 @@ status_t emm_handle_identity_response(
|
|||
{
|
||||
/* Send TAU reject */
|
||||
nas_send_tau_reject(mme_ue,
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
|
||||
S1AP_UE_CTX_REL_NO_ACTION);
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -334,8 +332,8 @@ status_t emm_handle_identity_response(
|
|||
else
|
||||
{
|
||||
nas_send_service_reject(mme_ue,
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
|
||||
S1AP_UE_CTX_REL_NO_ACTION);
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -442,8 +440,8 @@ status_t emm_handle_service_request(
|
|||
else
|
||||
{
|
||||
nas_send_service_reject(mme_ue,
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
|
||||
S1AP_UE_CTX_REL_NO_ACTION);
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -496,10 +494,8 @@ status_t emm_handle_tau_request(
|
|||
if (served_tai_index < 0)
|
||||
{
|
||||
/* Send TAU reject */
|
||||
nas_send_tau_reject(mme_ue,
|
||||
EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT);
|
||||
return CORE_OK;
|
||||
nas_send_tau_reject(mme_ue, EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
/* Store UE specific information */
|
||||
|
@ -588,8 +584,8 @@ status_t emm_handle_tau_request(
|
|||
{
|
||||
/* Send TAU reject */
|
||||
nas_send_tau_reject(mme_ue,
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
|
||||
S1AP_UE_CTX_REL_NO_ACTION);
|
||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,8 @@ void emm_state_detached(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.service_request);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_service_request() failed");
|
||||
d_error("emm_handle_service_request() failed "
|
||||
"in emm_state_detached");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -107,7 +108,8 @@ void emm_state_detached(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.attach_request);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_attach_request() failed");
|
||||
d_error("emm_handle_attach_request() failed "
|
||||
"in emm_state_detached");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -137,7 +139,8 @@ void emm_state_detached(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.tracking_area_update_request);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_tau_request() failed");
|
||||
d_error("emm_handle_tau_request() failed"
|
||||
"in emm_state_detached");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -229,7 +232,8 @@ void emm_state_identity(fsm_t *s, event_t *e)
|
|||
&message->emm.identity_response);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_identity_response failed()");
|
||||
d_error("emm_handle_identity_response failed() "
|
||||
"in emm_state_identity");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -512,7 +516,8 @@ void emm_state_initial_context_setup(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.attach_complete);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_attach_complete() failed");
|
||||
d_error("emm_handle_attach_complete() failed "
|
||||
"in emm_state_initial_context_setup");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -597,7 +602,8 @@ void emm_state_attached(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.service_request);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_service_request() failed");
|
||||
d_error("emm_handle_service_request() failed "
|
||||
"in emm_state_attached");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -635,7 +641,8 @@ void emm_state_attached(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.attach_request);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_attach_request() failed");
|
||||
d_error("emm_handle_attach_request() failed "
|
||||
"in emm_state_attached");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
@ -680,7 +687,8 @@ void emm_state_attached(fsm_t *s, event_t *e)
|
|||
mme_ue, &message->emm.tracking_area_update_request);
|
||||
if (rv != CORE_OK)
|
||||
{
|
||||
d_error("emm_handle_tau_request() failed");
|
||||
d_error("emm_handle_tau_request() failed "
|
||||
"in emm_state_attached");
|
||||
FSM_TRAN(s, emm_state_exception);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -373,14 +373,24 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
|
||||
if (s6a_message->result_code != ER_DIAMETER_SUCCESS)
|
||||
{
|
||||
S1ap_Cause_t cause;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
||||
rv = nas_send_attach_reject(mme_ue,
|
||||
S1ap_CauseNas_authentication_failure,
|
||||
EMM_CAUSE_EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED,
|
||||
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT);
|
||||
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED);
|
||||
d_assert(rv == CORE_OK,,
|
||||
"nas_send_attach_reject failed");
|
||||
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, break, "No ENB UE context");
|
||||
|
||||
cause.present = S1ap_Cause_PR_nas;
|
||||
cause.choice.nas = S1ap_CauseNas_authentication_failure;
|
||||
rv = s1ap_send_ue_context_release_commmand(enb_ue, &cause,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT, 0);
|
||||
d_assert(rv == CORE_OK,, "s1ap send error");
|
||||
|
||||
pkbuf_free(s6abuf);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -100,22 +100,13 @@ status_t nas_send_attach_accept(mme_ue_t *mme_ue)
|
|||
}
|
||||
|
||||
status_t nas_send_attach_reject(mme_ue_t *mme_ue,
|
||||
e_S1ap_CauseNas s1ap_cause_nas,
|
||||
nas_emm_cause_t emm_cause, nas_esm_cause_t esm_cause,
|
||||
c_uint8_t ue_ctx_rel_action)
|
||||
nas_emm_cause_t emm_cause, nas_esm_cause_t esm_cause)
|
||||
{
|
||||
status_t rv;
|
||||
mme_enb_t *enb = NULL;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
mme_sess_t *sess = NULL;
|
||||
pkbuf_t *esmbuf = NULL, *emmbuf = NULL;
|
||||
S1ap_Cause_t cause;
|
||||
|
||||
d_assert(mme_ue, return CORE_ERROR, "Null param");
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return CORE_ERROR, "Null param");
|
||||
enb = enb_ue->enb;
|
||||
d_assert(enb, return CORE_ERROR, "Null param");
|
||||
|
||||
sess = mme_sess_first(mme_ue);
|
||||
if (sess)
|
||||
|
@ -133,12 +124,6 @@ status_t nas_send_attach_reject(mme_ue_t *mme_ue,
|
|||
esmbuf ? pkbuf_free(esmbuf) : 1; return CORE_ERROR,
|
||||
"nas send error");
|
||||
|
||||
cause.present = S1ap_Cause_PR_nas;
|
||||
cause.choice.nas = s1ap_cause_nas;;
|
||||
rv = s1ap_send_ue_context_release_commmand(
|
||||
enb_ue, &cause, ue_ctx_rel_action, 0);
|
||||
d_assert(rv == CORE_OK,, "s1ap send error");
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
@ -421,72 +406,36 @@ status_t nas_send_tau_accept(mme_ue_t *mme_ue)
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t nas_send_tau_reject(mme_ue_t *mme_ue,
|
||||
nas_emm_cause_t emm_cause, c_uint8_t ue_ctx_rel_action)
|
||||
status_t nas_send_tau_reject(mme_ue_t *mme_ue, nas_emm_cause_t emm_cause)
|
||||
{
|
||||
status_t rv;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
pkbuf_t *emmbuf = NULL;
|
||||
S1ap_Cause_t cause;
|
||||
|
||||
d_assert(mme_ue, return CORE_ERROR, "Null param");
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return CORE_ERROR, "Null param");
|
||||
|
||||
/* Build TAU reject */
|
||||
if (emm_build_tau_reject(&emmbuf, emm_cause, mme_ue) != CORE_OK)
|
||||
{
|
||||
d_error("emm_build_tau_reject error");
|
||||
pkbuf_free(emmbuf);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
rv = emm_build_tau_reject(&emmbuf, emm_cause, mme_ue);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "emm build error");
|
||||
|
||||
/* Send Dl NAS to UE */
|
||||
rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "nas dl send error");
|
||||
|
||||
/* FIXME : delay required before sending UE context release to make sure
|
||||
* that UE receive DL NAS ? */
|
||||
cause.present = S1ap_Cause_PR_nas;
|
||||
cause.choice.nas = S1ap_CauseNas_normal_release;
|
||||
rv = s1ap_send_ue_context_release_commmand(
|
||||
enb_ue, &cause, ue_ctx_rel_action, 0);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "s1ap send error");
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t nas_send_service_reject(mme_ue_t *mme_ue,
|
||||
nas_emm_cause_t emm_cause, c_uint8_t ue_ctx_rel_action)
|
||||
status_t nas_send_service_reject(mme_ue_t *mme_ue, nas_emm_cause_t emm_cause)
|
||||
{
|
||||
status_t rv;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
pkbuf_t *emmbuf = NULL;
|
||||
S1ap_Cause_t cause;
|
||||
|
||||
d_assert(mme_ue, return CORE_ERROR, "Null param");
|
||||
enb_ue = mme_ue->enb_ue;
|
||||
d_assert(enb_ue, return CORE_ERROR, "Null param");
|
||||
|
||||
/* Build Service Reject */
|
||||
if (emm_build_service_reject(&emmbuf, emm_cause, mme_ue) != CORE_OK)
|
||||
{
|
||||
d_error("emm_build_service_reject error");
|
||||
pkbuf_free(emmbuf);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
rv = emm_build_service_reject(&emmbuf, emm_cause, mme_ue);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "emm build error");
|
||||
|
||||
/* Send Dl NAS to UE */
|
||||
rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "nas dl send error");
|
||||
|
||||
/* FIXME : delay required before sending UE context release to make sure
|
||||
* that UE receive DL NAS ? */
|
||||
cause.present = S1ap_Cause_PR_nas;
|
||||
cause.choice.nas = S1ap_CauseNas_normal_release;
|
||||
rv = s1ap_send_ue_context_release_commmand(
|
||||
enb_ue, &cause, S1AP_UE_CTX_REL_NO_ACTION, 0);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "s1ap send error");
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
|
|
@ -17,8 +17,7 @@ CORE_DECLARE(status_t) nas_send_to_downlink_nas_transport(
|
|||
|
||||
CORE_DECLARE(status_t) nas_send_attach_accept(mme_ue_t *mme_ue);
|
||||
CORE_DECLARE(status_t) nas_send_attach_reject(mme_ue_t *mme_ue,
|
||||
e_S1ap_CauseNas s1ap_cause_nas, nas_emm_cause_t emm_cause,
|
||||
nas_esm_cause_t esm_cause, c_uint8_t ue_ctx_rel_action);
|
||||
nas_emm_cause_t emm_cause, nas_esm_cause_t esm_cause);
|
||||
|
||||
CORE_DECLARE(status_t) nas_send_authentication_request(
|
||||
mme_ue_t *mme_ue, e_utran_vector_t *e_utran_vector);
|
||||
|
@ -39,11 +38,11 @@ CORE_DECLARE(status_t) nas_send_deactivate_bearer_context_request(
|
|||
mme_bearer_t *bearer);
|
||||
|
||||
CORE_DECLARE(status_t) nas_send_tau_accept(mme_ue_t *mme_ue);
|
||||
CORE_DECLARE(status_t) nas_send_tau_reject(mme_ue_t *mme_ue,
|
||||
nas_esm_cause_t emm_cause, c_uint8_t ue_ctx_rel_action);
|
||||
CORE_DECLARE(status_t) nas_send_tau_reject(
|
||||
mme_ue_t *mme_ue, nas_esm_cause_t emm_cause);
|
||||
|
||||
CORE_DECLARE(status_t) nas_send_service_reject(mme_ue_t *mme_ue,
|
||||
nas_emm_cause_t emm_cause, c_uint8_t ue_ctx_rel_action);
|
||||
CORE_DECLARE(status_t) nas_send_service_reject(
|
||||
mme_ue_t *mme_ue, nas_emm_cause_t emm_cause);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -693,7 +693,7 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
pkbuf_free(recvbuf);
|
||||
|
||||
/*****************************************************************
|
||||
* Attach Request : IMSI, Integrity Protected, MAC Failed
|
||||
* Attach Request : Unknown IMSI, Integrity Protected
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
|
|
|
@ -445,7 +445,7 @@ static void volte_test2(abts_case *tc, void *data)
|
|||
bson_destroy(doc);
|
||||
|
||||
/***********************************************************************
|
||||
* Attach Request : Known IMSI, Integrity Protected, No Security Context
|
||||
* Attach Request : Known IMSI, Integrity Protected, MAC failed
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
|
Loading…
Reference in New Issue