From 21ef0caf7ae6304f5c981ec6aa96fd0535a3fa8c Mon Sep 17 00:00:00 2001 From: winckel <winckel@eurecom.fr> Date: Wed, 8 Jan 2014 12:45:03 +0000 Subject: [PATCH] Created rrc_eNB_send_S1AP_UE_CAPABILITIES_IND() for RRC to forward UE capabilities to S1AP. git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4827 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair2/RRC/LITE/rrc_eNB.c | 7 +++++++ openair2/RRC/LITE/rrc_eNB_S1AP.c | 20 ++++++++++++++++++++ openair2/RRC/LITE/rrc_eNB_S1AP.h | 8 ++++++++ 3 files changed, 35 insertions(+) diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 358da43a94..5e9474f93f 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -2977,6 +2977,13 @@ int rrc_eNB_decode_dcch (u8 Mod_id, u32 frame, u8 Srb_id, u8 UE_index, (void *) UE_EUTRA_Capability); #endif +#if defined(ENABLE_USE_MME) + if (EPC_MODE_ENABLED == 1) + { + rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(Mod_id, UE_index, ul_dcch_msg); + } +#endif + rrc_eNB_generate_defaultRRCConnectionReconfiguration (Mod_id, frame, UE_index, eNB_rrc_inst[Mod_id].HO_flag); diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index 17c15e9d5b..54202b0f91 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -354,6 +354,26 @@ void rrc_eNB_send_S1AP_UPLINK_NAS(uint8_t mod_id, uint8_t ue_index, UL_DCCH_Mess } /*------------------------------------------------------------------------------*/ +void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(uint8_t mod_id, uint8_t ue_index, UL_DCCH_Message_t *ul_dcch_msg) { + UECapabilityInformation_t *ueCapabilityInformation = &ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation; + + if ((ueCapabilityInformation->criticalExtensions.present == UECapabilityInformation__criticalExtensions_PR_c1) + && (ueCapabilityInformation->criticalExtensions.choice.c1.present + == UECapabilityInformation__criticalExtensions__c1_PR_ueCapabilityInformation_r8) + && (ueCapabilityInformation->criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.count > 0)) { + MessageDef *msg_p; + msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_UE_CAPABILITIES_IND); + S1AP_UE_CAPABILITIES_IND (msg_p).eNB_ue_s1ap_id = eNB_rrc_inst[mod_id].Info.UE[ue_index].eNB_ue_s1ap_id; + S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.length = + ueCapabilityInformation->criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.array[0]->ueCapabilityRAT_Container.size; + S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.buffer = + ueCapabilityInformation->criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.array[0]->ueCapabilityRAT_Container.buf; + + itti_send_msg_to_task (TASK_S1AP, mod_id, msg_p); + } +} + + /*------------------------------------------------------------------------------*/ void rrc_eNB_send_S1AP_NAS_FIRST_REQ(uint8_t mod_id, uint8_t ue_index, RRCConnectionSetupComplete_r8_IEs_t *rrcConnectionSetupComplete) { #if defined(ENABLE_ITTI) diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.h b/openair2/RRC/LITE/rrc_eNB_S1AP.h index 1e5827ee13..d3a8f1da6d 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.h +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.h @@ -33,6 +33,14 @@ void rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(uint8_t Mod_id, uint8_t UE_ind */ void rrc_eNB_send_S1AP_UPLINK_NAS(uint8_t Mod_id, uint8_t UE_index, UL_DCCH_Message_t *ul_dcch_msg); +/*! \fn void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(uint8_t Mod_id, uint8_t UE_index, UL_DCCH_Message_t *ul_dcch_msg) + *\brief create a S1AP_UE_CAPABILITIES_IND to transfer a NAS message to S1AP. + *\param mod_id Instance ID of eNB. + *\param ue_index Instance ID of UE in the eNB. + *\param ul_dcch_msg The message receive by RRC holding the NAS message. + */ +void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(uint8_t mod_id, uint8_t ue_index, UL_DCCH_Message_t *ul_dcch_msg); + /*! \fn rrc_eNB_send_S1AP_NAS_FIRST_REQ(uint8_t Mod_id, uint8_t UE_index, RRCConnectionSetupComplete_r8_IEs_t *rrcConnectionSetupComplete) *\brief create a S1AP_NAS_FIRST_REQ to indicate that RRC has completed its first connection setup to S1AP. *\brief eventually forward a NAS message to S1AP. -- GitLab