Use common S1AP library for UERadioCapability
- Use S1AP_STORE/CLEAR macros for storing/retrieving UERadioCapability - UERadioCapability will be stored in UECapabilityInfoIndication - InitialContextSetupRequest use the stored UERadioCapability
This commit is contained in:
parent
2a1feae83f
commit
935e4b56ef
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue