diff --git a/openair2/NAS/nas_ue_task.c b/openair2/NAS/nas_ue_task.c index e1cd6331d941389029f53b3ac50eb9bf3ef37506..156eac828c27f0bcdf328f0211c91c396ed9f596 100644 --- a/openair2/NAS/nas_ue_task.c +++ b/openair2/NAS/nas_ue_task.c @@ -60,6 +60,10 @@ void *nas_ue_task(void *args_p) { LOG_I(NAS, "[UE %d] Received %s\n", Mod_id, msg_name); break; + case NAS_DOWNLINK_DATA_IND: + LOG_I(NAS, "[UE %d] Received %s: UEid %u, lenght %u\n", Mod_id, msg_name, + NAS_DOWNLINK_DATA_IND (msg_p).UEid, NAS_DOWNLINK_DATA_IND (msg_p).nasMsg.length); + break; default: LOG_E(NAS, "[UE %d] Received unexpected message %s\n", Mod_id, msg_name); diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index 404f5d0aacadbacd6ebb022cebec4187b94f8bfb..8a126b8a147d512c063017969513ec82be70aff2 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -109,7 +109,7 @@ void init_SI_UE(u8 Mod_id,u8 eNB_index) { UE_rrc_inst[Mod_id].SI[eNB_index] = (u8 *)malloc16(64); for (i=0;i<NB_CNX_UE;i++) { - UE_rrc_inst[Mod_id].si[eNB_index][i] = (SystemInformation_t *)malloc16(sizeof(SystemInformation_t)); + UE_rrc_inst[Mod_id].si[eNB_index][i] = (SystemInformation_t *)malloc16(sizeof(SystemInformation_t)); } UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status = 0; @@ -134,8 +134,8 @@ static void openair_rrc_lite_ue_init_security(u8 Mod_id) { #if defined(ENABLE_SECURITY) - uint8_t *kRRCenc; - uint8_t *kRRCint; +// uint8_t *kRRCenc; +// uint8_t *kRRCint; char ascii_buffer[65]; uint8_t i; @@ -145,8 +145,7 @@ void openair_rrc_lite_ue_init_security(u8 Mod_id) sprintf(&ascii_buffer[2 * i], "%02X", UE_rrc_inst[Mod_id].kenb[i]); } - LOG_T(RRC, "[OSA][UE %02d] kenb = %s\n", - Mod_id, ascii_buffer); + LOG_T(RRC, "[OSA][UE %02d] kenb = %s\n", Mod_id, ascii_buffer); #endif } @@ -196,7 +195,6 @@ char openair_rrc_lite_ue_init(u8 Mod_id, unsigned char eNB_index){ return 0; } - /*------------------------------------------------------------------------------*/ void rrc_ue_generate_RRCConnectionRequest(u8 Mod_id, u32 frame, u8 eNB_index){ /*------------------------------------------------------------------------------*/ @@ -209,10 +207,10 @@ void rrc_ue_generate_RRCConnectionRequest(u8 Mod_id, u32 frame, u8 eNB_index){ // Generate random byte stream for contention resolution for (i=0;i<6;i++) { #ifdef SMBV - // if SMBV is configured the contention resolution needs to be fix for the connection procedure to succeed - rv[i]=i; + // if SMBV is configured the contention resolution needs to be fix for the connection procedure to succeed + rv[i]=i; #else - rv[i]=taus()&0xff; + rv[i]=taus()&0xff; #endif LOG_T(RRC,"%x.",rv[i]); } @@ -220,7 +218,7 @@ void rrc_ue_generate_RRCConnectionRequest(u8 Mod_id, u32 frame, u8 eNB_index){ UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size = do_RRCConnectionRequest((u8 *)UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.Payload,rv); LOG_I(RRC,"[UE %d] : Frame %d, Logical Channel UL-CCCH (SRB0), Generating RRCConnectionRequest (bytes %d, eNB %d)\n", - Mod_id, frame, UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size, eNB_index); + Mod_id, frame, UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size, eNB_index); for (i=0;i<UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.payload_size;i++) { LOG_T(RRC,"%x.",UE_rrc_inst[Mod_id].Srb0[eNB_index].Tx_buffer.Payload[i]); @@ -278,7 +276,7 @@ void rrc_ue_generate_RRCConnectionSetupComplete(u8 Mod_id, u32 frame, u8 eNB_ind size = do_RRCConnectionSetupComplete(buffer, Transaction_id, sizeof(nas_attach_req_guti), nas_attach_req_guti); LOG_I(RRC,"[UE %d][RAPROC] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCConnectionSetupComplete (bytes%d, eNB %d)\n", - Mod_id,frame, size, eNB_index); + Mod_id,frame, size, eNB_index); LOG_D(RLC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (RRCConnectionSetupComplete to eNB %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", frame, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); @@ -288,8 +286,6 @@ void rrc_ue_generate_RRCConnectionSetupComplete(u8 Mod_id, u32 frame, u8 eNB_ind } - - void rrc_ue_generate_RRCConnectionReconfigurationComplete(u8 Mod_id, u32 frame, u8 eNB_index, uint8_t Transaction_id) { u8 buffer[32], size; @@ -297,9 +293,9 @@ void rrc_ue_generate_RRCConnectionReconfigurationComplete(u8 Mod_id, u32 frame, size = do_RRCConnectionReconfigurationComplete(buffer, Transaction_id); LOG_I(RRC,"[UE %d] Frame %d : Logical Channel UL-DCCH (SRB1), Generating RRCConnectionReconfigurationComplete (bytes %d, eNB_index %d)\n", - Mod_id,frame, size, eNB_index); + Mod_id,frame, size, 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", - frame, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); + 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_rrc_data_req (Mod_id + NB_eNB_INST, frame, 0, DCCH, rrc_mui++, 0, size, buffer, 1); @@ -319,13 +315,13 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){ //memset(dl_ccch_msg,0,sizeof(DL_CCCH_Message_t)); // LOG_D(RRC,"[UE %d] Decoding DL-CCCH message (%d bytes), State %d\n",Mod_id,Srb_info->Rx_buffer.payload_size, - // UE_rrc_inst[Mod_id].Info[eNB_index].State); + // UE_rrc_inst[Mod_id].Info[eNB_index].State); dec_rval = uper_decode(NULL, - &asn_DEF_DL_CCCH_Message, - (void**)&dl_ccch_msg, - (uint8_t*)Srb_info->Rx_buffer.Payload, - 100,0,0); + &asn_DEF_DL_CCCH_Message, + (void**)&dl_ccch_msg, + (uint8_t*)Srb_info->Rx_buffer.Payload, + 100,0,0); #ifdef XER_PRINT xer_fprint(stdout,&asn_DEF_DL_CCCH_Message,(void*)dl_ccch_msg); @@ -432,9 +428,8 @@ int rrc_ue_decode_ccch(u8 Mod_id, u32 frame, SRB_INFO *Srb_info, u8 eNB_index){ return rval; } - -s32 rrc_ue_establish_srb1(u8 Mod_id,u32 frame,u8 eNB_index, - struct SRB_ToAddMod *SRB_config) { // add descriptor from RRC PDU +s32 rrc_ue_establish_srb1(u8 Mod_id,u32 frame,u8 eNB_index, struct SRB_ToAddMod *SRB_config) { + // add descriptor from RRC PDU u8 lchan_id = DCCH; @@ -458,8 +453,8 @@ s32 rrc_ue_establish_srb1(u8 Mod_id,u32 frame,u8 eNB_index, return(0); } -s32 rrc_ue_establish_srb2(u8 Mod_id,u32 frame,u8 eNB_index, - struct SRB_ToAddMod *SRB_config) { // add descriptor from RRC PDU +s32 rrc_ue_establish_srb2(u8 Mod_id,u32 frame,u8 eNB_index, struct SRB_ToAddMod *SRB_config) { + // add descriptor from RRC PDU u8 lchan_id = DCCH1; @@ -484,20 +479,20 @@ 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 + 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); + frame,DRB_config->drb_Identity,(int)*DRB_config->logicalChannelIdentity); /* rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, - (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity, UNDEF_SECURITY_MODE); + (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity, UNDEF_SECURITY_MODE); rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD, - (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity, - RADIO_ACCESS_BEARER,Rlc_info_um); + (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity, + RADIO_ACCESS_BEARER,Rlc_info_um); */ #ifdef NAS_NETLINK # ifdef OAI_EMU @@ -509,27 +504,27 @@ s32 rrc_ue_establish_drb(u8 Mod_id,u32 frame,u8 eNB_index, # endif # if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) LOG_I(OIP,"[UE %d] trying to bring up the OAI interface oai%d, IP 10.0.%d.%d\n", Mod_id, ip_addr_offset3+Mod_id, - ip_addr_offset3+Mod_id+1,ip_addr_offset4+Mod_id+1); + ip_addr_offset3+Mod_id+1,ip_addr_offset4+Mod_id+1); oip_ifup=nas_config(ip_addr_offset3+Mod_id, // interface_id - ip_addr_offset3+Mod_id+1, // third_octet - ip_addr_offset4+Mod_id+1); // fourth_octet + ip_addr_offset3+Mod_id+1, // third_octet + ip_addr_offset4+Mod_id+1); // fourth_octet if (oip_ifup == 0 ){ // interface is up --> send a config the DRB # ifdef OAI_EMU oai_emulation.info.oai_ifup[Mod_id]=1; # endif LOG_I(OIP,"[UE %d] Config the oai%d to send/receive pkt on DRB %d to/from the protocol stack\n", - Mod_id, - ip_addr_offset3+Mod_id, - (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity); - - rb_conf_ipv4(0,//add - Mod_id,//cx align with the UE index - ip_addr_offset3+Mod_id,//inst num_enb+ue_index - (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity,//rb - 0,//dscp - ipv4_address(ip_addr_offset3+Mod_id+1,ip_addr_offset4+Mod_id+1),//saddr - ipv4_address(ip_addr_offset3+Mod_id+1,eNB_index+1));//daddr - LOG_D(RRC,"[UE %d] State = Attached (eNB %d)\n",Mod_id,eNB_index); + Mod_id, + ip_addr_offset3+Mod_id, + (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity); + + rb_conf_ipv4(0,//add + Mod_id,//cx align with the UE index + ip_addr_offset3+Mod_id,//inst num_enb+ue_index + (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity,//rb + 0,//dscp + ipv4_address(ip_addr_offset3+Mod_id+1,ip_addr_offset4+Mod_id+1),//saddr + ipv4_address(ip_addr_offset3+Mod_id+1,eNB_index+1));//daddr + LOG_D(RRC,"[UE %d] State = Attached (eNB %d)\n",Mod_id,eNB_index); } # else # ifdef OAI_EMU @@ -562,53 +557,51 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * ind = measConfig->measObjectToAddModList->list.array[i]->measObjectId; if (UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1]) { - LOG_D(RRC,"Modifying measurement object %d\n",ind); - memcpy((char*)UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1], - (char*)measObj, - sizeof(MeasObjectToAddMod_t)); + LOG_D(RRC,"Modifying measurement object %d\n",ind); + memcpy((char*)UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1], + (char*)measObj, + sizeof(MeasObjectToAddMod_t)); } else { - LOG_I(RRC,"Adding measurement object %d\n",ind); - if (measObj->measObject.present == MeasObjectToAddMod__measObject_PR_measObjectEUTRA) { - LOG_I(RRC,"EUTRA Measurement : carrierFreq %d, allowedMeasBandwidth %d,presenceAntennaPort1 %d, neighCellConfig %d\n", - measObj->measObject.choice.measObjectEUTRA.carrierFreq, - measObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth, - measObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1, - measObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0]); - UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1]=measObj; - - - } + LOG_I(RRC,"Adding measurement object %d\n",ind); + if (measObj->measObject.present == MeasObjectToAddMod__measObject_PR_measObjectEUTRA) { + LOG_I(RRC,"EUTRA Measurement : carrierFreq %d, allowedMeasBandwidth %d,presenceAntennaPort1 %d, neighCellConfig %d\n", + measObj->measObject.choice.measObjectEUTRA.carrierFreq, + measObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth, + measObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1, + measObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0]); + UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1]=measObj; + } } } rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - (struct PhysicalConfigDedicated *)NULL, - UE_rrc_inst[Mod_id].MeasObj[eNB_index], - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - (TDD_Config_t *)NULL, - (MobilityControlInfo_t *)NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -#ifdef Rel10 - , - 0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + (RadioResourceConfigCommonSIB_t *)NULL, + (struct PhysicalConfigDedicated *)NULL, + UE_rrc_inst[Mod_id].MeasObj[eNB_index], + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + (TDD_Config_t *)NULL, + (MobilityControlInfo_t *)NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +#ifdef Rel10 + , + 0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - , - 0, - 0 + , + 0, + 0 #endif - ); + ); } if (measConfig->reportConfigToRemoveList != NULL) { for (i=0;i<measConfig->reportConfigToRemoveList->list.count;i++) { @@ -621,14 +614,14 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * for (i=0;i<measConfig->reportConfigToAddModList->list.count;i++) { ind = measConfig->reportConfigToAddModList->list.array[i]->reportConfigId; if (UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1]) { - LOG_I(RRC,"Modifying Report Configuration %d\n",ind-1); - memcpy((char*)UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1], - (char*)measConfig->reportConfigToAddModList->list.array[i], - sizeof(ReportConfigToAddMod_t)); + LOG_I(RRC,"Modifying Report Configuration %d\n",ind-1); + memcpy((char*)UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1], + (char*)measConfig->reportConfigToAddModList->list.array[i], + sizeof(ReportConfigToAddMod_t)); } else { - LOG_D(RRC,"Adding Report Configuration %d %p \n",ind-1,measConfig->reportConfigToAddModList->list.array[i]); - UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1] = measConfig->reportConfigToAddModList->list.array[i]; + LOG_D(RRC,"Adding Report Configuration %d %p \n",ind-1,measConfig->reportConfigToAddModList->list.array[i]); + UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1] = measConfig->reportConfigToAddModList->list.array[i]; } } } @@ -637,8 +630,8 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * if (UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]) { LOG_D(RRC,"Modifying Quantity Configuration \n"); memcpy((char*)UE_rrc_inst[Mod_id].QuantityConfig[eNB_index], - (char*)measConfig->quantityConfig, - sizeof(QuantityConfig_t)); + (char*)measConfig->quantityConfig, + sizeof(QuantityConfig_t)); } else { LOG_D(RRC,"Adding Quantity configuration\n"); @@ -657,14 +650,14 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * for (i=0;i<measConfig->measIdToAddModList->list.count;i++) { ind = measConfig->measIdToAddModList->list.array[i]->measId; if (UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1]) { - LOG_D(RRC,"Modifying Measurement ID %d\n",ind-1); - memcpy((char*)UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1], - (char*)measConfig->measIdToAddModList->list.array[i], - sizeof(MeasIdToAddMod_t)); + LOG_D(RRC,"Modifying Measurement ID %d\n",ind-1); + memcpy((char*)UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1], + (char*)measConfig->measIdToAddModList->list.array[i], + sizeof(MeasIdToAddMod_t)); } else { - LOG_D(RRC,"Adding Measurement ID %d %p\n",ind-1,measConfig->measIdToAddModList->list.array[i]); - UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1] = measConfig->measIdToAddModList->list.array[i]; + LOG_D(RRC,"Adding Measurement ID %d %p\n",ind-1,measConfig->measIdToAddModList->list.array[i]); + UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1] = measConfig->measIdToAddModList->list.array[i]; } } } @@ -672,8 +665,8 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * if (measConfig->measGapConfig !=NULL) { if (UE_rrc_inst[Mod_id].measGapConfig[eNB_index]) { memcpy((char*)UE_rrc_inst[Mod_id].measGapConfig[eNB_index], - (char*)measConfig->measGapConfig, - sizeof(MeasGapConfig_t)); + (char*)measConfig->measGapConfig, + sizeof(MeasGapConfig_t)); } else { UE_rrc_inst[Mod_id].measGapConfig[eNB_index] = measConfig->measGapConfig; @@ -684,8 +677,8 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * if (UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]) { LOG_I(RRC,"Modifying Quantity Configuration \n"); memcpy((char*)UE_rrc_inst[Mod_id].QuantityConfig[eNB_index], - (char*)measConfig->quantityConfig, - sizeof(QuantityConfig_t)); + (char*)measConfig->quantityConfig, + sizeof(QuantityConfig_t)); } else { LOG_I(RRC,"Adding Quantity configuration\n"); @@ -696,11 +689,11 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * UE_rrc_inst[Mod_id].filter_coeff_rsrq = 1./pow(2,(*UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRQ)/4); LOG_I(RRC,"[UE %d] set rsrp-coeff for eNB %d: %d rsrq-coeff: %d rsrp_factor: %f rsrq_factor: %f \n", - Mod_id, eNB_index, // UE_rrc_inst[Mod_id].Info[eNB_index].UE_index, - *UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRP, - *UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRQ, - UE_rrc_inst[Mod_id].filter_coeff_rsrp, UE_rrc_inst[Mod_id].filter_coeff_rsrp, - UE_rrc_inst[Mod_id].filter_coeff_rsrp, UE_rrc_inst[Mod_id].filter_coeff_rsrq); + Mod_id, eNB_index, // UE_rrc_inst[Mod_id].Info[eNB_index].UE_index, + *UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRP, + *UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRQ, + UE_rrc_inst[Mod_id].filter_coeff_rsrp, UE_rrc_inst[Mod_id].filter_coeff_rsrp, + UE_rrc_inst[Mod_id].filter_coeff_rsrp, UE_rrc_inst[Mod_id].filter_coeff_rsrq); } if (measConfig->s_Measure != NULL) { @@ -713,14 +706,13 @@ void rrc_ue_process_measConfig(u8 Mod_id,u32 frame, u8 eNB_index,MeasConfig_t * else UE_rrc_inst[Mod_id].speedStatePars = measConfig->speedStatePars; LOG_I(RRC,"[UE %d] Configuring mobility optimization params for UE %d \n", - Mod_id,UE_rrc_inst[Mod_id].Info[0].UE_index); + Mod_id,UE_rrc_inst[Mod_id].Info[0].UE_index); } } - -void +void rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, - RadioResourceConfigDedicated_t *radioResourceConfigDedicated) { + RadioResourceConfigDedicated_t *radioResourceConfigDedicated) { long SRB_id,DRB_id; int i,cnt; @@ -734,7 +726,7 @@ rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, if (radioResourceConfigDedicated->physicalConfigDedicated) { if (UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index]) { memcpy((char*)UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index],(char*)radioResourceConfigDedicated->physicalConfigDedicated, - sizeof(struct PhysicalConfigDedicated)); + sizeof(struct PhysicalConfigDedicated)); } else { @@ -745,11 +737,11 @@ rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, if (radioResourceConfigDedicated->mac_MainConfig) { if (radioResourceConfigDedicated->mac_MainConfig->present == RadioResourceConfigDedicated__mac_MainConfig_PR_explicitValue) { if (UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index]) { - memcpy((char*)UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index],(char*)&radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue, - sizeof(MAC_MainConfig_t)); + memcpy((char*)UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index],(char*)&radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue, + sizeof(MAC_MainConfig_t)); } else - UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index] = &radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue; + UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index] = &radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue; } } @@ -757,7 +749,7 @@ rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, if (radioResourceConfigDedicated->sps_Config) { if (UE_rrc_inst[Mod_id].sps_Config[eNB_index]) { memcpy(UE_rrc_inst[Mod_id].sps_Config[eNB_index],radioResourceConfigDedicated->sps_Config, - sizeof(struct SPS_Config)); + sizeof(struct SPS_Config)); } else { UE_rrc_inst[Mod_id].sps_Config[eNB_index] = radioResourceConfigDedicated->sps_Config; @@ -766,19 +758,19 @@ rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, #ifdef CBA if (radioResourceConfigDedicated->cba_RNTI_vlola) { cba_RNTI = (uint16_t) (((radioResourceConfigDedicated->cba_RNTI_vlola->buf[1]&0xff) << 8) | - (radioResourceConfigDedicated->cba_RNTI_vlola->buf[0]&0xff)); + (radioResourceConfigDedicated->cba_RNTI_vlola->buf[0]&0xff)); for (i=0 ; i< NUM_MAX_CBA_GROUP; i++) { if (UE_rrc_inst[Mod_id].cba_rnti[i] == cba_RNTI ) { - cba_found=1; - break; + cba_found=1; + break; } else if (UE_rrc_inst[Mod_id].cba_rnti[i] == 0 ) - break; + break; } if (cba_found==0) { UE_rrc_inst[Mod_id].num_active_cba_groups++; UE_rrc_inst[Mod_id].cba_rnti[i]=cba_RNTI; LOG_D(RRC, "[UE %d] Frame %d: radioResourceConfigDedicated reveived CBA_RNTI = %x for group %d from eNB %d \n", - Mod_id,frame, UE_rrc_inst[Mod_id].cba_rnti[i], i, eNB_index); + Mod_id,frame, UE_rrc_inst[Mod_id].cba_rnti[i], i, eNB_index); } } #endif @@ -806,133 +798,132 @@ rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, kRRCint, NULL #ifdef Rel10 - ,(PMCH_InfoList_r9_t *)NULL + ,(PMCH_InfoList_r9_t *)NULL #endif - ); + ); // Refresh SRBs rrc_rlc_config_asn1_req(NB_eNB_INST+Mod_id,frame,0,eNB_index, - radioResourceConfigDedicated->srb_ToAddModList, - (DRB_ToAddModList_t*)NULL, - (DRB_ToReleaseList_t*)NULL + radioResourceConfigDedicated->srb_ToAddModList, + (DRB_ToAddModList_t*)NULL, + (DRB_ToReleaseList_t*)NULL #ifdef Rel10 - ,(PMCH_InfoList_r9_t *)NULL + ,(PMCH_InfoList_r9_t *)NULL #endif - ); + ); for (cnt=0;cnt<radioResourceConfigDedicated->srb_ToAddModList->list.count;cnt++) { SRB_id = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]->srb_Identity; LOG_D(RRC,"[UE %d]: Frame %d SRB config cnt %d (SRB%ld)\n",Mod_id,frame,cnt,SRB_id); if (SRB_id == 1) { - if (UE_rrc_inst[Mod_id].SRB1_config[eNB_index]) { - memcpy(UE_rrc_inst[Mod_id].SRB1_config[eNB_index],radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt], - sizeof(struct SRB_ToAddMod)); - } - else { - UE_rrc_inst[Mod_id].SRB1_config[eNB_index] = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]; - - rrc_ue_establish_srb1(Mod_id,frame,eNB_index,radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]); - if (UE_rrc_inst[Mod_id].SRB1_config[eNB_index]->logicalChannelConfig) { - if (UE_rrc_inst[Mod_id].SRB1_config[eNB_index]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { - SRB1_logicalChannelConfig = &UE_rrc_inst[Mod_id].SRB1_config[eNB_index]->logicalChannelConfig->choice.explicitValue; - } - else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - } - else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } + if (UE_rrc_inst[Mod_id].SRB1_config[eNB_index]) { + memcpy(UE_rrc_inst[Mod_id].SRB1_config[eNB_index],radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt], + sizeof(struct SRB_ToAddMod)); + } + else { + UE_rrc_inst[Mod_id].SRB1_config[eNB_index] = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]; + rrc_ue_establish_srb1(Mod_id,frame,eNB_index,radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]); + if (UE_rrc_inst[Mod_id].SRB1_config[eNB_index]->logicalChannelConfig) { + if (UE_rrc_inst[Mod_id].SRB1_config[eNB_index]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { + SRB1_logicalChannelConfig = &UE_rrc_inst[Mod_id].SRB1_config[eNB_index]->logicalChannelConfig->choice.explicitValue; + } + else { + SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; + } + } + else { + SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; + } LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 eNB %d) --->][MAC_UE][MOD %02d][]\n", frame, Mod_id, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], - (MeasObjectToAddMod_t **)NULL, - UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], - 1, - SRB1_logicalChannelConfig, - (MeasGapConfig_t *)NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + rrc_mac_config_req(Mod_id,0,0,eNB_index, + (RadioResourceConfigCommonSIB_t *)NULL, + UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], + (MeasObjectToAddMod_t **)NULL, + UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], + 1, + SRB1_logicalChannelConfig, + (MeasGapConfig_t *)NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL #ifdef Rel10 - , - 0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + , + 0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - , - 0, - 0 + , + 0, + 0 #endif - ); - } + ); + } } else { - if (UE_rrc_inst[Mod_id].SRB2_config[eNB_index]) { - memcpy(UE_rrc_inst[Mod_id].SRB2_config[eNB_index],radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt], - sizeof(struct SRB_ToAddMod)); - } - else { + if (UE_rrc_inst[Mod_id].SRB2_config[eNB_index]) { + memcpy(UE_rrc_inst[Mod_id].SRB2_config[eNB_index],radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt], + sizeof(struct SRB_ToAddMod)); + } + else { - UE_rrc_inst[Mod_id].SRB2_config[eNB_index] = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]; + UE_rrc_inst[Mod_id].SRB2_config[eNB_index] = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]; - rrc_ue_establish_srb2(Mod_id,frame,eNB_index,radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]); - if (UE_rrc_inst[Mod_id].SRB2_config[eNB_index]->logicalChannelConfig) { - if (UE_rrc_inst[Mod_id].SRB2_config[eNB_index]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue){ - LOG_I(RRC,"Applying Explicit SRB2 logicalChannelConfig\n"); - SRB2_logicalChannelConfig = &UE_rrc_inst[Mod_id].SRB2_config[eNB_index]->logicalChannelConfig->choice.explicitValue; - } - else { - LOG_I(RRC,"Applying default SRB2 logicalChannelConfig\n"); - SRB2_logicalChannelConfig = &SRB2_logicalChannelConfig_defaultValue; - } - } - else { - SRB2_logicalChannelConfig = &SRB2_logicalChannelConfig_defaultValue; - } + rrc_ue_establish_srb2(Mod_id,frame,eNB_index,radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]); + if (UE_rrc_inst[Mod_id].SRB2_config[eNB_index]->logicalChannelConfig) { + if (UE_rrc_inst[Mod_id].SRB2_config[eNB_index]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue){ + LOG_I(RRC,"Applying Explicit SRB2 logicalChannelConfig\n"); + SRB2_logicalChannelConfig = &UE_rrc_inst[Mod_id].SRB2_config[eNB_index]->logicalChannelConfig->choice.explicitValue; + } + else { + LOG_I(RRC,"Applying default SRB2 logicalChannelConfig\n"); + SRB2_logicalChannelConfig = &SRB2_logicalChannelConfig_defaultValue; + } + } + else { + SRB2_logicalChannelConfig = &SRB2_logicalChannelConfig_defaultValue; + } LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB2 eNB %d) --->][MAC_UE][MOD %02d][]\n", frame, Mod_id, eNB_index, Mod_id); rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], - (MeasObjectToAddMod_t **)NULL, - UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], - 2, - SRB2_logicalChannelConfig, - UE_rrc_inst[Mod_id].measGapConfig[eNB_index], - (TDD_Config_t *)NULL, - (MobilityControlInfo_t *)NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -#ifdef Rel10 - , - 0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + (RadioResourceConfigCommonSIB_t *)NULL, + UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], + (MeasObjectToAddMod_t **)NULL, + UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], + 2, + SRB2_logicalChannelConfig, + UE_rrc_inst[Mod_id].measGapConfig[eNB_index], + (TDD_Config_t *)NULL, + (MobilityControlInfo_t *)NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +#ifdef Rel10 + , + 0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - , - 0, - 0 + , + 0, + 0 #endif - ); - } + ); + } } } } @@ -957,60 +948,60 @@ rrc_ue_process_radioResourceConfigDedicated(u8 Mod_id,u32 frame, u8 eNB_index, NULL, kUPenc #ifdef Rel10 - ,(PMCH_InfoList_r9_t *)NULL + ,(PMCH_InfoList_r9_t *)NULL #endif - ); - + ); + // Refresh DRBs rrc_rlc_config_asn1_req(NB_eNB_INST+Mod_id,frame,0,eNB_index, - (SRB_ToAddModList_t*)NULL, - radioResourceConfigDedicated->drb_ToAddModList, - (DRB_ToReleaseList_t*)NULL + (SRB_ToAddModList_t*)NULL, + radioResourceConfigDedicated->drb_ToAddModList, + (DRB_ToReleaseList_t*)NULL #ifdef Rel10 - ,(PMCH_InfoList_r9_t *)NULL + ,(PMCH_InfoList_r9_t *)NULL #endif - ); + ); for (i=0;i<radioResourceConfigDedicated->drb_ToAddModList->list.count;i++) { DRB_id = radioResourceConfigDedicated->drb_ToAddModList->list.array[i]->drb_Identity-1; if (UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id]) { - memcpy(UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id],radioResourceConfigDedicated->drb_ToAddModList->list.array[i], - sizeof(struct DRB_ToAddMod)); + memcpy(UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id],radioResourceConfigDedicated->drb_ToAddModList->list.array[i], + sizeof(struct DRB_ToAddMod)); } else { - UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id] = radioResourceConfigDedicated->drb_ToAddModList->list.array[i]; - - rrc_ue_establish_drb(Mod_id,frame,eNB_index,radioResourceConfigDedicated->drb_ToAddModList->list.array[i]); - // MAC/PHY Configuration - LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (DRB %d eNB %d) --->][MAC_UE][MOD %02d][]\n", - frame, Mod_id, radioResourceConfigDedicated->drb_ToAddModList->list.array[i]->drb_Identity, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], - (MeasObjectToAddMod_t **)NULL, - UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], - *UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id]->logicalChannelIdentity, - UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id]->logicalChannelConfig, - UE_rrc_inst[Mod_id].measGapConfig[eNB_index], - (TDD_Config_t*)NULL, - (MobilityControlInfo_t *)NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -#ifdef Rel10 - , - 0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id] = radioResourceConfigDedicated->drb_ToAddModList->list.array[i]; + + rrc_ue_establish_drb(Mod_id,frame,eNB_index,radioResourceConfigDedicated->drb_ToAddModList->list.array[i]); + // MAC/PHY Configuration + LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (DRB %d eNB %d) --->][MAC_UE][MOD %02d][]\n", + frame, Mod_id, radioResourceConfigDedicated->drb_ToAddModList->list.array[i]->drb_Identity, eNB_index, Mod_id); + rrc_mac_config_req(Mod_id,0,0,eNB_index, + (RadioResourceConfigCommonSIB_t *)NULL, + UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], + (MeasObjectToAddMod_t **)NULL, + UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], + *UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id]->logicalChannelIdentity, + UE_rrc_inst[Mod_id].DRB_config[eNB_index][DRB_id]->logicalChannelConfig, + UE_rrc_inst[Mod_id].measGapConfig[eNB_index], + (TDD_Config_t*)NULL, + (MobilityControlInfo_t *)NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +#ifdef Rel10 + , + 0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - , - UE_rrc_inst[Mod_id].num_active_cba_groups, // - UE_rrc_inst[Mod_id].cba_rnti[0] + , + UE_rrc_inst[Mod_id].num_active_cba_groups, // + UE_rrc_inst[Mod_id].cba_rnti[0] #endif - ); + ); } } @@ -1089,12 +1080,12 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id,uint32_t frame,SecurityMo ul_dcch_msg.message.choice.c1.choice.securityModeComplete.criticalExtensions.choice.securityModeComplete_r8.nonCriticalExtension =NULL; LOG_I(RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), encoding securityModeComplete (eNB %d)\n", - Mod_id,frame,eNB_index); + Mod_id,frame,eNB_index); enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, - (void*)&ul_dcch_msg, - buffer, - 100); + (void*)&ul_dcch_msg, + buffer, + 100); #ifdef XER_PRINT xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); @@ -1124,7 +1115,7 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id,uint32_t frame,UECapabili int i; LOG_I(RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing UECapabilityEnquiry (eNB %d)\n", - Mod_id,frame,eNB_index); + Mod_id,frame,eNB_index); memset((void *)&ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); @@ -1136,8 +1127,8 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id,uint32_t frame,UECapabili ue_CapabilityRAT_Container.rat_Type = RAT_Type_eutra; OCTET_STRING_fromBuf(&ue_CapabilityRAT_Container.ueCapabilityRAT_Container, - (const char*)UE_rrc_inst[Mod_id].UECapability, - UE_rrc_inst[Mod_id].UECapability_size); + (const char*)UE_rrc_inst[Mod_id].UECapability, + UE_rrc_inst[Mod_id].UECapability_size); // ue_CapabilityRAT_Container.ueCapabilityRAT_Container.buf = UE_rrc_inst[Mod_id].UECapability; // ue_CapabilityRAT_Container.ueCapabilityRAT_Container.size = UE_rrc_inst[Mod_id].UECapability_size; @@ -1160,11 +1151,11 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id,uint32_t frame,UECapabili #ifdef XER_PRINT xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg); -#endif +#endif #ifdef USER_MODE LOG_D(RRC,"UECapabilityInformation Encoded %d bits (%d bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8); -#endif +#endif for (i = 0; i < (enc_rval.encoded + 7) / 8; i++) LOG_T(RRC, "%02x.", buffer[i]); LOG_T(RRC, "\n"); @@ -1177,35 +1168,59 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id,uint32_t frame,UECapabili void rrc_ue_process_rrcConnectionReconfiguration(u8 Mod_id, u32 frame, - RRCConnectionReconfiguration_t *rrcConnectionReconfiguration, - u8 eNB_index) { + RRCConnectionReconfiguration_t *rrcConnectionReconfiguration, + u8 eNB_index) { LOG_I(RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing RRCConnectionReconfiguration (eNB %d)\n", - Mod_id,frame,eNB_index); + Mod_id,frame,eNB_index); if (rrcConnectionReconfiguration->criticalExtensions.present == RRCConnectionReconfiguration__criticalExtensions_PR_c1) { - if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present == RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) { + if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present == + RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) { + RRCConnectionReconfiguration_r8_IEs_t *rrcConnectionReconfiguration_r8 = &rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8; - if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.mobilityControlInfo) { - LOG_I(RRC,"Mobility Control Information is present\n"); - rrc_ue_process_mobilityControlInfo(Mod_id,frame, eNB_index, - rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.mobilityControlInfo); + if (rrcConnectionReconfiguration_r8->mobilityControlInfo) { + LOG_I(RRC,"Mobility Control Information is present\n"); + rrc_ue_process_mobilityControlInfo(Mod_id,frame, eNB_index, rrcConnectionReconfiguration_r8->mobilityControlInfo); } - if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig != NULL) { - LOG_I(RRC,"Measurement Configuration is present\n"); - rrc_ue_process_measConfig(Mod_id,frame, eNB_index, - rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig); + if (rrcConnectionReconfiguration_r8->measConfig != NULL) { + LOG_I(RRC,"Measurement Configuration is present\n"); + rrc_ue_process_measConfig(Mod_id,frame, eNB_index, + rrcConnectionReconfiguration_r8->measConfig); } - if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated) { - LOG_I(RRC,"Radio Resource Configuration is present\n"); - rrc_ue_process_radioResourceConfigDedicated(Mod_id,frame,eNB_index, - rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated); + if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated) { + LOG_I(RRC,"Radio Resource Configuration is present\n"); + rrc_ue_process_radioResourceConfigDedicated(Mod_id,frame,eNB_index, rrcConnectionReconfiguration_r8->radioResourceConfigDedicated); } + +#if defined(ENABLE_ITTI) + /* Check if there is dedicated NAS information to forward to NAS */ + if (rrcConnectionReconfiguration_r8->dedicatedInfoNASList != NULL) { + int list_count; + uint32_t pdu_length; + uint8_t *pdu_buffer; + MessageDef *msg_p; + + for (list_count = 0; list_count < rrcConnectionReconfiguration_r8->dedicatedInfoNASList->list.count; list_count++) { + pdu_length = rrcConnectionReconfiguration_r8->dedicatedInfoNASList->list.array[list_count]->size; + pdu_buffer = rrcConnectionReconfiguration_r8->dedicatedInfoNASList->list.array[list_count]->buf; + + msg_p = itti_alloc_new_message(TASK_RRC_UE, NAS_DOWNLINK_DATA_IND); + NAS_DOWNLINK_DATA_IND(msg_p).UEid = Mod_id; // TODO set the UEid to something else ? + NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.length = pdu_length; + NAS_DOWNLINK_DATA_IND(msg_p).nasMsg.data = pdu_buffer; + + itti_send_msg_to_task(TASK_NAS_UE, Mod_id + NB_eNB_INST, msg_p); + } + + free (rrcConnectionReconfiguration_r8->dedicatedInfoNASList); + } +#endif } // c1 present } // critical extensions present } -/* 36.331, 5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) */ +/* 36.331, 5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) */ void rrc_ue_process_mobilityControlInfo(u8 Mod_id,u32 frame, u8 eNB_index,struct MobilityControlInfo *mobilityControlInfo) { /* DRB_ToReleaseList_t* drb2release_list; @@ -1280,52 +1295,52 @@ void rrc_ue_process_mobilityControlInfo(u8 Mod_id,u32 frame, u8 eNB_index,stru */ //Synchronisation to DL of target cell LOG_D(RRC,"HO: Reset PDCP and RLC for configured RBs.. \n[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB2 eNB %d) --->][MAC_UE][MOD %02d][]\n", - frame, Mod_id, eNB_index, Mod_id); + frame, Mod_id, eNB_index, Mod_id); // Reset MAC and configure PHY rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - (struct PhysicalConfigDedicated *)NULL, - (MeasObjectToAddMod_t **)NULL, - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - (TDD_Config_t *)NULL, - mobilityControlInfo, - (u8 *)NULL, - (u16 *)NULL, - NULL, - NULL, - NULL, - NULL -#ifdef Rel10 - ,0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + (RadioResourceConfigCommonSIB_t *)NULL, + (struct PhysicalConfigDedicated *)NULL, + (MeasObjectToAddMod_t **)NULL, + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + (TDD_Config_t *)NULL, + mobilityControlInfo, + (u8 *)NULL, + (u16 *)NULL, + NULL, + NULL, + NULL, + NULL +#ifdef Rel10 + ,0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - ,0, - 0 + ,0, + 0 #endif ); // Re-establish PDCP for all RBs that are established - // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, Mod_id+DCCH); - // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, Mod_id+DCCH1); - // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, Mod_id+DTCH); + // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, Mod_id+DCCH); + // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, Mod_id+DCCH1); + // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frame, 0, ACTION_ADD, Mod_id+DTCH); // Re-establish RLC for all RBs that are established - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD,Mod_id+DCCH,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD,Mod_id+DCCH1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD,Mod_id+DTCH,RADIO_ACCESS_BEARER,Rlc_info_um); + // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD,Mod_id+DCCH,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD,Mod_id+DCCH1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frame,0,ACTION_ADD,Mod_id+DTCH,RADIO_ACCESS_BEARER,Rlc_info_um); UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_SI_RECEIVED; } void rrc_detach_from_eNB(u8 Mod_id,u8 eNB_index) { - //UE_rrc_inst[Mod_id].DRB_config[eNB_index] + //UE_rrc_inst[Mod_id].DRB_config[eNB_index] } /*------------------------------------------------------------------------------------------*/ @@ -1352,10 +1367,10 @@ void rrc_ue_decode_dcch(u8 Mod_id,u32 frame,u8 Srb_id, u8 *Buffer,u8 eNB_index) LOG_T(RRC, "\n"); */ uper_decode(NULL, - &asn_DEF_DL_DCCH_Message, - (void**)&dl_dcch_msg, - (uint8_t*)Buffer, - RRC_BUF_SIZE,0,0); + &asn_DEF_DL_DCCH_Message, + (void**)&dl_dcch_msg, + (uint8_t*)Buffer, + RRC_BUF_SIZE,0,0); #ifdef XER_PRINT xer_fprint(stdout,&asn_DEF_DL_DCCH_Message,(void*)dl_dcch_msg); @@ -1557,10 +1572,10 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le printf("%x.",Sdu[i]); printf("\n");*/ dec_rval = uper_decode_complete(NULL, - &asn_DEF_BCCH_DL_SCH_Message, - (void **)&bcch_message, - (const void *)Sdu, - Sdu_len);//,0,0); + &asn_DEF_BCCH_DL_SCH_Message, + (void **)&bcch_message, + (const void *)Sdu, + Sdu_len);//,0,0); if ((dec_rval.code != RC_OK) && (dec_rval.consumed==0)) { LOG_E(RRC,"[UE %d] Failed to decode BCCH_DLSCH_MESSAGE (%d bits)\n",Mod_id,dec_rval.consumed); @@ -1602,36 +1617,35 @@ int decode_BCCH_DLSCH_Message(u8 Mod_id,u32 frame,u8 eNB_index,u8 *Sdu,u8 Sdu_le if (bcch_message->message.present == BCCH_DL_SCH_MessageType_PR_c1) { switch (bcch_message->message.choice.c1.present) { case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: - if ((frame %2) == 0) { - if (UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 0) { - memcpy((void*)*sib1, - (void*)&bcch_message->message.choice.c1.choice.systemInformationBlockType1, - sizeof(SystemInformationBlockType1_t)); - LOG_D(RRC,"[UE %d] Decoding First SIB1\n",Mod_id); - decode_SIB1(Mod_id,eNB_index); - //mac_xface->macphy_exit("after decode_SIB1"); - - } - } - break; + if ((frame %2) == 0) { + if (UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 0) { + memcpy((void*)*sib1, + (void*)&bcch_message->message.choice.c1.choice.systemInformationBlockType1, + sizeof(SystemInformationBlockType1_t)); + LOG_D(RRC,"[UE %d] Decoding First SIB1\n",Mod_id); + decode_SIB1(Mod_id,eNB_index); + //mac_xface->macphy_exit("after decode_SIB1"); + } + } + break; case BCCH_DL_SCH_MessageType__c1_PR_systemInformation: - if ((UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 1) && - (UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus == 0)) { - // if ((frame %8) == 1) { // check only in odd frames for SI - si_window = (frame%(UE_rrc_inst[Mod_id].Info[eNB_index].SIperiod/10))/(UE_rrc_inst[Mod_id].Info[eNB_index].SIwindowsize/10); - memcpy((void*)si[si_window], - (void*)&bcch_message->message.choice.c1.choice.systemInformation, - sizeof(SystemInformation_t)); - LOG_D(RRC,"[UE %d] Decoding SI for frame %d, si_window %d\n",Mod_id,frame,si_window); - decode_SI(Mod_id,frame,eNB_index,si_window); - //mac_xface->macphy_exit("after decode_SI"); - - // } - } - break; + if ((UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 1) && + (UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus == 0)) { + // if ((frame %8) == 1) { // check only in odd frames for SI + si_window = (frame%(UE_rrc_inst[Mod_id].Info[eNB_index].SIperiod/10))/(UE_rrc_inst[Mod_id].Info[eNB_index].SIwindowsize/10); + memcpy((void*)si[si_window], + (void*)&bcch_message->message.choice.c1.choice.systemInformation, + sizeof(SystemInformation_t)); + LOG_D(RRC,"[UE %d] Decoding SI for frame %d, si_window %d\n",Mod_id,frame,si_window); + decode_SI(Mod_id,frame,eNB_index,si_window); + //mac_xface->macphy_exit("after decode_SI"); + + // } + } + break; case BCCH_DL_SCH_MessageType__c1_PR_NOTHING: default: - break; + break; } } } @@ -1667,9 +1681,9 @@ int decode_SIB1(u8 Mod_id,u8 eNB_index) { for (i=0;i<(*sib1)->schedulingInfoList.list.count;i++) { LOG_D(RRC,"siSchedulingInfoPeriod[%d] : %s\n",i,SIBPeriod[(int)(*sib1)->schedulingInfoList.list.array[i]->si_Periodicity]); if ((*sib1)->schedulingInfoList.list.array[i]->sib_MappingInfo.list.count>0) - LOG_D(RRC,"siSchedulingInfoSIBType[%d] : %s\n",i,SIBType[(int)(*(*sib1)->schedulingInfoList.list.array[i]->sib_MappingInfo.list.array[0])]); + LOG_D(RRC,"siSchedulingInfoSIBType[%d] : %s\n",i,SIBType[(int)(*(*sib1)->schedulingInfoList.list.array[i]->sib_MappingInfo.list.array[0])]); else { - LOG_W(RRC,"mapping list %d is null\n",i); + LOG_W(RRC,"mapping list %d is null\n",i); } } } @@ -1689,32 +1703,32 @@ int decode_SIB1(u8 Mod_id,u8 eNB_index) { Mod_id, eNB_index, Mod_id); rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - (struct PhysicalConfigDedicated *)NULL, - (MeasObjectToAddMod_t **)NULL, - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - UE_rrc_inst[Mod_id].sib1[eNB_index]->tdd_Config, - (MobilityControlInfo_t *) NULL, - &UE_rrc_inst[Mod_id].Info[eNB_index].SIwindowsize, - &UE_rrc_inst[Mod_id].Info[eNB_index].SIperiod, - NULL, - NULL, - NULL, - (MBSFN_SubframeConfigList_t *)NULL -#ifdef Rel10 - ,0, - (MBSFN_AreaInfoList_r9_t *)NULL, - (PMCH_InfoList_r9_t *)NULL + (RadioResourceConfigCommonSIB_t *)NULL, + (struct PhysicalConfigDedicated *)NULL, + (MeasObjectToAddMod_t **)NULL, + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + UE_rrc_inst[Mod_id].sib1[eNB_index]->tdd_Config, + (MobilityControlInfo_t *) NULL, + &UE_rrc_inst[Mod_id].Info[eNB_index].SIwindowsize, + &UE_rrc_inst[Mod_id].Info[eNB_index].SIperiod, + NULL, + NULL, + NULL, + (MBSFN_SubframeConfigList_t *)NULL +#ifdef Rel10 + ,0, + (MBSFN_AreaInfoList_r9_t *)NULL, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - , - 0, - 0 + , + 0, + 0 #endif - ); + ); UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status = 1; vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SIB1, VCD_FUNCTION_OUT); @@ -1802,9 +1816,6 @@ void dump_sib2(SystemInformationBlockType2_t *sib2) { LOG_D(RRC,"freqInfo.ul_Bandwidth : %p\n", sib2->freqInfo.ul_Bandwidth); LOG_D(RRC,"mbsfn_SubframeConfigList : %p\n", sib2->mbsfn_SubframeConfigList); LOG_D(RRC,"timeAlignmentTimerCommon : %ld\n", sib2->timeAlignmentTimerCommon); - - - } void dump_sib3(SystemInformationBlockType3_t *sib3) { @@ -1944,31 +1955,31 @@ int decode_SI(u8 Mod_id,u32 frame,u8 eNB_index,u8 si_window) { LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB13 params eNB %d) --->][MAC_UE][MOD %02d][]\n", frame, Mod_id, eNB_index, Mod_id); rrc_mac_config_req(Mod_id,0,0,eNB_index, - (RadioResourceConfigCommonSIB_t *)NULL, - (struct PhysicalConfigDedicated *)NULL, - (MeasObjectToAddMod_t **)NULL, - (MAC_MainConfig_t *)NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *)NULL, - (TDD_Config_t *)NULL, - (MobilityControlInfo_t *)NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - (MBSFN_SubframeConfigList_t *)NULL -#ifdef Rel10 - ,0, - &UE_rrc_inst[Mod_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9, - (PMCH_InfoList_r9_t *)NULL + (RadioResourceConfigCommonSIB_t *)NULL, + (struct PhysicalConfigDedicated *)NULL, + (MeasObjectToAddMod_t **)NULL, + (MAC_MainConfig_t *)NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *)NULL, + (TDD_Config_t *)NULL, + (MobilityControlInfo_t *)NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + (MBSFN_SubframeConfigList_t *)NULL +#ifdef Rel10 + ,0, + &UE_rrc_inst[Mod_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9, + (PMCH_InfoList_r9_t *)NULL #endif #ifdef CBA - ,0, - 0 + ,0, + 0 #endif - ); + ); UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus = 1; break; #endif @@ -2010,9 +2021,9 @@ void ue_meas_filtering(u8 Mod_id,u32 frame,u8 eNB_index){ } else { for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(Mod_id);eNB_offset++) { - UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]= mac_xface->get_RSRP(Mod_id,eNB_offset); - // phy_vars_ue->PHY_measurements.rsrp_filtered[eNB_offset]=UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]; - //mac_xface->set_RSRP_filtered(Mod_id,eNB_offset,UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]); + UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]= mac_xface->get_RSRP(Mod_id,eNB_offset); + // phy_vars_ue->PHY_measurements.rsrp_filtered[eNB_offset]=UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]; + //mac_xface->set_RSRP_filtered(Mod_id,eNB_offset,UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]); } } if (UE_rrc_inst[Mod_id].QuantityConfig[0]->quantityConfigEUTRA != NULL) { @@ -2099,15 +2110,15 @@ void rrc_ue_generate_MeasurementReport(u8 Mod_id, u32 frame,u8 eNB_index) { // Measurement report triggering, described in 36.331 Section 5.5.4.1: called periodically void ue_measurement_report_triggering(u8 Mod_id, u32 frame,u8 eNB_index) { u8 i,j; - Hysteresis_t hys; - TimeToTrigger_t ttt_ms; + Hysteresis_t hys; + TimeToTrigger_t ttt_ms; Q_OffsetRange_t ofn; Q_OffsetRange_t ocn; Q_OffsetRange_t ofs = 0; Q_OffsetRange_t ocs = 0; - long a3_offset; - MeasObjectId_t measObjId; - ReportConfigId_t reportConfigId; + long a3_offset; + MeasObjectId_t measObjId; + ReportConfigId_t reportConfigId; for(i=0 ; i<NB_CNX_UE ; i++) { for(j=0 ; j<MAX_MEAS_ID ; j++) { @@ -2198,12 +2209,12 @@ u8 check_trigger_meas_event(u8 Mod_id,u32 frame, u8 eNB_index, u8 ue_cnx_index, if(UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]+ofn+ocn-hys > UE_rrc_inst[Mod_id].rsrp_db_filtered[0/*eNB_index*/]+ofs+ocs - 1 /*+a3_offset*/) { UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1] += 2; //Called every subframe = 2ms LOG_D(RRC,"[UE %d] Frame %d: Entry measTimer[%d][%d]: %d currentCell: %d betterCell: %d \n", - Mod_id, frame, ue_cnx_index,meas_index,UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1],currentCellIndex,eNB_offset); + Mod_id, frame, ue_cnx_index,meas_index,UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1],currentCellIndex,eNB_offset); } else { UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1] = 0; //Exit condition: Resetting the measurement timer LOG_D(RRC,"[UE %d] Frame %d: Exit measTimer[%d][%d]: %d currentCell: %d betterCell: %d \n", - Mod_id, frame, ue_cnx_index,meas_index,UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1],currentCellIndex,eNB_offset); + Mod_id, frame, ue_cnx_index,meas_index,UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1],currentCellIndex,eNB_offset); } if (UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1] >= ttt) { UE_rrc_inst->HandoverInfoUe.targetCellId = get_adjacent_cell_id(Mod_id,eNB_offset-1); //check this! @@ -2228,7 +2239,7 @@ int decode_MCCH_Message(u8 Mod_id, u32 frame, u8 eNB_index, u8 *Sdu, u8 Sdu_len, if (UE_rrc_inst[Mod_id].Info[eNB_index].MCCHStatus[mbsfn_sync_area] == 1) { LOG_D(RRC,"[UE %d] Frame %d: MCCH MESSAGE for MBSFN sync area %d has been already received!\n", - Mod_id, frame, mbsfn_sync_area); + Mod_id, frame, mbsfn_sync_area); return 0; // avoid decoding to prevent memory bloating } else { diff --git a/targets/Makefile.common b/targets/Makefile.common index c3d21423bdb54c10b39118a32ee87ff2deb0fbb6..79b3a1a4586a7fb7ad8d3ec433ce6faf448569de 100644 --- a/targets/Makefile.common +++ b/targets/Makefile.common @@ -5,6 +5,8 @@ ITTI_MESSAGES_XML = messages.xml ITTI_MESSAGES_FILE = $(ITTI_DIR)/intertask_interface_types.h include $(COMMON_UTILS_DIR)/Makefile.inc +include $(OPENAIR_TARGETS)/COMMON/Makefile.inc +include $(OPENAIR2_DIR)/NAS/Makefile.inc $(ITTI_MESSAGES_XML): $(ITTI_MESSAGES_FILE) @echo "Generating messages.xml ..." @@ -20,10 +22,6 @@ $(ITTI_MESSAGES_H): $(ITTI_MESSAGES_XML) @echo "Generating messages_xml.h ..." @sed -e 's/[ ]*//' -e 's/"/\\"/g' -e 's/^/"/' -e 's/$$/\\n"/' $< > $@ -ifdef ENABLE_ITTI -SHARED_DEPENDENCIES = $(ITTI_MESSAGES_H) -endif - ifdef USE_MME CFLAGS += -DENB_MODE -DENABLE_USE_MME -DENABLE_EVENT_FD -I$(S1AP_DIR) -I$(SCTP_DIR) S1AP_CFLAGS = $(CFLAGS) -I$(TOP_DIR) $(L2_incl) $(UTIL_incl) $(UTILS_incl) @@ -38,6 +36,18 @@ $(S1AP_OBJ_DIR)/libs1ap.a: force_look @$(MAKE) -C $(S1AP_DIR) -f Makefile.eNB $(S1AP_OBJ_DIR)/libs1ap.a OUTDIR=$(S1AP_OBJ_DIR) $(SCTP_OBJ_DIR)/libsctp.a: force_look @$(MAKE) -C $(SCTP_DIR) -f Makefile.eNB $(SCTP_OBJ_DIR)/libsctp.a OUTDIR=$(SCTP_OBJ_DIR) + +CFLAGS += $(NAS_UE_incl) + +OBJ = $(NAS_UE_OBJS) +endif + +ifdef ENABLE_ITTI +SHARED_DEPENDENCIES = $(ITTI_MESSAGES_H) + +CFLAGS += $(TARGETS_COMMON_incl) + +OBJ += $(TARGETS_COMMON_OBJS) endif ifdef ENABLE_ITTI diff --git a/targets/RTAI/USER/Makefile b/targets/RTAI/USER/Makefile index d2afb7d25ab7dfac8000e3c2628cbe7e3b95e448..649b74990dd9a3ffd61897b8fc4e54f9e063e241 100644 --- a/targets/RTAI/USER/Makefile +++ b/targets/RTAI/USER/Makefile @@ -41,8 +41,8 @@ else RTAI_OBJ += lte-softmodem.o endif else -#OBJ = sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o lte-softmodem.o rt_wrapper.o -OBJ = sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o rt_wrapper.o +#OBJ += sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o lte-softmodem.o rt_wrapper.o +OBJ += sched_dlsch.o sched_ulsch.o sched_rx_pdsch.o rt_wrapper.o ifeq ($(USRP),1) OBJ += lte-softmodem-usrp.o else diff --git a/targets/RTAI/USER/lte-softmodem.c b/targets/RTAI/USER/lte-softmodem.c index 6238395d87f72facab66c8e7db31d7c01acfd551..e5df5070bead97b20efddeb341c41c6d1b313a53 100644 --- a/targets/RTAI/USER/lte-softmodem.c +++ b/targets/RTAI/USER/lte-softmodem.c @@ -101,14 +101,11 @@ unsigned short config_frames[4] = {2,9,11,13}; #include "UTIL/MATH/oml.h" #include "UTIL/LOG/vcd_signal_dumper.h" -#include "enb_app.h" - #if defined(ENABLE_ITTI) # include "intertask_interface_init.h" -# include "timer.h" +# include "create_tasks.h" # if defined(ENABLE_USE_MME) # include "s1ap_eNB.h" -# include "sctp_eNB_task.h" # endif #endif @@ -233,16 +230,23 @@ void signal_handler(int sig) exit(-1); } else { - oai_exit=1; + oai_exit = 1; } } #endif void exit_fun(const char* s) { - printf("Exiting: %s\n",s); + if (s != NULL) { + printf("Exiting: %s\n",s); + } + + oai_exit = 1; + +#if defined(ENABLE_ITTI) + itti_send_terminate_message (TASK_UNKNOWN); +#endif - oai_exit=1; //rt_sleep_ns(FRAME_PERIOD); //exit (-1); @@ -528,64 +532,6 @@ void *l2l1_task(void *arg) } #endif -#if defined(ENABLE_ITTI) -static int create_tasks(uint32_t enb_nb, uint32_t ue_nb) { -# if defined(ENABLE_USE_MME) - { - if (enb_nb > 0) { - if (itti_create_task(TASK_SCTP, sctp_eNB_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing SCTP task interface: FAILED\n"); - return -1; - } - - if (itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing S1AP task interface: FAILED\n"); - return -1; - } - } - } -# endif - -# ifdef OPENAIR2 - { - if (enb_nb > 0) { - if (itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing RRC eNB task interface: FAILED\n"); - exit (-1); - } - } - - if (ue_nb > 0) { - if (itti_create_task (TASK_RRC_UE, rrc_ue_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing RRC UE task interface: FAILED\n"); - exit (-1); - } - } - } -# endif - - if (itti_create_task(TASK_L2L1, l2l1_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing L2L1 task interface: FAILED\n"); - return -1; - } - - if (enb_nb > 0) { - /* Last task to create, others task must be ready before its start */ - if (itti_create_task(TASK_ENB_APP, eNB_app_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing eNB APP task interface: FAILED\n"); - return -1; - } - } - return 0; -} -#endif - /* This is the main eNB thread. It gets woken up by the kernel driver using the RTAI message mechanism (rt_send and rt_receive). */ static void *eNB_thread(void *arg) { @@ -659,10 +605,7 @@ static void *eNB_thread(void *arg) LOG_D(HW,"eNB Frame %d, time %llu: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, rt_get_time_ns(), slot, hw_slot, diff); slot++; if (frame > 0) { - oai_exit = 1; -#if defined(ENABLE_ITTI) - itti_send_terminate_message (TASK_L2L1); -#endif + exit_fun(NULL); } if (slot==20){ slot=0; @@ -687,8 +630,8 @@ static void *eNB_thread(void *arg) delay_cnt++; if (delay_cnt == 10) { - oai_exit = 1; LOG_D(HW,"eNB Frame %d: HW stopped ... \n",frame); + exit_fun(NULL); } mbox_current = ((volatile unsigned int *)DAQ_MBOX)[0]; if ((mbox_current>=135) && (mbox_target<15)) //handle the frame wrap-arround @@ -896,7 +839,7 @@ static void *UE_thread(void *arg) if (diff2 <(-7)) { LOG_D(HW,"UE Frame %d: missed slot, proceeding with next one (slot %d, hw_slot %d, diff %d)\n",frame, slot, hw_slot, diff2); if (frame>0) - oai_exit=1; + exit_fun(NULL); slot++; if (slot==20) { slot=0; @@ -930,8 +873,8 @@ static void *UE_thread(void *arg) delay_cnt++; if (delay_cnt == 30) { - oai_exit = 1; LOG_D(HW,"UE frame %d: HW stopped ... \n",frame); + exit_fun(NULL); } mbox_current = ((volatile unsigned int *)DAQ_MBOX)[0]; if ((mbox_current>=135) && (mbox_target<15)) //handle the frame wrap-arround @@ -998,43 +941,43 @@ static void *UE_thread(void *arg) memset(PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata[aa],0, PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*sizeof(int)); */ - if (mode == rx_calib_ue) { - oai_exit=1; - } - else { - is_synchronized = 1; - //start the DMA transfers - //LOG_D(HW,"Before openair0_start_rt_acquisition \n"); - openair0_start_rt_acquisition(card); - - hw_slot_offset = (PHY_vars_UE_g[0]->rx_offset<<1) / PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti; - LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset); - } - } - else { - if (openair_daq_vars.freq_offset >= 0) { - openair_daq_vars.freq_offset += 100; - openair_daq_vars.freq_offset *= -1; - } - else { - openair_daq_vars.freq_offset *= -1; - } - if (abs(openair_daq_vars.freq_offset) > 7500) { - LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n"); - mac_xface->macphy_exit(""); - } - else { - LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset); - for (i=0; i<4; i++) { - if (p_exmimo_config->rf.rf_freq_rx[i]) - p_exmimo_config->rf.rf_freq_rx[i] = carrier_freq[i]+openair_daq_vars.freq_offset; - if (p_exmimo_config->rf.rf_freq_tx[i]) - p_exmimo_config->rf.rf_freq_tx[i] = carrier_freq[i]+openair_daq_vars.freq_offset; - } - openair0_dump_config(card); - rt_sleep_ns(FRAME_PERIOD); - } - } + if (mode == rx_calib_ue) { + exit_fun(NULL); + } + else { + is_synchronized = 1; + //start the DMA transfers + //LOG_D(HW,"Before openair0_start_rt_acquisition \n"); + openair0_start_rt_acquisition(card); + + hw_slot_offset = (PHY_vars_UE_g[0]->rx_offset<<1) / PHY_vars_UE_g[0]->lte_frame_parms.samples_per_tti; + LOG_D(HW,"Got synch: hw_slot_offset %d\n",hw_slot_offset); + } + } + else { + if (openair_daq_vars.freq_offset >= 0) { + openair_daq_vars.freq_offset += 100; + openair_daq_vars.freq_offset *= -1; + } + else { + openair_daq_vars.freq_offset *= -1; + } + if (abs(openair_daq_vars.freq_offset) > 7500) { + LOG_I(PHY,"[initial_sync] No cell synchronization found, abondoning\n"); + mac_xface->macphy_exit(""); + } + else { + LOG_I(PHY,"[initial_sync] trying carrier off %d Hz\n",openair_daq_vars.freq_offset); + for (i=0; i<4; i++) { + if (p_exmimo_config->rf.rf_freq_rx[i]) + p_exmimo_config->rf.rf_freq_rx[i] = carrier_freq[i]+openair_daq_vars.freq_offset; + if (p_exmimo_config->rf.rf_freq_tx[i]) + p_exmimo_config->rf.rf_freq_tx[i] = carrier_freq[i]+openair_daq_vars.freq_offset; + } + openair0_dump_config(card); + rt_sleep_ns(FRAME_PERIOD); + } + } } /* @@ -1793,7 +1736,6 @@ int main(int argc, char **argv) { if (UE_flag!=1) openair0_start_rt_acquisition(card); - #ifdef XFORMS if (do_forms==1) { fl_initialize (&argc, argv, NULL, 0, 0); diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile index afffa28986fa3113c608e739802c7eed93689718..3183884f1d57e4f4ae4ff187084f9a472e9a677c 100644 --- a/targets/SIMU/USER/Makefile +++ b/targets/SIMU/USER/Makefile @@ -5,18 +5,18 @@ default: oaisim include $(OPENAIR_TARGETS)/Makefile.common -CPUFLAGS = -mmmx -msse -msse2 -msse4.1 -march=native -# FORCE ssse3 for compilation of openair on User Mode Linux -CPUFLAGS += $(shell if grep --silent ssse3 /proc/cpuinfo ; then echo "-mssse3" ; else if grep --silent User\ Mode\ Linux /proc/cpuinfo ; then echo "-mssse3" ; else echo ""; fi; fi) -CPUFLAGS += $(shell if grep --silent -w sse4 /proc/cpuinfo ; then echo "-msse4" ; else echo ""; fi) -linux = $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi) - TOP_DIR = $(OPENAIR1_DIR) OPENAIR1_TOP = $(OPENAIR1_DIR) OPENAIR2_TOP = $(OPENAIR2_DIR) OPENAIR3_TOP = $(OPENAIR3_DIR) OPENAIR3 = $(OPENAIR3_DIR) +CPUFLAGS = -mmmx -msse -msse2 -msse4.1 -march=native +# FORCE ssse3 for compilation of openair on User Mode Linux +CPUFLAGS += $(shell if grep --silent ssse3 /proc/cpuinfo ; then echo "-mssse3" ; else if grep --silent User\ Mode\ Linux /proc/cpuinfo ; then echo "-mssse3" ; else echo ""; fi; fi) +CPUFLAGS += $(shell if grep --silent -w sse4 /proc/cpuinfo ; then echo "-msse4" ; else echo ""; fi) +linux = $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi) + CFLAGS += $(COMMON_CFLAGS) -DUSER_MODE -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TXRX=2 -DNB_ANTENNAS_TX=2 $(CPUFLAGS) -I/usr/include/X11 #-Wno-packed-bitfield-compat # Check if GCC version is greater or equal to 4.4 @@ -187,7 +187,7 @@ include $(OPENAIR2_DIR)/RRC/NAS/Makefile.inc include $(OPENAIR2_DIR)/UTIL/Makefile.inc include $(OPENAIR2_DIR)/ENB_APP/Makefile.inc -INCLUDES = -I$(TOP_DIR) +INCLUDES += -I$(TOP_DIR) INCLUDES += $(L2_incl) INCLUDES += $(ENB_APP_incl) INCLUDES += $(UTIL_incl) @@ -251,7 +251,7 @@ CFLAGS += $(PGM_CFLAGS) -DENABLE_PGM_TRANSPORT LIBS += $(PGM_LIBS) endif -OBJ = $(PHY_OBJS) $(SIMULATION_OBJS) $(ETHERNET_TRANSPORT_OBJS) $(TOOLS_OBJS) $(SCHED_OBJS) $(STATS_OBJS) $(NAS_OBJS) +OBJ += $(PHY_OBJS) $(SIMULATION_OBJS) $(ETHERNET_TRANSPORT_OBJS) $(TOOLS_OBJS) $(SCHED_OBJS) $(STATS_OBJS) $(NAS_OBJS) OBJ += $(INT_OBJS) $(UTIL_OBJ) $(UTILS_OBJS) $(OAISIM_OBJS_COMMON) $(ENB_APP_OBJS) ifeq ($(OPENAIR2),1) OBJ += $(L2_OBJS) diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index 9fb7915544214c2476135a1482440b6454f7d303..e7bdc991e65d62efa9ad17b3107348937ff77a03 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -71,15 +71,9 @@ char smbv_ip[16]; #include "UTIL/OTG/otg_kpi.h" #include "assertions.h" -#include "enb_app.h" - #if defined(ENABLE_ITTI) # include "intertask_interface.h" -# include "timer.h" -# if defined(ENABLE_USE_MME) -# include "s1ap_eNB.h" -# include "sctp_eNB_task.h" -# endif +# include "create_tasks.h" #endif #define RF @@ -375,7 +369,7 @@ static s32 UE_id = 0, eNB_id = 0; static s32 RN_id=0; #endif -static void *l2l1_task(void *args_p) { +void *l2l1_task(void *args_p) { // Framing variables s32 slot, last_slot, next_slot; @@ -951,64 +945,6 @@ static void *l2l1_task(void *args_p) { return NULL; } -#if defined(ENABLE_ITTI) -static int create_tasks(uint32_t enb_nb, uint32_t ue_nb) { -# if defined(ENABLE_USE_MME) - { - if (enb_nb > 0) { - if (itti_create_task(TASK_SCTP, sctp_eNB_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing SCTP task interface: FAILED\n"); - return -1; - } - - if (itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing S1AP task interface: FAILED\n"); - return -1; - } - } - } -# endif - -# ifdef OPENAIR2 - { - if (enb_nb > 0) { - if (itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing RRC eNB task interface: FAILED\n"); - exit (-1); - } - } - - if (ue_nb > 0) { - if (itti_create_task (TASK_RRC_UE, rrc_ue_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing RRC UE task interface: FAILED\n"); - exit (-1); - } - } - } -# endif - - if (itti_create_task(TASK_L2L1, l2l1_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing L2L1 task interface: FAILED\n"); - return -1; - } - - if (enb_nb > 0) { - /* Last task to create, others task must be ready before its start */ - if (itti_create_task(TASK_ENB_APP, eNB_app_task, NULL) < 0) { - LOG_E(EMU, "Create task failed"); - LOG_D(EMU, "Initializing eNB APP task interface: FAILED\n"); - return -1; - } - } - return 0; -} -#endif - Packet_OTG_List *otg_pdcp_buffer; int main(int argc, char **argv) {