diff --git a/src/mme/mme_context.c b/src/mme/mme_context.c index 973d8dfea4..a22e107275 100644 --- a/src/mme/mme_context.c +++ b/src/mme/mme_context.c @@ -1988,6 +1988,7 @@ status_t mme_ue_remove(mme_ue_t *mme_ue) CLEAR_PAGING_INFO(mme_ue); /* Free UeRadioCapability */ +#if 0 if (mme_ue->radio_capa) { S1AP_UERadioCapability_t *radio_capa = @@ -1997,6 +1998,9 @@ status_t mme_ue_remove(mme_ue_t *mme_ue) CORE_FREE(radio_capa->buf); CORE_FREE(mme_ue->radio_capa); } +#else + S1AP_CLEAR_DATA(&mme_ue->ueRadioCapability); +#endif /* Clear Transparent Container */ S1AP_CLEAR_DATA(&mme_ue->container); diff --git a/src/mme/mme_context.h b/src/mme/mme_context.h index 04b323ecbd..523a951f44 100644 --- a/src/mme/mme_context.h +++ b/src/mme/mme_context.h @@ -346,7 +346,11 @@ struct _mme_ue_t { c_uint32_t max_paging_retry; /* UE Radio Capability */ +#if 0 void *radio_capa; +#else + OCTET_STRING_t ueRadioCapability; +#endif /* S1AP Transparent Container */ OCTET_STRING_t container; diff --git a/src/mme/s1ap_build.c b/src/mme/s1ap_build.c index 7d614b7a7a..cda3058fbe 100644 --- a/src/mme/s1ap_build.c +++ b/src/mme/s1ap_build.c @@ -466,7 +466,6 @@ status_t s1ap_build_initial_context_setup_request( sess = mme_sess_next(sess); } - d_trace(5, " UESecurityCapability\n"); UESecurityCapabilities->encryptionAlgorithms.size = 2; UESecurityCapabilities->encryptionAlgorithms.buf = core_calloc(UESecurityCapabilities->encryptionAlgorithms.size, @@ -483,7 +482,6 @@ status_t s1ap_build_initial_context_setup_request( UESecurityCapabilities->integrityProtectionAlgorithms.buf[0] = (mme_ue->ue_network_capability.eia << 1); - d_trace(5, " UESecurityKey\n"); SecurityKey->size = SHA256_DIGEST_SIZE; SecurityKey->buf = core_calloc(SecurityKey->size, sizeof(c_uint8_t)); @@ -491,13 +489,13 @@ status_t s1ap_build_initial_context_setup_request( memcpy(SecurityKey->buf, mme_ue->kenb, SecurityKey->size); /* Set UeRadioCapability if exists */ +#if 0 if (mme_ue->radio_capa) { S1AP_UERadioCapability_t *UERadioCapability = NULL; S1AP_UERadioCapability_t *radio_capa = (S1AP_UERadioCapability_t *)mme_ue->radio_capa; - d_trace(5, " UERadioCapabiltiy\n"); ie = core_calloc(1, sizeof(S1AP_InitialContextSetupRequestIEs_t)); ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie); @@ -513,12 +511,31 @@ status_t s1ap_build_initial_context_setup_request( core_calloc(UERadioCapability->size, sizeof(c_uint8_t)); memcpy(UERadioCapability->buf, radio_capa->buf, radio_capa->size); } +#else + if (mme_ue->ueRadioCapability.buf && mme_ue->ueRadioCapability.size) + { + S1AP_UERadioCapability_t *UERadioCapability = NULL; + + ie = core_calloc(1, sizeof(S1AP_InitialContextSetupRequestIEs_t)); + ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie); + + ie->id = S1AP_ProtocolIE_ID_id_UERadioCapability; + ie->criticality = S1AP_Criticality_ignore; + ie->value.present = + S1AP_InitialContextSetupRequestIEs__value_PR_UERadioCapability; + + UERadioCapability = &ie->value.choice.UERadioCapability; + + d_assert(UERadioCapability, return CORE_ERROR,); + s1ap_buffer_to_OCTET_STRING( + mme_ue->ueRadioCapability.buf, mme_ue->ueRadioCapability.size, + UERadioCapability); + } +#endif - d_trace(5, " Encode PDU\n"); rv = s1ap_encode_pdu(s1apbuf, &pdu); s1ap_free_pdu(&pdu); - d_trace(5, " Done\n"); if (rv != CORE_OK) { d_error("s1ap_encode_pdu() failed"); diff --git a/src/mme/s1ap_handler.c b/src/mme/s1ap_handler.c index 00c03a9a03..5add637616 100644 --- a/src/mme/s1ap_handler.c +++ b/src/mme/s1ap_handler.c @@ -447,6 +447,7 @@ void s1ap_handle_ue_capability_info_indication( if (enb_ue->mme_ue) { +#if 0 S1AP_UERadioCapability_t *radio_capa = NULL; mme_ue_t *mme_ue = enb_ue->mme_ue; @@ -470,6 +471,10 @@ void s1ap_handle_ue_capability_info_indication( d_assert(radio_capa->buf, return, "core_calloc error(size=%d)", radio_capa->size); memcpy(radio_capa->buf, UERadioCapability->buf, radio_capa->size); +#else + d_assert(UERadioCapability, return,); + S1AP_STORE_DATA(&enb_ue->mme_ue->ueRadioCapability, UERadioCapability); +#endif } } @@ -1626,8 +1631,7 @@ void s1ap_handle_handover_request_ack(mme_enb_t *enb, s1ap_message_t *message) } } - S1AP_STORE_DATA( - &mme_ue->container, Target_ToSource_TransparentContainer); + S1AP_STORE_DATA(&mme_ue->container, Target_ToSource_TransparentContainer); if (mme_ue_have_indirect_tunnel(mme_ue) == 1) {