mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-04 05:53:18 +00:00 
			
		
		
		
	MME_UE Context is not deleted even thought Detach Request(switch-off case)
This commit is contained in:
		@@ -28,6 +28,8 @@ extern "C" {
 | 
				
			|||||||
        memcpy((__dST)->buffer, (__sRC)->buffer, (__dST)->length); \
 | 
					        memcpy((__dST)->buffer, (__sRC)->buffer, (__dST)->length); \
 | 
				
			||||||
    } while(0)
 | 
					    } while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NAS_KSI_NO_KEY_IS_AVAILABLE             0x7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 9.9.2.0 Additional information
 | 
					/* 9.9.2.0 Additional information
 | 
				
			||||||
 * O TLV 3-n */
 | 
					 * O TLV 3-n */
 | 
				
			||||||
#define NAX_MAX_ADDITIONAL_INFORMATION_LEN 255
 | 
					#define NAX_MAX_ADDITIONAL_INFORMATION_LEN 255
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -309,8 +309,6 @@ status_t emm_build_tau_accept(pkbuf_t **emmbuf, mme_ue_t *mme_ue)
 | 
				
			|||||||
    /* Set T3412 */
 | 
					    /* Set T3412 */
 | 
				
			||||||
    tau_accept->presencemask |= 
 | 
					    tau_accept->presencemask |= 
 | 
				
			||||||
        NAS_TRACKING_AREA_UPDATE_ACCEPT_T3412_VALUE_PRESENT ;
 | 
					        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.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_DECI_HH;
 | 
				
			||||||
    tau_accept->t3412_value.value = 9;
 | 
					    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 */
 | 
					    /* Set EPS bearer context status */
 | 
				
			||||||
    tau_accept->presencemask |= 
 | 
					    tau_accept->presencemask |= 
 | 
				
			||||||
        NAS_TRACKING_AREA_UPDATE_ACCEPT_EPS_BEARER_CONTEXT_STATUS_PRESENT;
 | 
					        NAS_TRACKING_AREA_UPDATE_ACCEPT_EPS_BEARER_CONTEXT_STATUS_PRESENT;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    tau_accept->eps_bearer_context_status.length = 2;
 | 
					    tau_accept->eps_bearer_context_status.length = 2;
 | 
				
			||||||
    tau_accept->eps_bearer_context_status.ebi5 = 
 | 
					    tau_accept->eps_bearer_context_status.ebi5 = 
 | 
				
			||||||
        (mme_bearer_find_by_ue_ebi(mme_ue, 5) ? 1 : 0);
 | 
					        (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 */
 | 
					    /* Set T3402 */
 | 
				
			||||||
    tau_accept->presencemask |= 
 | 
					    tau_accept->presencemask |= 
 | 
				
			||||||
        NAS_TRACKING_AREA_UPDATE_ACCEPT_T3402_VALUE_PRESENT;
 | 
					        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.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_1_MM;
 | 
				
			||||||
    tau_accept->t3402_value.value = 12;
 | 
					    tau_accept->t3402_value.value = 12;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Set T3423 */
 | 
					    /* Set T3423 */
 | 
				
			||||||
    tau_accept->presencemask |= 
 | 
					    tau_accept->presencemask |= 
 | 
				
			||||||
        NAS_TRACKING_AREA_UPDATE_ACCEPT_T3423_VALUE_PRESENT;
 | 
					        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.unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_DECI_HH;
 | 
				
			||||||
    tau_accept->t3423_value.value = 9;
 | 
					    tau_accept->t3423_value.value = 9;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Set EPS network feature support */
 | 
					    /* Set EPS network feature support */
 | 
				
			||||||
    tau_accept->presencemask |= 
 | 
					    tau_accept->presencemask |= 
 | 
				
			||||||
        NAS_TRACKING_AREA_UPDATE_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT;
 | 
					        NAS_TRACKING_AREA_UPDATE_ACCEPT_EPS_NETWORK_FEATURE_SUPPORT_PRESENT;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    tau_accept->eps_network_feature_support.length = 1;
 | 
					    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;
 | 
					    tau_accept->eps_network_feature_support.ims_vops = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_assert(nas_security_encode(emmbuf, mme_ue, &message) == CORE_OK && 
 | 
					    d_assert(nas_security_encode(emmbuf, mme_ue, &message) == CORE_OK && 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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, return CORE_ERROR, "Null param");
 | 
				
			||||||
    d_assert(esm_message_container->length, 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
 | 
					     * ATTACH_REQUEST
 | 
				
			||||||
     *   Clear EBI generator
 | 
					     *   Clear EBI generator
 | 
				
			||||||
@@ -60,12 +63,6 @@ status_t emm_handle_attach_request(
 | 
				
			|||||||
        mme_ue->nhcc = 1;
 | 
					        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 */
 | 
					    /* Set EPS Attach Type */
 | 
				
			||||||
    memcpy(&mme_ue->nas_eps.attach, eps_attach_type,
 | 
					    memcpy(&mme_ue->nas_eps.attach, eps_attach_type,
 | 
				
			||||||
            sizeof(nas_eps_attach_type_t));
 | 
					            sizeof(nas_eps_attach_type_t));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -194,7 +194,6 @@ status_t nas_send_detach_accept(mme_ue_t *mme_ue)
 | 
				
			|||||||
    status_t rv;
 | 
					    status_t rv;
 | 
				
			||||||
    enb_ue_t *enb_ue = NULL;
 | 
					    enb_ue_t *enb_ue = NULL;
 | 
				
			||||||
    pkbuf_t *emmbuf = 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");
 | 
					    d_assert(mme_ue, return CORE_ERROR, "Null param");
 | 
				
			||||||
    enb_ue = mme_ue->enb_ue;
 | 
					    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);
 | 
					        rv = nas_send_to_downlink_nas_transport(mme_ue, emmbuf);
 | 
				
			||||||
        d_assert(rv == CORE_OK, return CORE_ERROR, "nas send failed");
 | 
					        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,
 | 
					    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");
 | 
					    d_assert(rv == CORE_OK, return CORE_ERROR, "s1ap send error");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return CORE_OK;
 | 
					    return CORE_OK;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -346,11 +346,13 @@ void s1ap_handle_initial_context_setup_failure(
 | 
				
			|||||||
    mme_ue = enb_ue->mme_ue;
 | 
					    mme_ue = enb_ue->mme_ue;
 | 
				
			||||||
    d_assert(mme_ue, return,);
 | 
					    d_assert(mme_ue, return,);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    d_error("[MME] Initial context setup failure : "
 | 
					    d_warn("[MME] Initial context setup failure");
 | 
				
			||||||
            "ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d] ENB[%s:%d]\n",
 | 
					    d_warn("    IP[%s] ENB_ID[%d]",
 | 
				
			||||||
            enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id,
 | 
					 | 
				
			||||||
            CORE_ADDR(enb->addr, buf), enb->enb_id);
 | 
					            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))
 | 
					    if (MME_HAVE_SGW_S11_PATH(mme_ue))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        rv = mme_gtp_send_delete_all_sessions(mme_ue);
 | 
					        rv = mme_gtp_send_delete_all_sessions(mme_ue);
 | 
				
			||||||
@@ -489,12 +491,13 @@ void s1ap_handle_ue_context_release_request(
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                d_error("[MME] UE Context release request : "
 | 
					                d_warn("[MME] UE Context release request");
 | 
				
			||||||
                        "RadioNetwork Cause[%d] "
 | 
					                d_warn("    IP[%s] ENB_ID[%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,
 | 
					 | 
				
			||||||
                        CORE_ADDR(enb->addr, buf), enb->enb_id);
 | 
					                        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))
 | 
					                if (MME_HAVE_SGW_S11_PATH(mme_ue))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    rv = mme_gtp_send_delete_all_sessions(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;
 | 
					            mme_ue_t *mme_ue = enb_ue->mme_ue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            d_error("[MME] UE Context release request : "
 | 
					            d_warn("[MME] UE Context release request");
 | 
				
			||||||
                    "Transport Cause[%d] "
 | 
					            d_warn("    IP[%s] ENB_ID[%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,
 | 
					 | 
				
			||||||
                    CORE_ADDR(enb->addr, buf), enb->enb_id);
 | 
					                    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))
 | 
					            if (MME_HAVE_SGW_S11_PATH(mme_ue))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                rv = mme_gtp_send_delete_all_sessions(mme_ue);
 | 
					                rv = mme_gtp_send_delete_all_sessions(mme_ue);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user