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);
|
CLEAR_PAGING_INFO(mme_ue);
|
||||||
|
|
||||||
/* Free UeRadioCapability */
|
/* Free UeRadioCapability */
|
||||||
|
#if 0
|
||||||
if (mme_ue->radio_capa)
|
if (mme_ue->radio_capa)
|
||||||
{
|
{
|
||||||
S1AP_UERadioCapability_t *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(radio_capa->buf);
|
||||||
CORE_FREE(mme_ue->radio_capa);
|
CORE_FREE(mme_ue->radio_capa);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
S1AP_CLEAR_DATA(&mme_ue->ueRadioCapability);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Clear Transparent Container */
|
/* Clear Transparent Container */
|
||||||
S1AP_CLEAR_DATA(&mme_ue->container);
|
S1AP_CLEAR_DATA(&mme_ue->container);
|
||||||
|
|
|
@ -346,7 +346,11 @@ struct _mme_ue_t {
|
||||||
c_uint32_t max_paging_retry;
|
c_uint32_t max_paging_retry;
|
||||||
|
|
||||||
/* UE Radio Capability */
|
/* UE Radio Capability */
|
||||||
|
#if 0
|
||||||
void *radio_capa;
|
void *radio_capa;
|
||||||
|
#else
|
||||||
|
OCTET_STRING_t ueRadioCapability;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* S1AP Transparent Container */
|
/* S1AP Transparent Container */
|
||||||
OCTET_STRING_t container;
|
OCTET_STRING_t container;
|
||||||
|
|
|
@ -466,7 +466,6 @@ status_t s1ap_build_initial_context_setup_request(
|
||||||
sess = mme_sess_next(sess);
|
sess = mme_sess_next(sess);
|
||||||
}
|
}
|
||||||
|
|
||||||
d_trace(5, " UESecurityCapability\n");
|
|
||||||
UESecurityCapabilities->encryptionAlgorithms.size = 2;
|
UESecurityCapabilities->encryptionAlgorithms.size = 2;
|
||||||
UESecurityCapabilities->encryptionAlgorithms.buf =
|
UESecurityCapabilities->encryptionAlgorithms.buf =
|
||||||
core_calloc(UESecurityCapabilities->encryptionAlgorithms.size,
|
core_calloc(UESecurityCapabilities->encryptionAlgorithms.size,
|
||||||
|
@ -483,7 +482,6 @@ status_t s1ap_build_initial_context_setup_request(
|
||||||
UESecurityCapabilities->integrityProtectionAlgorithms.buf[0] =
|
UESecurityCapabilities->integrityProtectionAlgorithms.buf[0] =
|
||||||
(mme_ue->ue_network_capability.eia << 1);
|
(mme_ue->ue_network_capability.eia << 1);
|
||||||
|
|
||||||
d_trace(5, " UESecurityKey\n");
|
|
||||||
SecurityKey->size = SHA256_DIGEST_SIZE;
|
SecurityKey->size = SHA256_DIGEST_SIZE;
|
||||||
SecurityKey->buf =
|
SecurityKey->buf =
|
||||||
core_calloc(SecurityKey->size, sizeof(c_uint8_t));
|
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);
|
memcpy(SecurityKey->buf, mme_ue->kenb, SecurityKey->size);
|
||||||
|
|
||||||
/* Set UeRadioCapability if exists */
|
/* Set UeRadioCapability if exists */
|
||||||
|
#if 0
|
||||||
if (mme_ue->radio_capa)
|
if (mme_ue->radio_capa)
|
||||||
{
|
{
|
||||||
S1AP_UERadioCapability_t *UERadioCapability = NULL;
|
S1AP_UERadioCapability_t *UERadioCapability = NULL;
|
||||||
S1AP_UERadioCapability_t *radio_capa =
|
S1AP_UERadioCapability_t *radio_capa =
|
||||||
(S1AP_UERadioCapability_t *)mme_ue->radio_capa;
|
(S1AP_UERadioCapability_t *)mme_ue->radio_capa;
|
||||||
|
|
||||||
d_trace(5, " UERadioCapabiltiy\n");
|
|
||||||
ie = core_calloc(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
|
ie = core_calloc(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
|
||||||
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
|
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));
|
core_calloc(UERadioCapability->size, sizeof(c_uint8_t));
|
||||||
memcpy(UERadioCapability->buf, radio_capa->buf, radio_capa->size);
|
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);
|
rv = s1ap_encode_pdu(s1apbuf, &pdu);
|
||||||
s1ap_free_pdu(&pdu);
|
s1ap_free_pdu(&pdu);
|
||||||
|
|
||||||
d_trace(5, " Done\n");
|
|
||||||
if (rv != CORE_OK)
|
if (rv != CORE_OK)
|
||||||
{
|
{
|
||||||
d_error("s1ap_encode_pdu() failed");
|
d_error("s1ap_encode_pdu() failed");
|
||||||
|
|
|
@ -447,6 +447,7 @@ void s1ap_handle_ue_capability_info_indication(
|
||||||
|
|
||||||
if (enb_ue->mme_ue)
|
if (enb_ue->mme_ue)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
S1AP_UERadioCapability_t *radio_capa = NULL;
|
S1AP_UERadioCapability_t *radio_capa = NULL;
|
||||||
mme_ue_t *mme_ue = enb_ue->mme_ue;
|
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)",
|
d_assert(radio_capa->buf, return, "core_calloc error(size=%d)",
|
||||||
radio_capa->size);
|
radio_capa->size);
|
||||||
memcpy(radio_capa->buf, UERadioCapability->buf, 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(
|
S1AP_STORE_DATA(&mme_ue->container, Target_ToSource_TransparentContainer);
|
||||||
&mme_ue->container, Target_ToSource_TransparentContainer);
|
|
||||||
|
|
||||||
if (mme_ue_have_indirect_tunnel(mme_ue) == 1)
|
if (mme_ue_have_indirect_tunnel(mme_ue) == 1)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue