refine code
This commit is contained in:
parent
b678d9e9a2
commit
6e6eb7a355
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
123
src/mme/emm_sm.c
123
src/mme/emm_sm.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue