diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h index b48bc3c927..f38289aa99 100644 --- a/openair2/COMMON/rrc_messages_def.h +++ b/openair2/COMMON/rrc_messages_def.h @@ -9,13 +9,14 @@ MESSAGE_DEF(RRC_UE_EUTRA_CAPABILITY, MESSAGE_PRIORITY_MED_PLUS, RrcUeEutraCap //-------------------------------------------------------------------------------------------// // Messages from MAC layer -MESSAGE_DEF(RRC_MAC_SYNC_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacSyncInd, rrc_mac_sync_ind) MESSAGE_DEF(RRC_MAC_IN_SYNC_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacInSyncInd, rrc_mac_in_sync_ind) MESSAGE_DEF(RRC_MAC_OUT_OF_SYNC_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacOutOfSyncInd, rrc_mac_out_of_sync_ind) MESSAGE_DEF(RRC_MAC_BCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacBcchDataInd, rrc_mac_bcch_data_ind) MESSAGE_DEF(RRC_MAC_CCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacCcchDataInd, rrc_mac_ccch_data_ind) +MESSAGE_DEF(RRC_MAC_CCCH_SUCCESS_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacCcchSuccessInd, rrc_mac_ccch_success_ind) MESSAGE_DEF(RRC_MAC_MCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcMacMcchDataInd, rrc_mac_mcch_data_ind) //-------------------------------------------------------------------------------------------// -// Messages from PDCP layer +// Messages from/to PDCP layer +MESSAGE_DEF(RRC_DCCH_DATA_REQ, MESSAGE_PRIORITY_MED_PLUS, RrcDcchDataReq, rrc_dcch_data_req) MESSAGE_DEF(RRC_DCCH_DATA_IND, MESSAGE_PRIORITY_MED_PLUS, RrcDcchDataInd, rrc_dcch_data_ind) diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 528d97f37f..c81c0f2f50 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -13,24 +13,21 @@ //-------------------------------------------------------------------------------------------// // Defines to access message fields. -#define RRC_MAC_SYNC_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_sync_ind -#define RRC_MAC_IN_SYNC_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_in_sync_ind -#define RRC_MAC_OUT_OF_SYNC_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_out_of_sync_ind -#define RRC_MAC_BCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_bcch_data_ind -#define RRC_MAC_CCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_ccch_data_ind -#define RRC_MAC_MCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_mcch_data_ind +#define RRC_MAC_IN_SYNC_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_in_sync_ind +#define RRC_MAC_OUT_OF_SYNC_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_out_of_sync_ind +#define RRC_MAC_BCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_bcch_data_ind +#define RRC_MAC_CCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_ccch_data_ind +#define RRC_MAC_CCCH_SUCCESS_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_ccch_success_ind +#define RRC_MAC_MCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_mac_mcch_data_ind -#define RRC_DCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_dcch_data_ind +#define RRC_DCCH_DATA_REQ(mSGpTR) (mSGpTR)->msg.rrc_dcch_data_req +#define RRC_DCCH_DATA_IND(mSGpTR) (mSGpTR)->msg.rrc_dcch_data_ind typedef UE_EUTRA_Capability_t RrcUeEutraCapability; //-------------------------------------------------------------------------------------------// // Messages from MAC layer -typedef struct { - uint8_t status; -} RrcMacSyncInd; - typedef struct { uint32_t frame; uint16_t enb_index; @@ -47,6 +44,10 @@ typedef struct { typedef RrcMacBcchDataInd RrcMacCcchDataInd; +typedef struct { + uint8_t enb_index; +} RrcMacCcchSuccessInd; + typedef struct { uint32_t frame; uint32_t sdu_size; @@ -56,7 +57,18 @@ typedef struct { } RrcMacMcchDataInd; //-------------------------------------------------------------------------------------------// -// Messages from PDCP layer +// Messages from/to PDCP layer + +typedef struct { + uint32_t frame; + uint8_t enb_flag; + uint32_t rb_id; + uint32_t muip; + uint32_t confirmp; + uint32_t sdu_size; + uint8_t *sdu_p; + uint8_t mode; +} RrcDcchDataReq; typedef struct { uint32_t frame; diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index bd14ff4e9e..f09be1fb0e 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -56,6 +56,10 @@ # include "UTIL/OSA/osa_defs.h" #endif +#if defined(ENABLE_ITTI) +# include "intertask_interface.h" +#endif + #define PDCP_DATA_REQ_DEBUG 0 #define PDCP_DATA_IND_DEBUG 0 @@ -471,11 +475,16 @@ BOOL pdcp_data_ind(module_id_t module_id, u32_t frame, u8_t eNB_flag, rb_id_t rb //----------------------------------------------------------------------------- void pdcp_run (u32_t frame, u8 eNB_flag, u8 UE_index, u8 eNB_index) { //----------------------------------------------------------------------------- +#if defined(ENABLE_ITTI) + MessageDef *msg_p; + char *msg_name; + instance_t instance; +#endif #ifndef NAS_NETLINK #ifdef USER_MODE #define PDCP_DUMMY_BUFFER_SIZE 38 - unsigned char pdcp_dummy_buffer[PDCP_DUMMY_BUFFER_SIZE]; +// unsigned char pdcp_dummy_buffer[PDCP_DUMMY_BUFFER_SIZE]; #endif #endif // unsigned int diff, i, k, j; @@ -488,6 +497,40 @@ void pdcp_run (u32_t frame, u8 eNB_flag, u8 UE_index, u8 eNB_index) { vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_IN); +#if defined(ENABLE_ITTI) + do { + // Checks if a message has been sent to PDCP sub-task + itti_poll_msg (TASK_PDCP, INSTANCE_ALL, &msg_p); + + if (msg_p != NULL) { + msg_name = ITTI_MSG_NAME (msg_p); + instance = ITTI_MSG_INSTANCE (msg_p); + + switch (msg_p->header.messageId) { + case RRC_DCCH_DATA_REQ: + LOG_D(PDCP, "Received %s: instance %d, frame %d, eNB_flag %d, rb_id %d, muiP %d, confirmP %d, mode %d\n", msg_name, instance, + RRC_DCCH_DATA_REQ (msg_p).frame, RRC_DCCH_DATA_REQ (msg_p).enb_flag, RRC_DCCH_DATA_REQ (msg_p).rb_id, + RRC_DCCH_DATA_REQ (msg_p).muip, RRC_DCCH_DATA_REQ (msg_p).confirmp, RRC_DCCH_DATA_REQ (msg_p).mode); + + pdcp_data_req (instance, RRC_DCCH_DATA_REQ (msg_p).frame, RRC_DCCH_DATA_REQ (msg_p).enb_flag, + RRC_DCCH_DATA_REQ (msg_p).rb_id, RRC_DCCH_DATA_REQ (msg_p).muip, + RRC_DCCH_DATA_REQ (msg_p).confirmp, RRC_DCCH_DATA_REQ (msg_p).sdu_size, + RRC_DCCH_DATA_REQ (msg_p).sdu_p, RRC_DCCH_DATA_REQ (msg_p).mode); + + // Message buffer has been processed, free it now. + free (RRC_DCCH_DATA_REQ (msg_p).sdu_p); + break; + + default: + LOG_E(PDCP, "Received unexpected message %s\n", itti_get_message_name(msg_p->header.messageId)); + break; + } + + free (msg_p); + } + } while(msg_p != NULL); +#endif + /* if ((frame % 128) == 0) { for (i=0; i < NB_UE_INST; i++) { diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c index 6b88c5ac3c..7a63853c42 100644 --- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c +++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.c @@ -115,6 +115,17 @@ void rlcrrc_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int Srb_id, un #endif //CELLULAR } +/********************************************************************************************************************/ +u8 pdcp_rrc_data_req(u8 module_id, u32 frame, u8 eNB_flag, unsigned int rb_id, u32 muiP, u32 confirmP, + unsigned int sdu_buffer_size, u8* sdu_buffer, u8 mode) { + /********************************************************************************************************************/ +#ifdef CELLULAR + return pdcp_data_req( module_id, frame, eNB_flag, rb_id, muiP, confirmP, sdu_buffer_size, sdu_buffer, mode); +#else + return rrc_lite_data_req (module_id, frame, eNB_flag, rb_id, muiP, confirmP, sdu_buffer_size, sdu_buffer, mode); +#endif +} + /********************************************************************************************************************/ void pdcp_rrc_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int Srb_id, unsigned int Sdu_size,u8 *Buffer){ /********************************************************************************************************************/ diff --git a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h index 7019d0fd5a..a6dc85a2d1 100644 --- a/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h +++ b/openair2/RRC/L2_INTERFACE/openair_rrc_L2_interface.h @@ -40,16 +40,22 @@ #include "COMMON/mac_rrc_primitives.h" -s8 mac_rrc_data_req( u8 Mod_id, u32 frame, u16 Srb_id, u8 Nb_tb,u8 *Buffer,u8 eNB_flag,u8 eNB_index, u8 mbsfn_sync_area); -s8 mac_rrc_data_ind( u8 Mod_id, u32 frame, u16 Srb_id, u8 *Sdu, u16 Sdu_len,u8 eNB_flag, u8 eNB_index,u8 mbsfn_sync_area); -void mac_lite_sync_ind( u8 Mod_id, u8 status); -void mac_rrc_meas_ind(u8,MAC_MEAS_REQ_ENTRY*); -void rlcrrc_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag,unsigned int Rb_id, u32 sdu_size,u8 *Buffer); -void pdcp_rrc_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int Srb_id, unsigned int Sdu_size,u8 *Buffer); -void mac_out_of_sync_ind(u8 Mod_id,u32 frame,u16 CH_index); +s8 mac_rrc_data_req(u8 Mod_id, u32 frame, u16 Srb_id, u8 Nb_tb, u8 *Buffer, u8 eNB_flag, u8 eNB_index, + u8 mbsfn_sync_area); +s8 mac_rrc_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, u8 *Sdu, u16 Sdu_len, u8 eNB_flag, u8 eNB_index, + u8 mbsfn_sync_area); +void mac_lite_sync_ind(u8 Mod_id, u8 status); +void mac_rrc_meas_ind(u8, MAC_MEAS_REQ_ENTRY*); +void rlcrrc_data_ind(u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int Rb_id, u32 sdu_size, u8 *Buffer); + +u8 pdcp_rrc_data_req(u8 module_id, u32 frame, u8 eNB_flag, unsigned int rb_id, u32 muiP, u32 confirmP, + unsigned int sdu_buffer_size, u8* sdu_buffer, u8 mode); +void pdcp_rrc_data_ind(u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int Srb_id, unsigned int Sdu_size, u8 *Buffer); + +void mac_out_of_sync_ind(u8 Mod_id, u32 frame, u16 CH_index); char openair_rrc_eNB_init(u8 Mod_id); char openair_rrc_ue_init(u8 Mod_id, unsigned char eNB_index); -int mac_get_rrc_status(u8 Mod_id,u8 eNB_flag,u8 index); -void mac_in_sync_ind(u8 Mod_id,u32 frame, u16 eNB_index); +int mac_get_rrc_status(u8 Mod_id, u8 eNB_flag, u8 index); +void mac_in_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index); #endif diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c index c82e27ecc4..2654710704 100644 --- a/openair2/RRC/LITE/L2_interface.c +++ b/openair2/RRC/LITE/L2_interface.c @@ -44,6 +44,7 @@ //#include "openair_rrc_utils.h" //#include "openair_rrc_main.h" #include "UTIL/LOG/log.h" +#include "pdcp.h" #ifdef PHY_EMUL #include "SIMULATION/simulation_defs.h" @@ -61,15 +62,10 @@ extern UE_MAC_INST *UE_mac_inst; u32 mui=0; -s8 mac_rrc_lite_data_req( u8 Mod_id, - u32 frame, - u16 Srb_id, - u8 Nb_tb, - char *Buffer, - u8 eNB_flag, - u8 eNB_index, - u8 mbsfn_sync_area){ - +//-------------------------------------------------------------------------------------------// +s8 mac_rrc_lite_data_req(u8 Mod_id, u32 frame, u16 Srb_id, u8 Nb_tb, char *Buffer, u8 eNB_flag, u8 eNB_index, + u8 mbsfn_sync_area) { +//-------------------------------------------------------------------------------------------// SRB_INFO *Srb_info; u8 Sdu_size=0; @@ -182,8 +178,9 @@ s8 mac_rrc_lite_data_req( u8 Mod_id, return(0); } +//-------------------------------------------------------------------------------------------// s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, u8 *Sdu, u16 sdu_size,u8 eNB_flag,u8 eNB_index,u8 mbsfn_sync_area){ - +//-------------------------------------------------------------------------------------------// SRB_INFO *Srb_info; /* int si_window; @@ -333,27 +330,51 @@ s8 mac_rrc_lite_data_ind(u8 Mod_id, u32 frame, u16 Srb_id, u8 *Sdu, u16 sdu_size } //-------------------------------------------------------------------------------------------// +// this function is Not USED anymore void mac_lite_sync_ind(u8 Mod_id,u8 Status){ //-------------------------------------------------------------------------------------------// +} + +//-------------------------------------------------------------------------------------------// +u8 rrc_lite_data_req(u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int rb_id, u32 muiP, u32 confirmP, + unsigned int sdu_size, u8* Buffer, u8 mode) { +//-------------------------------------------------------------------------------------------// #if defined(ENABLE_ITTI) { MessageDef *message_p; + // Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling). + u8 *message_buffer; - message_p = itti_alloc_new_message (TASK_MAC, RRC_MAC_SYNC_IND); - RRC_MAC_SYNC_IND(message_p).status = Status; + message_buffer = malloc (sdu_size); + memcpy (message_buffer, Buffer, sdu_size); + + message_p = itti_alloc_new_message (TASK_RRC_UE, RRC_DCCH_DATA_REQ); + RRC_DCCH_DATA_REQ (message_p).frame = frame; + RRC_DCCH_DATA_REQ (message_p).enb_flag = eNB_flag; + RRC_DCCH_DATA_REQ (message_p).rb_id = rb_id; + RRC_DCCH_DATA_REQ (message_p).muip = muiP; + RRC_DCCH_DATA_REQ (message_p).confirmp = confirmP; + RRC_DCCH_DATA_REQ (message_p).sdu_size = sdu_size; + RRC_DCCH_DATA_REQ (message_p).sdu_p = message_buffer; + RRC_DCCH_DATA_REQ (message_p).mode = mode; + + + itti_send_msg_to_task (TASK_PDCP, Mod_id, message_p); + return TRUE; // TODO should be changed to a CNF message later, currently RRC lite does not used the returned value anyway. - itti_send_msg_to_task (TASK_RRC_UE, Mod_id, message_p); } +#else + return pdcp_data_req (Mod_id, frame, eNB_flag, rb_id, muiP, confirmP, sdu_size, Buffer, mode); #endif } -// this function is Not USED anymore +//-------------------------------------------------------------------------------------------// void rrc_lite_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag,u32 Srb_id, u32 sdu_size,u8 *Buffer){ - +//-------------------------------------------------------------------------------------------// u8 UE_index=(Srb_id-1)/NB_RB_MAX; u8 DCCH_index = Srb_id % NB_RB_MAX; - LOG_N(RRC,"[%s %d] Frame %d: received a DCCH %d message on SRB %d with Size %d (Deprecated function)\n", + LOG_N(RRC,"[%s %d] Frame %d: received a DCCH %d message on SRB %d with Size %d\n", (eNB_flag == 1)? "eNB": "UE", (eNB_flag == 1)? Mod_id : UE_index, frame, DCCH_index,Srb_id-1,sdu_size); @@ -387,7 +408,9 @@ void rrc_lite_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag,u32 Srb_id, u32 sdu_si } +//-------------------------------------------------------------------------------------------// void rrc_lite_in_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index) { +//-------------------------------------------------------------------------------------------// #if defined(ENABLE_ITTI) { MessageDef *message_p; @@ -404,8 +427,10 @@ void rrc_lite_in_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index) { UE_rrc_inst[Mod_id].Info[eNB_index].N311_cnt++; #endif } -void rrc_lite_out_of_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index){ +//-------------------------------------------------------------------------------------------// +void rrc_lite_out_of_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index){ +//-------------------------------------------------------------------------------------------// // rlc_info_t rlc_infoP; // rlc_infoP.rlc_mode=RLC_UM; @@ -431,16 +456,30 @@ void rrc_lite_out_of_sync_ind(u8 Mod_id, u32 frame, u16 eNB_index){ } +//-------------------------------------------------------------------------------------------// int mac_get_rrc_lite_status(u8 Mod_id,u8 eNB_flag,u8 index){ +//-------------------------------------------------------------------------------------------// if(eNB_flag == 1) return(eNB_rrc_inst[Mod_id].Info.Status[index]); else return(UE_rrc_inst[Mod_id].Info[index].State); } - +//-------------------------------------------------------------------------------------------// int mac_ue_ccch_success_ind(u8 Mod_id, u8 eNB_index) { +//-------------------------------------------------------------------------------------------// +#if defined(ENABLE_ITTI) + { + MessageDef *message_p; + + message_p = itti_alloc_new_message (TASK_MAC, RRC_MAC_CCCH_SUCCESS_IND); + RRC_MAC_CCCH_SUCCESS_IND (message_p).enb_index = eNB_index; + + itti_send_msg_to_task (TASK_RRC_UE, Mod_id - NB_eNB_INST, message_p); + } +#else // reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds) UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size=0; +#endif return 0; } diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.h b/openair2/RRC/LITE/MESSAGES/asn1_msg.h index 4ddd83fa1b..3e417215d5 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.h +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.h @@ -146,6 +146,7 @@ uint8_t do_MBSFNAreaConfig(LTE_DL_FRAME_PARMS *frame_parms, MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration); #endif +uint8_t do_MeasurementReport(uint8_t *buffer,int measid,int phy_id,int rsrp_s,int rsrq_s,long rsrp_t,long rsrq_t); OAI_UECapability_t *fill_ue_capability(); diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h index ff5e62df9c..c15f762124 100644 --- a/openair2/RRC/LITE/defs.h +++ b/openair2/RRC/LITE/defs.h @@ -469,6 +469,8 @@ void *rrc_ue_task(void *args_p); s8 mac_rrc_lite_data_req( u8 Mod_id, u32 frame, unsigned short Srb_id, u8 Nb_tb,char *Buffer,u8 eNB_flag, u8 eNB_index, u8 mbsfn_sync_area); s8 mac_rrc_lite_data_ind( u8 Mod_id, u32 frame, unsigned short Srb_id, u8 *Sdu, unsigned short Sdu_len,u8 eNB_flag,u8 eNB_index, u8 mbsfn_sync_area); void mac_sync_ind( u8 Mod_id, u8 status); +u8 rrc_lite_data_req(u8 Mod_id, u32 frame, u8 eNB_flag, unsigned int rb_id, u32 muiP, u32 confirmP, + unsigned int sdu_size, u8* Buffer, u8 mode); void rrc_lite_data_ind( u8 Mod_id, u32 frame, u8 eNB_flag, u32 Rb_id, u32 sdu_size,u8 *Buffer); void rrc_lite_out_of_sync_ind(u8 Mod_id, u32 frame, unsigned short eNB_index); diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index a137b77fb8..f9b2796bcb 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -43,7 +43,9 @@ #include "COMMON/mac_rrc_primitives.h" #include "UTIL/LOG/log.h" #include "UTIL/LOG/vcd_signal_dumper.h" -//#include "RRC/LITE/MESSAGES/asn1_msg.h" +#ifndef CELLULAR +#include "RRC/LITE/MESSAGES/asn1_msg.h" +#endif #include "RRCConnectionRequest.h" #include "RRCConnectionReconfiguration.h" #include "UL-CCCH-Message.h" @@ -73,6 +75,8 @@ # include "UTIL/OSA/osa_defs.h" #endif +#include "pdcp.h" + #ifdef PHY_EMUL extern EMULATION_VARS *Emul_vars; #endif @@ -244,7 +248,7 @@ void rrc_ue_generate_RRCConnectionSetupComplete(u8 Mod_id, u32 frame, u8 eNB_ind frame, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); // rrc_rlc_data_req(Mod_id+NB_eNB_INST,frame, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer); - pdcp_data_req(Mod_id+NB_eNB_INST,frame, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer,1); + pdcp_rrc_data_req (Mod_id + NB_eNB_INST, frame, 0, DCCH, rrc_mui++, 0, size, buffer, 1); } @@ -262,11 +266,11 @@ void rrc_ue_generate_RRCConnectionReconfigurationComplete(u8 Mod_id, u32 frame, frame, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); //rrc_rlc_data_req(Mod_id+NB_eNB_INST,frame, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer); - pdcp_data_req(Mod_id+NB_eNB_INST,frame, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer,1); + pdcp_rrc_data_req (Mod_id + NB_eNB_INST, frame, 0, DCCH, rrc_mui++, 0, size, buffer, 1); } -void rrc_ue_generate_MeasurementReport(u8 Mod_id,u8 eNB_index) { +void rrc_ue_generate_MeasurementReport(u8 Mod_id, u32 frame, u8 eNB_index) { u8 buffer[32], size; @@ -277,7 +281,7 @@ void rrc_ue_generate_MeasurementReport(u8 Mod_id,u8 eNB_index) { LOG_D(RLC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (RRCConnectionReconfigurationComplete to eNB %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", Mac_rlc_xface->frame, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); //rrc_rlc_data_req(Mod_id+NB_eNB_INST,DCCH,rrc_mui++,0,size,(char*)buffer); - pdcp_data_req(Mod_id+NB_eNB_INST,DCCH,rrc_mui++,0,size,(char*)buffer,1); + pdcp_rrc_data_req (Mod_id + NB_eNB_INST, frame, 0, DCCH, rrc_mui++, 0, size, buffer, 1); } /*------------------------------------------------------------------------------*/ @@ -287,7 +291,7 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){ //DL_CCCH_Message_t dlccchmsg; DL_CCCH_Message_t *dl_ccch_msg=NULL;//&dlccchmsg; asn_dec_rval_t dec_rval; - int i,rval=0; + int rval=0; vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_CCCH, VCD_FUNCTION_IN); @@ -423,7 +427,9 @@ s32 rrc_ue_establish_srb2(u8 Mod_id,u32 frame,u8 eNB_index, s32 rrc_ue_establish_drb(u8 Mod_id,u32 frame,u8 eNB_index, struct DRB_ToAddMod *DRB_config) { // add descriptor from RRC PDU +#ifdef NAS_NETLINK int oip_ifup=0,ip_addr_offset3=0,ip_addr_offset4=0; +#endif LOG_I(RRC,"[UE] Frame %d: processing RRCConnectionReconfiguration: reconfiguring DRB %ld/LCID %d\n", frame,DRB_config->drb_Identity,(int)*DRB_config->logicalChannelIdentity); @@ -484,7 +490,6 @@ void rrc_ue_process_measConfig(u8 Mod_id,u8 eNB_index,MeasConfig_t *measConfig) int i; long ind; MeasObjectToAddMod_t *measObj; - MeasObjectEUTRA_t *measObjd; if (measConfig->measObjectToRemoveList != NULL) { for (i=0;imeasObjectToRemoveList->list.count;i++) { @@ -839,7 +844,7 @@ void rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_ind // Establish DRBs if present if (radioResourceConfigDedicated->drb_ToAddModList) { - uint8_t *kUPenc; + uint8_t *kUPenc = NULL; #if defined(ENABLE_SECURITY) derive_key_up_enc(UE_rrc_inst[Mod_id].integrity_algorithm, @@ -927,7 +932,6 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id,uint32_t frame,SecurityMo UL_DCCH_Message_t ul_dcch_msg; // SecurityModeCommand_t SecurityModeCommand; - DL_DCCH_Message_t *dl_dcch_msg=NULL; uint8_t buffer[200]; int i, securityMode; @@ -1001,12 +1005,12 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id,uint32_t frame,SecurityMo #endif #ifdef USER_MODE - LOG_D(RRC,"securityModeComplete Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8); + LOG_D(RRC, "securityModeComplete Encoded %d bits (%d bytes)\n", enc_rval.encoded, (enc_rval.encoded+7)/8); #endif - for (i=0;i<(enc_rval.encoded+7)/8;i++) - LOG_T(RRC,"%02x.",buffer[i]); - LOG_T(RRC,"\n"); - pdcp_data_req(Mod_id+NB_eNB_INST,frame, 0 ,DCCH,rrc_mui++,0,(enc_rval.encoded+7)/8,(char*)buffer,1); + for (i = 0; i < (enc_rval.encoded + 7) / 8; i++) + LOG_T(RRC, "%02x.", buffer[i]); + LOG_T(RRC, "\n"); + pdcp_rrc_data_req (Mod_id + NB_eNB_INST, frame, 0, DCCH, rrc_mui++, 0, (enc_rval.encoded + 7) / 8, buffer, 1); } } @@ -1066,16 +1070,21 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id,uint32_t frame,UECapabili #ifdef USER_MODE LOG_D(RRC,"UECapabilityInformation Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8); #endif - for (i=0;i<(enc_rval.encoded+7)/8;i++) - LOG_T(RRC,"%02x.",buffer[i]); - LOG_T(RRC,"\n"); - pdcp_data_req(Mod_id+NB_eNB_INST,frame, 0 ,DCCH,rrc_mui++,0,(enc_rval.encoded+7)/8,(char*)buffer,1); - } + for (i = 0; i < (enc_rval.encoded + 7) / 8; i++) + LOG_T(RRC, "%02x.", buffer[i]); + LOG_T(RRC, "\n"); + pdcp_rrc_data_req (Mod_id + NB_eNB_INST, frame, 0, DCCH, rrc_mui++, 0, (enc_rval.encoded + 7) / 8, buffer, 1); + } } } } } +void rrc_ue_process_mobilityControlInfo(u8 Mod_id,u8 eNB_index,struct MobilityControlInfo *mobilityControlInfo) { + + +} + void rrc_ue_process_rrcConnectionReconfiguration(u8 Mod_id, u32 frame, RRCConnectionReconfiguration_t *rrcConnectionReconfiguration, u8 eNB_index) { @@ -1105,11 +1114,6 @@ void rrc_ue_process_rrcConnectionReconfiguration(u8 Mod_id, u32 frame, } // critical extensions present } -void rrc_ue_process_mobilityControlInfo(u8 Mod_id,u8 eNB_index,struct MobilityControlInfo *mobilityControlInfo) { - - -} - /*------------------------------------------------------------------------------------------*/ void rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index){ /*------------------------------------------------------------------------------------------*/ @@ -1117,7 +1121,7 @@ void rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index) //DL_DCCH_Message_t dldcchmsg; DL_DCCH_Message_t *dl_dcch_msg=NULL;//&dldcchmsg; // asn_dec_rval_t dec_rval; - int i; + // int i; if (Srb_id != 1) { LOG_E(RRC,"[UE %d] Frame %d: Received message on DL-DCCH (SRB1), should not have ...\n",Mod_id,frame); @@ -1217,7 +1221,7 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le SystemInformation_t **si=UE_rrc_inst[Mod_id].si[eNB_index]; asn_dec_rval_t dec_rval; uint32_t si_window;//, sib1_decoded=0, si_decoded=0; - int i; + // int i; vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN); @@ -1297,7 +1301,6 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le int decode_SIB1(u8 Mod_id,u8 eNB_index) { - asn_dec_rval_t dec_rval; SystemInformationBlockType1_t **sib1=&UE_rrc_inst[Mod_id].sib1[eNB_index]; int i; diff --git a/openair2/RRC/LITE/rrc_common.c b/openair2/RRC/LITE/rrc_common.c index 1e511e99f7..fc7a26224d 100644 --- a/openair2/RRC/LITE/rrc_common.c +++ b/openair2/RRC/LITE/rrc_common.c @@ -384,8 +384,7 @@ void *rrc_ue_task(void *args_p) { itti_mark_task_ready (TASK_RRC_UE); - while(1) - { + while(1) { // Wait for a message itti_receive_msg (TASK_RRC_UE, &msg_p); @@ -445,6 +444,14 @@ void *rrc_ue_task(void *args_p) { free (RRC_MAC_CCCH_DATA_IND (msg_p).sdu_p); break; + case RRC_MAC_CCCH_SUCCESS_IND: + LOG_D(RRC, "Received %s: instance %d, eNB %d\n", msg_name, instance, + RRC_MAC_CCCH_SUCCESS_IND (msg_p).enb_index); + + // reset the tx buffer to indicate RRC that ccch was successfully transmitted (for example if contention resolution succeeds) + UE_rrc_inst[instance].Srb0[RRC_MAC_CCCH_SUCCESS_IND (msg_p).enb_index].Tx_buffer.payload_size = 0; + break; + #ifdef Rel10 case RRC_MAC_MCCH_DATA_IND: LOG_D(RRC, "Received %s: instance %d, frame %d, eNB %d, mbsfn SA %d\n", msg_name, instance, @@ -477,6 +484,6 @@ void *rrc_ue_task(void *args_p) { } free (msg_p); -} + } } #endif diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 286d2a423a..fcef8c7b76 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -376,36 +376,36 @@ void *l2l1_task(void *args_p) { char fname[64], vname[64]; #if defined(ENABLE_ITTI) - MessageDef *message_p; + MessageDef *message_p; - itti_mark_task_ready (TASK_L2L1); + itti_mark_task_ready (TASK_L2L1); #endif for (frame = 0; frame < oai_emulation.info.n_frames; frame++) { #if defined(ENABLE_ITTI) - // Checks if a message has been sent to L2L1 task - itti_poll_msg(TASK_L2L1, INSTANCE_ALL, &message_p); + do { + // Checks if a message has been sent to L2L1 task + itti_poll_msg (TASK_L2L1, INSTANCE_ALL, &message_p); - if(message_p != NULL) - { - switch(message_p->header.messageId) - { - case TERMINATE_MESSAGE: - itti_exit_task(); - break; + if (message_p != NULL) { + switch (message_p->header.messageId) { + case TERMINATE_MESSAGE: + itti_exit_task (); + break; - case MESSAGE_TEST: - LOG_D(EMU, "Received %s\n", itti_get_message_name(message_p->header.messageId)); - break; + case MESSAGE_TEST: + LOG_D(EMU, "Received %s\n", itti_get_message_name(message_p->header.messageId)); + break; - default: - LOG_E(EMU, "Received unexpected message %s\n", itti_get_message_name(message_p->header.messageId)); - break; + default: + LOG_E(EMU, "Received unexpected message %s\n", itti_get_message_name(message_p->header.messageId)); + break; + } + + free (message_p); } - - free(message_p); - } + } while(message_p != NULL); #endif /*