diff --git a/lib/nas/nas_types.h b/lib/nas/nas_types.h index f3d32bb78..c14424b28 100644 --- a/lib/nas/nas_types.h +++ b/lib/nas/nas_types.h @@ -28,6 +28,8 @@ extern "C" { memcpy((__dST)->buffer, (__sRC)->buffer, (__dST)->length); \ } while(0) +#define NAS_KSI_NO_KEY_IS_AVAILABLE 0x7 + /* 9.9.2.0 Additional information * O TLV 3-n */ #define NAX_MAX_ADDITIONAL_INFORMATION_LEN 255 diff --git a/src/mme/emm_build.c b/src/mme/emm_build.c index 04d70d486..c27978abf 100644 --- a/src/mme/emm_build.c +++ b/src/mme/emm_build.c @@ -309,8 +309,6 @@ status_t emm_build_tau_accept(pkbuf_t **emmbuf, mme_ue_t *mme_ue) /* Set T3412 */ tau_accept->presencemask |= NAS_TRACKING_AREA_UPDATE_ACCEPT_T3412_VALUE_PRESENT ; - - /* FIXME: Use the value from configuration */ tau_accept->t3412_value.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_DECI_HH; tau_accept->t3412_value.value = 9; @@ -329,7 +327,6 @@ status_t emm_build_tau_accept(pkbuf_t **emmbuf, mme_ue_t *mme_ue) /* Set EPS bearer context status */ tau_accept->presencemask |= NAS_TRACKING_AREA_UPDATE_ACCEPT_EPS_BEARER_CONTEXT_STATUS_PRESENT; - tau_accept->eps_bearer_context_status.length = 2; tau_accept->eps_bearer_context_status.ebi5 = (mme_bearer_find_by_ue_ebi(mme_ue, 5) ? 1 : 0); @@ -342,26 +339,19 @@ status_t emm_build_tau_accept(pkbuf_t **emmbuf, mme_ue_t *mme_ue) /* Set T3402 */ tau_accept->presencemask |= NAS_TRACKING_AREA_UPDATE_ACCEPT_T3402_VALUE_PRESENT; - - /* FIXME: Use the value from configuration */ tau_accept->t3402_value.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_1_MM; tau_accept->t3402_value.value = 12; /* Set T3423 */ tau_accept->presencemask |= NAS_TRACKING_AREA_UPDATE_ACCEPT_T3423_VALUE_PRESENT; - - /* FIXME: Use the value from configuration */ tau_accept->t3423_value.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_DECI_HH; tau_accept->t3423_value.value = 9; /* Set EPS network feature support */ tau_accept->presencemask |= NAS_TRACKING_AREA_UPDATE_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT; - tau_accept->eps_network_feature_support.length = 1; - tau_accept->eps_network_feature_support.esr_ps = 1; - tau_accept->eps_network_feature_support.epc_lcs = 1; tau_accept->eps_network_feature_support.ims_vops = 1; d_assert(nas_security_encode(emmbuf, mme_ue, &message) == CORE_OK && diff --git a/src/mme/emm_handler.c b/src/mme/emm_handler.c index 0e9bd57d9..72f96238b 100644 --- a/src/mme/emm_handler.c +++ b/src/mme/emm_handler.c @@ -38,6 +38,9 @@ status_t emm_handle_attach_request( d_assert(esm_message_container, return CORE_ERROR, "Null param"); d_assert(esm_message_container->length, return CORE_ERROR, "Null param"); + d_trace(5, " KSI[%d]\n", eps_attach_type->nas_key_set_identifier); + if (eps_attach_type->nas_key_set_identifier == NAS_KSI_NO_KEY_IS_AVAILABLE) + CLEAR_SECURITY_CONTEXT(mme_ue); /* * ATTACH_REQUEST * Clear EBI generator @@ -60,12 +63,6 @@ status_t emm_handle_attach_request( mme_ue->nhcc = 1; } - d_trace(5, " KSI[%d]\n", eps_attach_type->nas_key_set_identifier); - if (eps_attach_type->nas_key_set_identifier == 7) - { - CLEAR_SECURITY_CONTEXT(mme_ue); - } - /* Set EPS Attach Type */ memcpy(&mme_ue->nas_eps.attach, eps_attach_type, sizeof(nas_eps_attach_type_t)); diff --git a/src/mme/nas_path.c b/src/mme/nas_path.c index 5b7520106..f6ca05d6f 100644 --- a/src/mme/nas_path.c +++ b/src/mme/nas_path.c @@ -194,7 +194,6 @@ status_t nas_send_detach_accept(mme_ue_t *mme_ue) status_t rv; enb_ue_t *enb_ue = NULL; pkbuf_t *emmbuf = NULL; - c_uint8_t ue_ctx_rel_action = S1AP_UE_CTX_REL_NO_ACTION; d_assert(mme_ue, return CORE_ERROR, "Null param"); enb_ue = mme_ue->enb_ue; @@ -210,13 +209,10 @@ status_t nas_send_detach_accept(mme_ue_t *mme_ue) rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf); d_assert(rv == CORE_OK, return CORE_ERROR, "nas send failed"); } - else - { - ue_ctx_rel_action = S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT; - } rv = s1ap_send_ue_context_release_command(enb_ue, - S1ap_Cause_PR_nas, S1ap_CauseNas_detach, ue_ctx_rel_action, 0); + S1ap_Cause_PR_nas, S1ap_CauseNas_detach, + S1AP_UE_CTX_REL_NO_ACTION, 0); d_assert(rv == CORE_OK, return CORE_ERROR, "s1ap send error"); return CORE_OK; diff --git a/src/mme/s1ap_handler.c b/src/mme/s1ap_handler.c index e3f1cf5a4..c31abe78e 100644 --- a/src/mme/s1ap_handler.c +++ b/src/mme/s1ap_handler.c @@ -346,11 +346,13 @@ void s1ap_handle_initial_context_setup_failure( mme_ue = enb_ue->mme_ue; d_assert(mme_ue, return,); - d_error("[MME] Initial context setup failure : " - "ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d] ENB[%s:%d]\n", - enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id, + d_warn("[MME] Initial context setup failure"); + d_warn(" IP[%s] ENB_ID[%d]", CORE_ADDR(enb->addr, buf), enb->enb_id); - + d_warn(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", + enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); + d_warn(" Cause[Group:%d Cause:%d]", + ies->cause.present, ies->cause.choice.radioNetwork); if (MME_HAVE_SGW_S11_PATH(mme_ue)) { rv = mme_gtp_send_delete_all_sessions(mme_ue); @@ -489,12 +491,13 @@ void s1ap_handle_ue_context_release_request( } else { - d_error("[MME] UE Context release request : " - "RadioNetwork Cause[%d] " - "ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d] ENB[%s:%d]\n", - ies->cause.choice.radioNetwork, - enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id, + d_warn("[MME] UE Context release request"); + d_warn(" IP[%s] ENB_ID[%d]", CORE_ADDR(enb->addr, buf), enb->enb_id); + d_warn(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", + enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); + d_warn(" Cause[RADIO_NETWORK Cause:%d]", + ies->cause.choice.radioNetwork); if (MME_HAVE_SGW_S11_PATH(mme_ue)) { rv = mme_gtp_send_delete_all_sessions(mme_ue); @@ -515,12 +518,13 @@ void s1ap_handle_ue_context_release_request( { mme_ue_t *mme_ue = enb_ue->mme_ue; - d_error("[MME] UE Context release request : " - "Transport Cause[%d] " - "ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d] ENB[%s:%d]\n", - ies->cause.choice.radioNetwork, - enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id, + d_warn("[MME] UE Context release request"); + d_warn(" IP[%s] ENB_ID[%d]", CORE_ADDR(enb->addr, buf), enb->enb_id); + d_warn(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]", + enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id); + d_warn(" Cause[TRANSPORT Cause:%d]", + ies->cause.choice.radioNetwork); if (MME_HAVE_SGW_S11_PATH(mme_ue)) { rv = mme_gtp_send_delete_all_sessions(mme_ue);