refine code

This commit is contained in:
Sukchan Lee 2018-01-22 11:40:26 +09:00
parent b678d9e9a2
commit 6e6eb7a355
2 changed files with 84 additions and 111 deletions

View File

@ -217,8 +217,6 @@ status_t emm_handle_attach_complete(
status_t emm_handle_identity_response(
mme_ue_t *mme_ue, nas_identity_response_t *identity_response)
{
status_t rv;
nas_mobile_identity_t *mobile_identity = NULL;
enb_ue_t *enb_ue = NULL;
@ -246,76 +244,6 @@ status_t emm_handle_identity_response(
d_warn("Not supported Identity type(%d)", mobile_identity->imsi.type);
}
d_assert(MME_UE_HAVE_IMSI(mme_ue),
return CORE_ERROR, "No IMSI in IDENTITY_RESPONSE");
if (mme_ue->nas_eps.type == MME_EPS_TYPE_ATTACH_REQUEST)
{
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = nas_send_emm_to_esm(mme_ue, &mme_ue->pdn_connectivity_request);
d_assert(rv == CORE_OK,
return CORE_ERROR, "nas_send_emm_to_esm failed");
}
else
{
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp send failed");
}
else
{
mme_s6a_send_air(mme_ue, NULL);
}
}
}
else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST)
{
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
/* Send TAU accept */
rv = nas_send_tau_accept(mme_ue);
d_assert(rv == CORE_OK,
return CORE_ERROR, "nas_send_tau_accept failed");
}
else
{
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
mme_s6a_send_air(mme_ue, NULL);
}
else
{
/* Send TAU reject */
nas_send_tau_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
return CORE_ERROR;
}
}
}
else if (mme_ue->nas_eps.type == MME_EPS_TYPE_SERVICE_REQUEST)
{
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = s1ap_send_initial_context_setup_request(mme_ue);
d_assert(rv == CORE_OK, return CORE_ERROR, "s1ap send error");
}
else
{
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
mme_s6a_send_air(mme_ue, NULL);
}
else
{
nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
return CORE_ERROR;
}
}
}
return CORE_OK;
}

View File

@ -80,21 +80,26 @@ void emm_state_detached(fsm_t *s, event_t *e)
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = s1ap_send_initial_context_setup_request(mme_ue);
d_assert(rv == CORE_OK,, "s1ap send error");
d_assert(rv == CORE_OK,,
"s1ap_send_initial_context_setup_request() failed");
}
else
{
d_warn("NAS MAC Failure in emm_state_detached");
nas_send_service_reject(mme_ue,
rv = nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_service_reject() failed");
FSM_TRAN(s, &emm_state_exception);
}
}
else
{
d_warn("Unknown UE in emm_state_detached");
nas_send_service_reject(mme_ue,
rv = nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_service_reject() failed");
FSM_TRAN(s, &emm_state_exception);
}
break;
@ -121,7 +126,7 @@ void emm_state_detached(fsm_t *s, event_t *e)
rv = nas_send_emm_to_esm(
mme_ue, &mme_ue->pdn_connectivity_request);
d_assert(rv == CORE_OK,,
"nas_send_emm_to_esm failed");
"nas_send_emm_to_esm() failed");
FSM_TRAN(s, &emm_state_initial_context_setup);
}
else
@ -129,7 +134,8 @@ void emm_state_detached(fsm_t *s, event_t *e)
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK, ,, "gtp send failed");
d_assert(rv == CORE_OK,,
"mme_gtp_send_delete_all_sessions() failed");
}
else
{
@ -163,20 +169,26 @@ void emm_state_detached(fsm_t *s, event_t *e)
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = nas_send_tau_accept(mme_ue);
d_assert(rv == CORE_OK,, "send send failed");
d_assert(rv == CORE_OK,,
"nas_send_tau_accept() failed");
}
else
{
d_error("NAS MAC Failure in emm_state_detached");
nas_send_tau_reject(mme_ue, EMM_CAUSE_MAC_FAILURE);
rv = nas_send_tau_reject(
mme_ue, EMM_CAUSE_MAC_FAILURE);
d_assert(rv == CORE_OK,,
"nas_send_tau_reject() failed");
FSM_TRAN(s, emm_state_exception);
}
}
else
{
d_error("Unknown UE in emm_state_detached");
nas_send_tau_reject(mme_ue,
rv = nas_send_tau_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_tau_reject() failed");
FSM_TRAN(s, emm_state_exception);
}
break;
@ -249,16 +261,32 @@ void emm_state_identity(fsm_t *s, event_t *e)
break;
}
d_assert(MME_UE_HAVE_IMSI(mme_ue),
break, "No IMSI in IDENTITY_RESPONSE");
if (mme_ue->nas_eps.type == MME_EPS_TYPE_ATTACH_REQUEST)
{
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
FSM_TRAN(&mme_ue->sm,
&emm_state_initial_context_setup);
rv = nas_send_emm_to_esm(
mme_ue, &mme_ue->pdn_connectivity_request);
d_assert(rv == CORE_OK,,
"nas_send_emm_to_esm() failed");
FSM_TRAN(s, &emm_state_initial_context_setup);
}
else
{
FSM_TRAN(&mme_ue->sm, &emm_state_authentication);
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK,,
"mme_gtp_send_delete_all_sessions() failed");
}
else
{
mme_s6a_send_air(mme_ue, NULL);
}
FSM_TRAN(s, &emm_state_authentication);
}
}
else if (mme_ue->nas_eps.type ==
@ -266,9 +294,9 @@ void emm_state_identity(fsm_t *s, event_t *e)
{
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = s1ap_send_initial_context_setup_request(
mme_ue);
d_assert(rv == CORE_OK,, "s1ap send error");
rv = s1ap_send_initial_context_setup_request(mme_ue);
d_assert(rv == CORE_OK,,
"s1ap_send_initial_context_setup_request() failed");
FSM_TRAN(&mme_ue->sm, &emm_state_attached);
}
else
@ -279,26 +307,29 @@ void emm_state_identity(fsm_t *s, event_t *e)
d_warn("Have PDN Connection "
"in emm_state_attached");
nas_send_service_reject(mme_ue,
rv = nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_service_reject() failed");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, break, "No ENB UE context");
rv = s1ap_send_ue_context_release_command(
enb_ue, S1ap_Cause_PR_nas,
S1ap_CauseNas_normal_release,
S1AP_UE_CTX_REL_NO_ACTION, 0);
d_assert(rv == CORE_OK, break,
"s1ap send failed");
rv = s1ap_send_ue_context_release_command(enb_ue,
S1ap_Cause_PR_nas, S1ap_CauseNas_normal_release,
S1AP_UE_CTX_REL_NO_ACTION, 0);
d_assert(rv == CORE_OK,,
"s1ap_send_ue_context_release_command() failed");
FSM_TRAN(s, &emm_state_attached);
}
else
{
d_error("No PDN connection "
"in esm_state_identity");
nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_warn("No PDN Connection "
"in emm_state_attached");
rv = nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_service_reject() failed");
FSM_TRAN(s, &emm_state_exception);
}
}
@ -308,7 +339,8 @@ void emm_state_identity(fsm_t *s, event_t *e)
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = nas_send_tau_accept(mme_ue);
d_assert(rv == CORE_OK,, "send send failed");
d_assert(rv == CORE_OK,,
"nas_send_tau_accept() failed");
FSM_TRAN(&mme_ue->sm, &emm_state_attached);
}
else
@ -320,10 +352,12 @@ void emm_state_identity(fsm_t *s, event_t *e)
}
else
{
d_error("No PDN connection "
"in esm_state_identity");
nas_send_tau_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_warn("No PDN Connection "
"in emm_state_attached");
rv = nas_send_tau_reject(
mme_ue, EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_tau_reject() failed");
FSM_TRAN(s, emm_state_exception);
}
}
@ -599,7 +633,7 @@ void emm_state_initial_context_setup(fsm_t *s, event_t *e)
FSM_TRAN(s, &emm_state_attached);
break;
}
#if 0 /* This should be removed */
#if 0 /* TAU_COMPLETE should not be handled in this state */
case NAS_TRACKING_AREA_UPDATE_COMPLETE:
{
status_t rv;
@ -690,7 +724,8 @@ void emm_state_attached(fsm_t *s, event_t *e)
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = s1ap_send_initial_context_setup_request(mme_ue);
d_assert(rv == CORE_OK,, "s1ap send error");
d_assert(rv == CORE_OK,,
"s1ap_send_initial_context_setup_request() failed");
}
else
{
@ -699,8 +734,10 @@ void emm_state_attached(fsm_t *s, event_t *e)
enb_ue_t *enb_ue = NULL;
d_warn("Have PDN Connection in emm_state_attached");
nas_send_service_reject(mme_ue,
rv = nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_service_reject() failed");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, break, "No ENB UE context");
@ -708,13 +745,16 @@ void emm_state_attached(fsm_t *s, event_t *e)
rv = s1ap_send_ue_context_release_command(enb_ue,
S1ap_Cause_PR_nas, S1ap_CauseNas_normal_release,
S1AP_UE_CTX_REL_NO_ACTION, 0);
d_assert(rv == CORE_OK, break, "s1ap send failed");
d_assert(rv == CORE_OK,,
"s1ap_send_ue_context_release_command() failed");
}
else
{
d_warn("No PDN Connection in emm_state_attached");
nas_send_service_reject(mme_ue,
rv = nas_send_service_reject(mme_ue,
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_service_reject() failed");
FSM_TRAN(s, &emm_state_exception);
}
}
@ -748,7 +788,7 @@ void emm_state_attached(fsm_t *s, event_t *e)
rv = nas_send_emm_to_esm(
mme_ue, &mme_ue->pdn_connectivity_request);
d_assert(rv == CORE_OK,,
"nas_send_emm_to_esm failed");
"nas_send_emm_to_esm() failed");
FSM_TRAN(s, &emm_state_initial_context_setup);
}
else
@ -756,7 +796,8 @@ void emm_state_attached(fsm_t *s, event_t *e)
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK, ,, "gtp send failed");
d_assert(rv == CORE_OK,,
"mme_gtp_send_delete_all_sessions() failed");
}
else
{
@ -804,7 +845,8 @@ void emm_state_attached(fsm_t *s, event_t *e)
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
rv = nas_send_tau_accept(mme_ue);
d_assert(rv == CORE_OK,, "nas send failed");
d_assert(rv == CORE_OK,,
"nas_send_tau_accept() failed");
}
else
{
@ -817,7 +859,10 @@ void emm_state_attached(fsm_t *s, event_t *e)
{
d_warn("No PDN Connection "
"in emm_state_attached");
nas_send_tau_reject(mme_ue, EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
rv = nas_send_tau_reject(
mme_ue, EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
d_assert(rv == CORE_OK,,
"nas_send_tau_reject() failed");
FSM_TRAN(s, emm_state_exception);
}
}