From 6e6eb7a3553b2b6dc50ccc1f8b995ed84e4957ad Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 22 Jan 2018 11:40:26 +0900 Subject: [PATCH] refine code --- src/mme/emm_handler.c | 72 ------------------------- src/mme/emm_sm.c | 123 ++++++++++++++++++++++++++++-------------- 2 files changed, 84 insertions(+), 111 deletions(-) diff --git a/src/mme/emm_handler.c b/src/mme/emm_handler.c index 4bdf8d3269..fd0882424d 100644 --- a/src/mme/emm_handler.c +++ b/src/mme/emm_handler.c @@ -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; } diff --git a/src/mme/emm_sm.c b/src/mme/emm_sm.c index 871903738b..63ae0b0b62 100644 --- a/src/mme/emm_sm.c +++ b/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); } }