clarify attach/tau/service reject interface

This commit is contained in:
Sukchan Lee
2018-01-11 22:25:35 +09:00
parent 47dc5eec38
commit 3503fda431
4 changed files with 28 additions and 21 deletions

View File

@@ -80,7 +80,7 @@ status_t emm_handle_attach_request(
EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED,
ESM_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT);
return CORE_ERROR;
return CORE_OK;
}
/* Store UE specific information */
@@ -313,9 +313,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);
return CORE_ERROR;
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
S1AP_UE_CTX_REL_NO_ACTION);
}
}
}
@@ -335,9 +334,8 @@ status_t emm_handle_identity_response(
else
{
nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
return CORE_ERROR;
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
S1AP_UE_CTX_REL_NO_ACTION);
}
}
}
@@ -444,9 +442,8 @@ status_t emm_handle_service_request(
else
{
nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
return CORE_ERROR;
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
S1AP_UE_CTX_REL_NO_ACTION);
}
}
}
@@ -509,8 +506,10 @@ 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);
return CORE_ERROR;
nas_send_tau_reject(mme_ue,
EMM_CAUSE_TRACKING_AREA_NOT_ALLOWED,
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT);
return CORE_OK;
}
/* Store UE specific information */
@@ -599,9 +598,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);
return CORE_ERROR;
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
S1AP_UE_CTX_REL_NO_ACTION);
}
}
}

View File

@@ -69,6 +69,7 @@ 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");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -106,6 +107,7 @@ 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");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -134,6 +136,7 @@ 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");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -225,6 +228,7 @@ 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()");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -497,6 +501,7 @@ void emm_state_default_esm(fsm_t *s, event_t *e)
mme_ue, &message->emm.attach_complete);
if (rv != CORE_OK)
{
d_error("emm_handle_attach_complete() failed");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -578,6 +583,7 @@ 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");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -615,6 +621,7 @@ 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");
FSM_TRAN(s, emm_state_exception);
break;
}
@@ -655,6 +662,7 @@ 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");
FSM_TRAN(s, emm_state_exception);
break;
}

View File

@@ -381,7 +381,8 @@ 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)
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 rv;
enb_ue_t *enb_ue = NULL;
@@ -404,19 +405,19 @@ status_t nas_send_tau_reject(mme_ue_t *mme_ue, nas_emm_cause_t emm_cause)
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);
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)
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 rv;
enb_ue_t *enb_ue = NULL;

View File

@@ -38,10 +38,10 @@ CORE_DECLARE(status_t) nas_send_deactivate_bearer_context_request(
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);
nas_esm_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);
nas_emm_cause_t emm_cause, c_uint8_t ue_ctx_rel_action);
#ifdef __cplusplus
}