diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index 0fd997888c..7c89f2086a 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -104,30 +104,30 @@ extern inline unsigned int taus(void); extern int8_t dB_fixed2(uint32_t x,uint32_t y); /*------------------------------------------------------------------------------*/ -static Rrc_State_t rrc_get_state (module_id_t Mod_id) { - return UE_rrc_inst[Mod_id].RrcState; +static Rrc_State_t rrc_get_state (module_id_t ue_mod_idP) { + return UE_rrc_inst[ue_mod_idP].RrcState; } -static Rrc_Sub_State_t rrc_get_sub_state (module_id_t Mod_id) { - return UE_rrc_inst[Mod_id].RrcSubState; +static Rrc_Sub_State_t rrc_get_sub_state (module_id_t ue_mod_idP) { + return UE_rrc_inst[ue_mod_idP].RrcSubState; } -static int rrc_set_state (module_id_t Mod_id, Rrc_State_t state) { +static int rrc_set_state (module_id_t ue_mod_idP, Rrc_State_t state) { AssertFatal ((RRC_STATE_FIRST <= state) && (state <= RRC_STATE_LAST), "Invalid state %d!\n", state); - if (UE_rrc_inst[Mod_id].RrcState != state) { - UE_rrc_inst[Mod_id].RrcState = state; + if (UE_rrc_inst[ue_mod_idP].RrcState != state) { + UE_rrc_inst[ue_mod_idP].RrcState = state; #if defined(ENABLE_ITTI) { MessageDef *msg_p; msg_p = itti_alloc_new_message(TASK_RRC_UE, RRC_STATE_IND); - RRC_STATE_IND(msg_p).state = UE_rrc_inst[Mod_id].RrcState; - RRC_STATE_IND(msg_p).sub_state = UE_rrc_inst[Mod_id].RrcSubState; + RRC_STATE_IND(msg_p).state = UE_rrc_inst[ue_mod_idP].RrcState; + RRC_STATE_IND(msg_p).sub_state = UE_rrc_inst[ue_mod_idP].RrcSubState; - itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + Mod_id, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + ue_mod_idP, msg_p); } #endif return (1); @@ -136,38 +136,38 @@ static int rrc_set_state (module_id_t Mod_id, Rrc_State_t state) { return (0); } -static int rrc_set_sub_state (module_id_t Mod_id, Rrc_Sub_State_t subState) { +static int rrc_set_sub_state (module_id_t ue_mod_idP, Rrc_Sub_State_t subState) { #if (defined(ENABLE_ITTI) && (defined(ENABLE_USE_MME) || defined(ENABLE_RAL))) - switch (UE_rrc_inst[Mod_id].RrcState) { + switch (UE_rrc_inst[ue_mod_idP].RrcState) { case RRC_STATE_INACTIVE: AssertFatal ((RRC_SUB_STATE_INACTIVE_FIRST <= subState) && (subState <= RRC_SUB_STATE_INACTIVE_LAST), - "Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[Mod_id].RrcState); + "Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[ue_mod_idP].RrcState); break; case RRC_STATE_IDLE: AssertFatal ((RRC_SUB_STATE_IDLE_FIRST <= subState) && (subState <= RRC_SUB_STATE_IDLE_LAST), - "Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[Mod_id].RrcState); + "Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[ue_mod_idP].RrcState); break; case RRC_STATE_CONNECTED: AssertFatal ((RRC_SUB_STATE_CONNECTED_FIRST <= subState) && (subState <= RRC_SUB_STATE_CONNECTED_LAST), - "Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[Mod_id].RrcState); + "Invalid sub state %d for state %d!\n", subState, UE_rrc_inst[ue_mod_idP].RrcState); break; } #endif - if (UE_rrc_inst[Mod_id].RrcSubState != subState) { - UE_rrc_inst[Mod_id].RrcSubState = subState; + if (UE_rrc_inst[ue_mod_idP].RrcSubState != subState) { + UE_rrc_inst[ue_mod_idP].RrcSubState = subState; #if defined(ENABLE_ITTI) { MessageDef *msg_p; msg_p = itti_alloc_new_message(TASK_RRC_UE, RRC_STATE_IND); - RRC_STATE_IND(msg_p).state = UE_rrc_inst[Mod_id].RrcState; - RRC_STATE_IND(msg_p).sub_state = UE_rrc_inst[Mod_id].RrcSubState; + RRC_STATE_IND(msg_p).state = UE_rrc_inst[ue_mod_idP].RrcState; + RRC_STATE_IND(msg_p).sub_state = UE_rrc_inst[ue_mod_idP].RrcSubState; - itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + Mod_id, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + ue_mod_idP, msg_p); } #endif return (1); @@ -177,40 +177,40 @@ static int rrc_set_sub_state (module_id_t Mod_id, Rrc_Sub_State_t subState) { } /*------------------------------------------------------------------------------*/ -void init_SI_UE(module_id_t Mod_id,uint8_t eNB_index) { +void init_SI_UE(module_id_t ue_mod_idP,uint8_t eNB_index) { int i; - UE_rrc_inst[Mod_id].sizeof_SIB1[eNB_index] = 0; - UE_rrc_inst[Mod_id].sizeof_SI[eNB_index] = 0; + UE_rrc_inst[ue_mod_idP].sizeof_SIB1[eNB_index] = 0; + UE_rrc_inst[ue_mod_idP].sizeof_SI[eNB_index] = 0; - UE_rrc_inst[Mod_id].SIB1[eNB_index] = (uint8_t *)malloc16(32); - UE_rrc_inst[Mod_id].sib1[eNB_index] = (SystemInformationBlockType1_t *)malloc16(sizeof(SystemInformationBlockType1_t)); - UE_rrc_inst[Mod_id].SI[eNB_index] = (uint8_t *)malloc16(64); + UE_rrc_inst[ue_mod_idP].SIB1[eNB_index] = (uint8_t *)malloc16(32); + UE_rrc_inst[ue_mod_idP].sib1[eNB_index] = (SystemInformationBlockType1_t *)malloc16(sizeof(SystemInformationBlockType1_t)); + UE_rrc_inst[ue_mod_idP].SI[eNB_index] = (uint8_t *)malloc16(64); for (i=0;i][PDCP][MOD %02d][RB %02d]\n", - frameP, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); + frameP, ue_mod_idP+NB_eNB_INST, size, eNB_index, rrc_mui, ue_mod_idP+NB_eNB_INST, DCCH); - // rrc_rlc_data_req(Mod_id+NB_eNB_INST,frameP, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer); - pdcp_rrc_data_req (eNB_index, Mod_id, frameP, 0, DCCH, rrc_mui++, 0, size, buffer, 1); + // rrc_rlc_data_req(ue_mod_idP+NB_eNB_INST,frameP, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer); + pdcp_rrc_data_req (eNB_index, ue_mod_idP, frameP, 0, DCCH, rrc_mui++, 0, size, buffer, 1); } -void rrc_ue_generate_RRCConnectionReconfigurationComplete(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index, uint8_t Transaction_id) { +void rrc_ue_generate_RRCConnectionReconfigurationComplete(module_id_t ue_mod_idP, frame_t frameP, uint8_t eNB_index, uint8_t Transaction_id) { uint8_t buffer[32], size; - size = do_RRCConnectionReconfigurationComplete(Mod_id, buffer, Transaction_id); + size = do_RRCConnectionReconfigurationComplete(ue_mod_idP, 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,frameP, size, eNB_index); + ue_mod_idP,frameP, 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", - frameP, Mod_id+NB_eNB_INST, size, eNB_index, rrc_mui, Mod_id+NB_eNB_INST, DCCH); + frameP, ue_mod_idP+NB_eNB_INST, size, eNB_index, rrc_mui, ue_mod_idP+NB_eNB_INST, DCCH); - //rrc_rlc_data_req(Mod_id+NB_eNB_INST,frameP, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer); - pdcp_rrc_data_req (eNB_index, Mod_id, frameP, 0, DCCH, rrc_mui++, 0, size, buffer, 1); + //rrc_rlc_data_req(ue_mod_idP+NB_eNB_INST,frameP, 0 ,DCCH,rrc_mui++,0,size,(char*)buffer); + pdcp_rrc_data_req (eNB_index, ue_mod_idP, frameP, 0, DCCH, rrc_mui++, 0, size, buffer, 1); } /*------------------------------------------------------------------------------*/ -int rrc_ue_decode_ccch(module_id_t Mod_id, frame_t frameP, SRB_INFO *Srb_info, uint8_t eNB_index){ +int rrc_ue_decode_ccch(module_id_t ue_mod_idP, frame_t frameP, SRB_INFO *Srb_info, uint8_t eNB_index){ /*------------------------------------------------------------------------------*/ //DL_CCCH_Message_t dlccchmsg; @@ -405,8 +405,8 @@ int rrc_ue_decode_ccch(module_id_t Mod_id, frame_t frameP, SRB_INFO *Srb_info, u //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); + // LOG_D(RRC,"[UE %d] Decoding DL-CCCH message (%d bytes), State %d\n",ue_mod_idP,Srb_info->Rx_buffer.payload_size, + // UE_rrc_inst[ue_mod_idP].Info[eNB_index].State); dec_rval = uper_decode(NULL, &asn_DEF_DL_CCCH_Message, @@ -426,7 +426,7 @@ int rrc_ue_decode_ccch(module_id_t Mod_id, frame_t frameP, SRB_INFO *Srb_info, u msg_p = itti_alloc_new_message (TASK_RRC_UE, RRC_DL_CCCH_MESSAGE); memcpy (&msg_p->ittiMsg, (void *) dl_ccch_msg, sizeof(RrcDlCcchMessage)); - itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task (TASK_UNKNOWN, ue_mod_idP + NB_eNB_INST, msg_p); } # else { @@ -441,77 +441,77 @@ int rrc_ue_decode_ccch(module_id_t Mod_id, frame_t frameP, SRB_INFO *Srb_info, u msg_p->ittiMsg.rrc_dl_ccch.size = message_string_size; memcpy(&msg_p->ittiMsg.rrc_dl_ccch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, ue_mod_idP + NB_eNB_INST, msg_p); } } # endif #endif if ((dec_rval.code != RC_OK) && (dec_rval.consumed==0)) { - LOG_E(RRC,"[UE %d] Frame %d : Failed to decode DL-CCCH-Message (%d bytes)\n",Mod_id,dec_rval.consumed); + LOG_E(RRC,"[UE %d] Frame %d : Failed to decode DL-CCCH-Message (%d bytes)\n",ue_mod_idP,dec_rval.consumed); vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_CCCH, VCD_FUNCTION_OUT); return -1; } if (dl_ccch_msg->message.present == DL_CCCH_MessageType_PR_c1) { - if (UE_rrc_inst[Mod_id].Info[eNB_index].State == RRC_SI_RECEIVED) { + if (UE_rrc_inst[ue_mod_idP].Info[eNB_index].State == RRC_SI_RECEIVED) { switch (dl_ccch_msg->message.choice.c1.present) { case DL_CCCH_MessageType__c1_PR_NOTHING: - LOG_I(RRC, "[UE%d] Frame %d : Received PR_NOTHING on DL-CCCH-Message\n", Mod_id, frameP); + LOG_I(RRC, "[UE%d] Frame %d : Received PR_NOTHING on DL-CCCH-Message\n", ue_mod_idP, frameP); rval = 0; break; case DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishment: LOG_D(RRC, - "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReestablishment ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, Mod_id+NB_eNB_INST, eNB_index, Mod_id+NB_eNB_INST); + "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReestablishment ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, ue_mod_idP+NB_eNB_INST, eNB_index, ue_mod_idP+NB_eNB_INST); LOG_I(RRC, - "[UE%d] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionReestablishment\n", Mod_id, frameP); + "[UE%d] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionReestablishment\n", ue_mod_idP, frameP); rval = 0; break; case DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentReject: LOG_D(RRC, - "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (RRCConnectionReestablishmentReject ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, Mod_id+NB_eNB_INST, eNB_index, Mod_id+NB_eNB_INST); + "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (RRCConnectionReestablishmentReject ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, ue_mod_idP+NB_eNB_INST, eNB_index, ue_mod_idP+NB_eNB_INST); LOG_I(RRC, - "[UE%d] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionReestablishmentReject\n", Mod_id, frameP); + "[UE%d] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionReestablishmentReject\n", ue_mod_idP, frameP); rval = 0; break; case DL_CCCH_MessageType__c1_PR_rrcConnectionReject: LOG_D(RRC, - "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReject ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, Mod_id+NB_eNB_INST, eNB_index, Mod_id+NB_eNB_INST); + "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReject ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, ue_mod_idP+NB_eNB_INST, eNB_index, ue_mod_idP+NB_eNB_INST); LOG_I(RRC, - "[UE%d] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionReject \n", Mod_id, frameP); + "[UE%d] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionReject \n", ue_mod_idP, frameP); rval = 0; break; case DL_CCCH_MessageType__c1_PR_rrcConnectionSetup: LOG_D(RRC, - "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (rrcConnectionSetup ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, Mod_id+NB_eNB_INST, eNB_index, Mod_id+NB_eNB_INST); + "[MSC_MSG][FRAME %05d][MAC_UE][MOD %02d][][--- MAC_DATA_IND (rrcConnectionSetup ENB %d) --->][RRC_UE][MOD %02d][]\n", frameP, ue_mod_idP+NB_eNB_INST, eNB_index, ue_mod_idP+NB_eNB_INST); LOG_I(RRC, - "[UE%d][RAPROC] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionSetup \n", Mod_id, frameP); + "[UE%d][RAPROC] Frame %d : Logical Channel DL-CCCH (SRB0), Received RRCConnectionSetup \n", ue_mod_idP, frameP); // Get configuration // Release T300 timer - UE_rrc_inst[Mod_id].Info[eNB_index].T300_active = 0; - rrc_ue_process_radioResourceConfigDedicated(Mod_id, frameP, eNB_index, + UE_rrc_inst[ue_mod_idP].Info[eNB_index].T300_active = 0; + rrc_ue_process_radioResourceConfigDedicated(ue_mod_idP, frameP, eNB_index, &dl_ccch_msg->message.choice.c1.choice.rrcConnectionSetup.criticalExtensions.choice.c1.choice.rrcConnectionSetup_r8.radioResourceConfigDedicated); - rrc_set_state (Mod_id, RRC_STATE_CONNECTED); - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_CONNECTED); - rrc_ue_generate_RRCConnectionSetupComplete(Mod_id, frameP, eNB_index, dl_ccch_msg->message.choice.c1.choice.rrcConnectionSetup.rrc_TransactionIdentifier); + rrc_set_state (ue_mod_idP, RRC_STATE_CONNECTED); + rrc_set_sub_state (ue_mod_idP, RRC_SUB_STATE_CONNECTED); + rrc_ue_generate_RRCConnectionSetupComplete(ue_mod_idP, frameP, eNB_index, dl_ccch_msg->message.choice.c1.choice.rrcConnectionSetup.rrc_TransactionIdentifier); rval = 0; break; default: - LOG_E(RRC, "[UE%d] Frame %d : Unknown message\n", Mod_id, frameP); + LOG_E(RRC, "[UE%d] Frame %d : Unknown message\n", ue_mod_idP, frameP); rval = -1; break; } @@ -522,69 +522,69 @@ int rrc_ue_decode_ccch(module_id_t Mod_id, frame_t frameP, SRB_INFO *Srb_info, u return rval; } -int32_t rrc_ue_establish_srb1(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index, struct SRB_ToAddMod *SRB_config) { +int32_t rrc_ue_establish_srb1(module_id_t ue_mod_idP, frame_t frameP,uint8_t eNB_index, struct SRB_ToAddMod *SRB_config) { // add descriptor from RRC PDU uint8_t lchan_id = DCCH; - UE_rrc_inst[Mod_id].Srb1[eNB_index].Active = 1; - UE_rrc_inst[Mod_id].Srb1[eNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG - UE_rrc_inst[Mod_id].Srb1[eNB_index].Srb_info.Srb_id = 1; + UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Active = 1; + UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG + UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Srb_info.Srb_id = 1; // copy default configuration for now - // memcpy(&UE_rrc_inst[Mod_id].Srb1[eNB_index].Srb_info.Lchan_desc[0],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); - // memcpy(&UE_rrc_inst[Mod_id].Srb1[eNB_index].Srb_info.Lchan_desc[1],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); + // memcpy(&UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Srb_info.Lchan_desc[0],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); + // memcpy(&UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Srb_info.Lchan_desc[1],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); - LOG_I(RRC,"[UE %d], CONFIG_SRB1 %d corresponding to eNB_index %d\n", Mod_id,lchan_id,eNB_index); + LOG_I(RRC,"[UE %d], CONFIG_SRB1 %d corresponding to eNB_index %d\n", ue_mod_idP,lchan_id,eNB_index); - //rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, lchan_id,UNDEF_SECURITY_MODE); - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,lchan_id,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + //rrc_pdcp_config_req (ue_mod_idP+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, lchan_id,UNDEF_SECURITY_MODE); + // rrc_rlc_config_req(ue_mod_idP+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,lchan_id,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - // UE_rrc_inst[Mod_id].Srb1[eNB_index].Srb_info.Tx_buffer.payload_size=DEFAULT_MEAS_IND_SIZE+1; + // UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Srb_info.Tx_buffer.payload_size=DEFAULT_MEAS_IND_SIZE+1; return(0); } -int32_t rrc_ue_establish_srb2(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index, struct SRB_ToAddMod *SRB_config) { +int32_t rrc_ue_establish_srb2(module_id_t ue_mod_idP, frame_t frameP,uint8_t eNB_index, struct SRB_ToAddMod *SRB_config) { // add descriptor from RRC PDU uint8_t lchan_id = DCCH1; - UE_rrc_inst[Mod_id].Srb2[eNB_index].Active = 1; - UE_rrc_inst[Mod_id].Srb2[eNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG - UE_rrc_inst[Mod_id].Srb2[eNB_index].Srb_info.Srb_id = 2; + UE_rrc_inst[ue_mod_idP].Srb2[eNB_index].Active = 1; + UE_rrc_inst[ue_mod_idP].Srb2[eNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG + UE_rrc_inst[ue_mod_idP].Srb2[eNB_index].Srb_info.Srb_id = 2; // copy default configuration for now - // memcpy(&UE_rrc_inst[Mod_id].Srb2[eNB_index].Srb_info.Lchan_desc[0],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); - // memcpy(&UE_rrc_inst[Mod_id].Srb2[eNB_index].Srb_info.Lchan_desc[1],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); + // memcpy(&UE_rrc_inst[ue_mod_idP].Srb2[eNB_index].Srb_info.Lchan_desc[0],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); + // memcpy(&UE_rrc_inst[ue_mod_idP].Srb2[eNB_index].Srb_info.Lchan_desc[1],&DCCH_LCHAN_DESC,LCHAN_DESC_SIZE); - LOG_I(RRC,"[UE %d], CONFIG_SRB2 %d corresponding to eNB_index %d\n",Mod_id,lchan_id,eNB_index); + LOG_I(RRC,"[UE %d], CONFIG_SRB2 %d corresponding to eNB_index %d\n",ue_mod_idP,lchan_id,eNB_index); - //rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, lchan_id, UNDEF_SECURITY_MODE); - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,lchan_id,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + //rrc_pdcp_config_req (ue_mod_idP+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, lchan_id, UNDEF_SECURITY_MODE); + // rrc_rlc_config_req(ue_mod_idP+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,lchan_id,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - // UE_rrc_inst[Mod_id].Srb1[eNB_index].Srb_info.Tx_buffer.payload_size=DEFAULT_MEAS_IND_SIZE+1; + // UE_rrc_inst[ue_mod_idP].Srb1[eNB_index].Srb_info.Tx_buffer.payload_size=DEFAULT_MEAS_IND_SIZE+1; return(0); } -int32_t rrc_ue_establish_drb(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index, +int32_t rrc_ue_establish_drb(module_id_t ue_mod_idP, frame_t frameP,uint8_t 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 %d] Frame %d: processing RRCConnectionReconfiguration: reconfiguring DRB %ld/LCID %d\n", - Mod_id, frameP, DRB_config->drb_Identity, (int)*DRB_config->logicalChannelIdentity); + ue_mod_idP, frameP, DRB_config->drb_Identity, (int)*DRB_config->logicalChannelIdentity); /* - rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, + rrc_pdcp_config_req (ue_mod_idP+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity, UNDEF_SECURITY_MODE); - rrc_rlc_config_req(Mod_id+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD, + rrc_rlc_config_req(ue_mod_idP+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD, (eNB_index * NB_RB_MAX) + *DRB_config->logicalChannelIdentity, RADIO_ACCESS_BEARER,Rlc_info_um); */ @@ -597,32 +597,32 @@ int32_t rrc_ue_establish_drb(module_id_t Mod_id, frame_t frameP,uint8_t eNB_inde ip_addr_offset4 = 8; # 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); - 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 + LOG_I(OIP,"[UE %d] trying to bring up the OAI interface oai%d, IP 10.0.%d.%d\n", ue_mod_idP, ip_addr_offset3+ue_mod_idP, + ip_addr_offset3+ue_mod_idP+1,ip_addr_offset4+ue_mod_idP+1); + oip_ifup=nas_config(ip_addr_offset3+ue_mod_idP, // interface_id + ip_addr_offset3+ue_mod_idP+1, // third_octet + ip_addr_offset4+ue_mod_idP+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; + oai_emulation.info.oai_ifup[ue_mod_idP]=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, + ue_mod_idP, + ip_addr_offset3+ue_mod_idP, (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 + ue_mod_idP,//cx align with the UE index + ip_addr_offset3+ue_mod_idP,//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); + ipv4_address(ip_addr_offset3+ue_mod_idP+1,ip_addr_offset4+ue_mod_idP+1),//saddr + ipv4_address(ip_addr_offset3+ue_mod_idP+1,eNB_index+1));//daddr + LOG_D(RRC,"[UE %d] State = Attached (eNB %d)\n",ue_mod_idP,eNB_index); } # else # ifdef OAI_EMU - oai_emulation.info.oai_ifup[Mod_id]=1; + oai_emulation.info.oai_ifup[ue_mod_idP]=1; # endif # endif #endif @@ -631,7 +631,7 @@ int32_t rrc_ue_establish_drb(module_id_t Mod_id, frame_t frameP,uint8_t eNB_inde } -void rrc_ue_process_measConfig(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index,MeasConfig_t *measConfig){ +void rrc_ue_process_measConfig(module_id_t ue_mod_idP, frame_t frameP, uint8_t eNB_index,MeasConfig_t *measConfig){ // This is the procedure described in 36.331 Section 5.5.2.1 int i; @@ -641,7 +641,7 @@ void rrc_ue_process_measConfig(module_id_t Mod_id, frame_t frameP, uint8_t eNB_ if (measConfig->measObjectToRemoveList != NULL) { for (i=0;imeasObjectToRemoveList->list.count;i++) { ind = *measConfig->measObjectToRemoveList->list.array[i]; - free(UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1]); + free(UE_rrc_inst[ue_mod_idP].MeasObj[eNB_index][ind-1]); } } if (measConfig->measObjectToAddModList != NULL) { @@ -650,9 +650,9 @@ void rrc_ue_process_measConfig(module_id_t Mod_id, frame_t frameP, uint8_t eNB_ measObj = measConfig->measObjectToAddModList->list.array[i]; ind = measConfig->measObjectToAddModList->list.array[i]->measObjectId; - if (UE_rrc_inst[Mod_id].MeasObj[eNB_index][ind-1]) { + if (UE_rrc_inst[ue_mod_idP].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], + memcpy((char*)UE_rrc_inst[ue_mod_idP].MeasObj[eNB_index][ind-1], (char*)measObj, sizeof(MeasObjectToAddMod_t)); } @@ -664,14 +664,14 @@ void rrc_ue_process_measConfig(module_id_t Mod_id, frame_t frameP, uint8_t eNB_ 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; + UE_rrc_inst[ue_mod_idP].MeasObj[eNB_index][ind-1]=measObj; } } } - rrc_mac_config_req(Mod_id,0,0,eNB_index, + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, - UE_rrc_inst[Mod_id].MeasObj[eNB_index], + UE_rrc_inst[ue_mod_idP].MeasObj[eNB_index], (MAC_MainConfig_t *)NULL, 0, (struct LogicalChannelConfig *)NULL, @@ -700,112 +700,112 @@ void rrc_ue_process_measConfig(module_id_t Mod_id, frame_t frameP, uint8_t eNB_ if (measConfig->reportConfigToRemoveList != NULL) { for (i=0;ireportConfigToRemoveList->list.count;i++) { ind = *measConfig->reportConfigToRemoveList->list.array[i]; - free(UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1]); + free(UE_rrc_inst[ue_mod_idP].ReportConfig[eNB_index][ind-1]); } } if (measConfig->reportConfigToAddModList != NULL) { LOG_I(RRC,"Report Configuration List is present\n"); for (i=0;ireportConfigToAddModList->list.count;i++) { ind = measConfig->reportConfigToAddModList->list.array[i]->reportConfigId; - if (UE_rrc_inst[Mod_id].ReportConfig[eNB_index][ind-1]) { + if (UE_rrc_inst[ue_mod_idP].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], + memcpy((char*)UE_rrc_inst[ue_mod_idP].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]; + UE_rrc_inst[ue_mod_idP].ReportConfig[eNB_index][ind-1] = measConfig->reportConfigToAddModList->list.array[i]; } } } if (measConfig->quantityConfig != NULL) { - if (UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]) { + if (UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index]) { LOG_D(RRC,"Modifying Quantity Configuration \n"); - memcpy((char*)UE_rrc_inst[Mod_id].QuantityConfig[eNB_index], + memcpy((char*)UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index], (char*)measConfig->quantityConfig, sizeof(QuantityConfig_t)); } else { LOG_D(RRC,"Adding Quantity configuration\n"); - UE_rrc_inst[Mod_id].QuantityConfig[eNB_index] = measConfig->quantityConfig; + UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index] = measConfig->quantityConfig; } } if (measConfig->measIdToRemoveList != NULL) { for (i=0;imeasIdToRemoveList->list.count;i++) { ind = *measConfig->measIdToRemoveList->list.array[i]; - free(UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1]); + free(UE_rrc_inst[ue_mod_idP].MeasId[eNB_index][ind-1]); } } if (measConfig->measIdToAddModList != NULL) { for (i=0;imeasIdToAddModList->list.count;i++) { ind = measConfig->measIdToAddModList->list.array[i]->measId; - if (UE_rrc_inst[Mod_id].MeasId[eNB_index][ind-1]) { + if (UE_rrc_inst[ue_mod_idP].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], + memcpy((char*)UE_rrc_inst[ue_mod_idP].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]; + UE_rrc_inst[ue_mod_idP].MeasId[eNB_index][ind-1] = measConfig->measIdToAddModList->list.array[i]; } } } if (measConfig->measGapConfig !=NULL) { - if (UE_rrc_inst[Mod_id].measGapConfig[eNB_index]) { - memcpy((char*)UE_rrc_inst[Mod_id].measGapConfig[eNB_index], + if (UE_rrc_inst[ue_mod_idP].measGapConfig[eNB_index]) { + memcpy((char*)UE_rrc_inst[ue_mod_idP].measGapConfig[eNB_index], (char*)measConfig->measGapConfig, sizeof(MeasGapConfig_t)); } else { - UE_rrc_inst[Mod_id].measGapConfig[eNB_index] = measConfig->measGapConfig; + UE_rrc_inst[ue_mod_idP].measGapConfig[eNB_index] = measConfig->measGapConfig; } } if (measConfig->quantityConfig != NULL) { - if (UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]) { + if (UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index]) { LOG_I(RRC,"Modifying Quantity Configuration \n"); - memcpy((char*)UE_rrc_inst[Mod_id].QuantityConfig[eNB_index], + memcpy((char*)UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index], (char*)measConfig->quantityConfig, sizeof(QuantityConfig_t)); } else { LOG_I(RRC,"Adding Quantity configuration\n"); - UE_rrc_inst[Mod_id].QuantityConfig[eNB_index] = measConfig->quantityConfig; + UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index] = measConfig->quantityConfig; } - UE_rrc_inst[Mod_id].filter_coeff_rsrp = 1./pow(2,(*UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRP)/4); - UE_rrc_inst[Mod_id].filter_coeff_rsrq = 1./pow(2,(*UE_rrc_inst[Mod_id].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRQ)/4); + UE_rrc_inst[ue_mod_idP].filter_coeff_rsrp = 1./pow(2,(*UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRP)/4); + UE_rrc_inst[ue_mod_idP].filter_coeff_rsrq = 1./pow(2,(*UE_rrc_inst[ue_mod_idP].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); + ue_mod_idP, eNB_index, // UE_rrc_inst[ue_mod_idP].Info[eNB_index].UE_index, + *UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRP, + *UE_rrc_inst[ue_mod_idP].QuantityConfig[eNB_index]->quantityConfigEUTRA->filterCoefficientRSRQ, + UE_rrc_inst[ue_mod_idP].filter_coeff_rsrp, UE_rrc_inst[ue_mod_idP].filter_coeff_rsrp, + UE_rrc_inst[ue_mod_idP].filter_coeff_rsrp, UE_rrc_inst[ue_mod_idP].filter_coeff_rsrq); } if (measConfig->s_Measure != NULL) { - UE_rrc_inst[Mod_id].s_measure = *measConfig->s_Measure; + UE_rrc_inst[ue_mod_idP].s_measure = *measConfig->s_Measure; } if (measConfig->speedStatePars != NULL) { - if (UE_rrc_inst[Mod_id].speedStatePars) - memcpy((char*)UE_rrc_inst[Mod_id].speedStatePars,(char*)measConfig->speedStatePars,sizeof(struct MeasConfig__speedStatePars)); + if (UE_rrc_inst[ue_mod_idP].speedStatePars) + memcpy((char*)UE_rrc_inst[ue_mod_idP].speedStatePars,(char*)measConfig->speedStatePars,sizeof(struct MeasConfig__speedStatePars)); else - UE_rrc_inst[Mod_id].speedStatePars = measConfig->speedStatePars; + UE_rrc_inst[ue_mod_idP].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); + ue_mod_idP,UE_rrc_inst[ue_mod_idP].Info[0].UE_index); } } void -rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index, +rrc_ue_process_radioResourceConfigDedicated(module_id_t ue_mod_idP, frame_t frameP, uint8_t eNB_index, RadioResourceConfigDedicated_t *radioResourceConfigDedicated) { long SRB_id,DRB_id; @@ -818,35 +818,35 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, // Save physicalConfigDedicated if present 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, + if (UE_rrc_inst[ue_mod_idP].physicalConfigDedicated[eNB_index]) { + memcpy((char*)UE_rrc_inst[ue_mod_idP].physicalConfigDedicated[eNB_index],(char*)radioResourceConfigDedicated->physicalConfigDedicated, sizeof(struct PhysicalConfigDedicated)); } else { - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index] = radioResourceConfigDedicated->physicalConfigDedicated; + UE_rrc_inst[ue_mod_idP].physicalConfigDedicated[eNB_index] = radioResourceConfigDedicated->physicalConfigDedicated; } } // Apply macMainConfig if present 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, + if (UE_rrc_inst[ue_mod_idP].mac_MainConfig[eNB_index]) { + memcpy((char*)UE_rrc_inst[ue_mod_idP].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[ue_mod_idP].mac_MainConfig[eNB_index] = &radioResourceConfigDedicated->mac_MainConfig->choice.explicitValue; } } // Apply spsConfig if present 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, + if (UE_rrc_inst[ue_mod_idP].sps_Config[eNB_index]) { + memcpy(UE_rrc_inst[ue_mod_idP].sps_Config[eNB_index],radioResourceConfigDedicated->sps_Config, sizeof(struct SPS_Config)); } else { - UE_rrc_inst[Mod_id].sps_Config[eNB_index] = radioResourceConfigDedicated->sps_Config; + UE_rrc_inst[ue_mod_idP].sps_Config[eNB_index] = radioResourceConfigDedicated->sps_Config; } } #ifdef CBA @@ -854,17 +854,17 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, cba_RNTI = (uint16_t) (((radioResourceConfigDedicated->cba_RNTI_vlola->buf[1]&0xff) << 8) | (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 ) { + if (UE_rrc_inst[ue_mod_idP].cba_rnti[i] == cba_RNTI ) { cba_found=1; break; - } else if (UE_rrc_inst[Mod_id].cba_rnti[i] == 0 ) + } else if (UE_rrc_inst[ue_mod_idP].cba_rnti[i] == 0 ) break; } if (cba_found==0) { - UE_rrc_inst[Mod_id].num_active_cba_groups++; - UE_rrc_inst[Mod_id].cba_rnti[i]=cba_RNTI; + UE_rrc_inst[ue_mod_idP].num_active_cba_groups++; + UE_rrc_inst[ue_mod_idP].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,frameP, UE_rrc_inst[Mod_id].cba_rnti[i], i, eNB_index); + ue_mod_idP,frameP, UE_rrc_inst[ue_mod_idP].cba_rnti[i], i, eNB_index); } } #endif @@ -875,19 +875,19 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, uint8_t *kRRCint = NULL; #if defined(ENABLE_SECURITY) - derive_key_rrc_enc(UE_rrc_inst[Mod_id].ciphering_algorithm, - UE_rrc_inst[Mod_id].kenb, &kRRCenc); - derive_key_rrc_int(UE_rrc_inst[Mod_id].integrity_algorithm, - UE_rrc_inst[Mod_id].kenb, &kRRCint); + derive_key_rrc_enc(UE_rrc_inst[ue_mod_idP].ciphering_algorithm, + UE_rrc_inst[ue_mod_idP].kenb, &kRRCenc); + derive_key_rrc_int(UE_rrc_inst[ue_mod_idP].integrity_algorithm, + UE_rrc_inst[ue_mod_idP].kenb, &kRRCint); #endif // Refresh SRBs - rrc_pdcp_config_asn1_req(eNB_index,Mod_id,frameP,0, + rrc_pdcp_config_asn1_req(eNB_index,ue_mod_idP,frameP,0, radioResourceConfigDedicated->srb_ToAddModList, (DRB_ToAddModList_t*)NULL, (DRB_ToReleaseList_t*)NULL, - UE_rrc_inst[Mod_id].ciphering_algorithm | - (UE_rrc_inst[Mod_id].integrity_algorithm << 4), + UE_rrc_inst[ue_mod_idP].ciphering_algorithm | + (UE_rrc_inst[ue_mod_idP].integrity_algorithm << 4), kRRCenc, kRRCint, NULL @@ -897,7 +897,7 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, ); // Refresh SRBs - rrc_rlc_config_asn1_req(eNB_index,Mod_id,frameP,0, + rrc_rlc_config_asn1_req(eNB_index,ue_mod_idP,frameP,0, radioResourceConfigDedicated->srb_ToAddModList, (DRB_ToAddModList_t*)NULL, (DRB_ToReleaseList_t*)NULL @@ -909,19 +909,19 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, for (cnt=0;cntsrb_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,frameP,cnt,SRB_id); + LOG_D(RRC,"[UE %d]: Frame %d SRB config cnt %d (SRB%ld)\n",ue_mod_idP,frameP,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], + if (UE_rrc_inst[ue_mod_idP].SRB1_config[eNB_index]) { + memcpy(UE_rrc_inst[ue_mod_idP].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]; + UE_rrc_inst[ue_mod_idP].SRB1_config[eNB_index] = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]; - rrc_ue_establish_srb1(Mod_id,frameP,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; + rrc_ue_establish_srb1(ue_mod_idP,frameP,eNB_index,radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]); + if (UE_rrc_inst[ue_mod_idP].SRB1_config[eNB_index]->logicalChannelConfig) { + if (UE_rrc_inst[ue_mod_idP].SRB1_config[eNB_index]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { + SRB1_logicalChannelConfig = &UE_rrc_inst[ue_mod_idP].SRB1_config[eNB_index]->logicalChannelConfig->choice.explicitValue; } else { SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; @@ -932,12 +932,12 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, } LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 eNB %d) --->][MAC_UE][MOD %02d][]\n", - frameP, Mod_id, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, + frameP, ue_mod_idP, eNB_index, ue_mod_idP); + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], + UE_rrc_inst[ue_mod_idP].physicalConfigDedicated[eNB_index], (MeasObjectToAddMod_t **)NULL, - UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], + UE_rrc_inst[ue_mod_idP].mac_MainConfig[eNB_index], 1, SRB1_logicalChannelConfig, (MeasGapConfig_t *)NULL, @@ -964,19 +964,19 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, } } 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], + if (UE_rrc_inst[ue_mod_idP].SRB2_config[eNB_index]) { + memcpy(UE_rrc_inst[ue_mod_idP].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[ue_mod_idP].SRB2_config[eNB_index] = radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]; - rrc_ue_establish_srb2(Mod_id,frameP,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){ + rrc_ue_establish_srb2(ue_mod_idP,frameP,eNB_index,radioResourceConfigDedicated->srb_ToAddModList->list.array[cnt]); + if (UE_rrc_inst[ue_mod_idP].SRB2_config[eNB_index]->logicalChannelConfig) { + if (UE_rrc_inst[ue_mod_idP].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; + SRB2_logicalChannelConfig = &UE_rrc_inst[ue_mod_idP].SRB2_config[eNB_index]->logicalChannelConfig->choice.explicitValue; } else { LOG_I(RRC,"Applying default SRB2 logicalChannelConfig\n"); @@ -988,15 +988,15 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, } LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SRB2 eNB %d) --->][MAC_UE][MOD %02d][]\n", - frameP, Mod_id, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, + frameP, ue_mod_idP, eNB_index, ue_mod_idP); + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], + UE_rrc_inst[ue_mod_idP].physicalConfigDedicated[eNB_index], (MeasObjectToAddMod_t **)NULL, - UE_rrc_inst[Mod_id].mac_MainConfig[eNB_index], + UE_rrc_inst[ue_mod_idP].mac_MainConfig[eNB_index], 2, SRB2_logicalChannelConfig, - UE_rrc_inst[Mod_id].measGapConfig[eNB_index], + UE_rrc_inst[ue_mod_idP].measGapConfig[eNB_index], (TDD_Config_t *)NULL, (MobilityControlInfo_t *)NULL, NULL, @@ -1027,17 +1027,17 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, uint8_t *kUPenc = NULL; #if defined(ENABLE_SECURITY) - derive_key_up_enc(UE_rrc_inst[Mod_id].integrity_algorithm, - UE_rrc_inst[Mod_id].kenb, &kUPenc); + derive_key_up_enc(UE_rrc_inst[ue_mod_idP].integrity_algorithm, + UE_rrc_inst[ue_mod_idP].kenb, &kUPenc); #endif // Refresh DRBs - rrc_pdcp_config_asn1_req(eNB_index, Mod_id,frameP,0, + rrc_pdcp_config_asn1_req(eNB_index, ue_mod_idP,frameP,0, (SRB_ToAddModList_t*)NULL, radioResourceConfigDedicated->drb_ToAddModList, (DRB_ToReleaseList_t*)NULL, - UE_rrc_inst[Mod_id].ciphering_algorithm | - (UE_rrc_inst[Mod_id].integrity_algorithm << 4), + UE_rrc_inst[ue_mod_idP].ciphering_algorithm | + (UE_rrc_inst[ue_mod_idP].integrity_algorithm << 4), NULL, NULL, kUPenc @@ -1047,7 +1047,7 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, ); // Refresh DRBs - rrc_rlc_config_asn1_req(eNB_index,Mod_id,frameP,0, + rrc_rlc_config_asn1_req(eNB_index,ue_mod_idP,frameP,0, (SRB_ToAddModList_t*)NULL, radioResourceConfigDedicated->drb_ToAddModList, (DRB_ToReleaseList_t*)NULL @@ -1057,25 +1057,25 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, ); for (i=0;idrb_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], + if (UE_rrc_inst[ue_mod_idP].DRB_config[eNB_index][DRB_id]) { + memcpy(UE_rrc_inst[ue_mod_idP].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]; + UE_rrc_inst[ue_mod_idP].DRB_config[eNB_index][DRB_id] = radioResourceConfigDedicated->drb_ToAddModList->list.array[i]; - rrc_ue_establish_drb(Mod_id,frameP,eNB_index,radioResourceConfigDedicated->drb_ToAddModList->list.array[i]); + rrc_ue_establish_drb(ue_mod_idP,frameP,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", - frameP, Mod_id, radioResourceConfigDedicated->drb_ToAddModList->list.array[i]->drb_Identity, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, + frameP, ue_mod_idP, radioResourceConfigDedicated->drb_ToAddModList->list.array[i]->drb_Identity, eNB_index, ue_mod_idP); + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, - UE_rrc_inst[Mod_id].physicalConfigDedicated[eNB_index], + UE_rrc_inst[ue_mod_idP].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], + UE_rrc_inst[ue_mod_idP].mac_MainConfig[eNB_index], + *UE_rrc_inst[ue_mod_idP].DRB_config[eNB_index][DRB_id]->logicalChannelIdentity, + UE_rrc_inst[ue_mod_idP].DRB_config[eNB_index][DRB_id]->logicalChannelConfig, + UE_rrc_inst[ue_mod_idP].measGapConfig[eNB_index], (TDD_Config_t*)NULL, (MobilityControlInfo_t *)NULL, NULL, @@ -1092,8 +1092,8 @@ rrc_ue_process_radioResourceConfigDedicated(module_id_t Mod_id, frame_t frameP, #endif #ifdef CBA , -UE_rrc_inst[Mod_id].num_active_cba_groups, // -UE_rrc_inst[Mod_id].cba_rnti[0] +UE_rrc_inst[ue_mod_idP].num_active_cba_groups, // +UE_rrc_inst[ue_mod_idP].cba_rnti[0] #endif ); @@ -1101,13 +1101,13 @@ UE_rrc_inst[Mod_id].cba_rnti[0] } } - UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_CONNECTED; - LOG_I(RRC,"[UE %d] State = RRC_CONNECTED (eNB %d)\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].Info[eNB_index].State = RRC_CONNECTED; + LOG_I(RRC,"[UE %d] State = RRC_CONNECTED (eNB %d)\n",ue_mod_idP,eNB_index); } -void rrc_ue_process_securityModeCommand(uint8_t Mod_id, frame_t frameP,SecurityModeCommand_t *securityModeCommand,uint8_t eNB_index) { +void rrc_ue_process_securityModeCommand(uint8_t ue_mod_idP, frame_t frameP,SecurityModeCommand_t *securityModeCommand,uint8_t eNB_index) { asn_enc_rval_t enc_rval; @@ -1117,45 +1117,45 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id, frame_t frameP,SecurityM int i, securityMode; LOG_I(RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing securityModeCommand (eNB %d)\n", - Mod_id,frameP,eNB_index); + ue_mod_idP,frameP,eNB_index); switch (securityModeCommand->criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.cipheringAlgorithm){ case SecurityAlgorithmConfig__cipheringAlgorithm_eea0: - LOG_I(RRC,"[UE %d] Security algorithm is set to eea0\n",Mod_id); + LOG_I(RRC,"[UE %d] Security algorithm is set to eea0\n",ue_mod_idP); securityMode= SecurityAlgorithmConfig__cipheringAlgorithm_eea0; break; case SecurityAlgorithmConfig__cipheringAlgorithm_eea1: - LOG_I(RRC,"[UE %d] Security algorithm is set to eea1\n",Mod_id); + LOG_I(RRC,"[UE %d] Security algorithm is set to eea1\n",ue_mod_idP); securityMode= SecurityAlgorithmConfig__cipheringAlgorithm_eea1; break; case SecurityAlgorithmConfig__cipheringAlgorithm_eea2: - LOG_I(RRC,"[UE %d] Security algorithm is set to eea2\n",Mod_id); + LOG_I(RRC,"[UE %d] Security algorithm is set to eea2\n",ue_mod_idP); securityMode = SecurityAlgorithmConfig__cipheringAlgorithm_eea2; break; default: - LOG_I(RRC,"[UE %d] Security algorithm is set to none\n",Mod_id); + LOG_I(RRC,"[UE %d] Security algorithm is set to none\n",ue_mod_idP); securityMode = SecurityAlgorithmConfig__cipheringAlgorithm_spare1; break; } switch (securityModeCommand->criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm){ case SecurityAlgorithmConfig__integrityProtAlgorithm_eia1: - LOG_I(RRC,"[UE %d] Integrity protection algorithm is set to eia1\n",Mod_id); + LOG_I(RRC,"[UE %d] Integrity protection algorithm is set to eia1\n",ue_mod_idP); securityMode |= 1 << 5; break; case SecurityAlgorithmConfig__integrityProtAlgorithm_eia2: - LOG_I(RRC,"[UE %d] Integrity protection algorithm is set to eia2\n",Mod_id); + LOG_I(RRC,"[UE %d] Integrity protection algorithm is set to eia2\n",ue_mod_idP); securityMode |= 1 << 6; break; default: - LOG_I(RRC,"[UE %d] Integrity protection algorithm is set to none\n",Mod_id); + LOG_I(RRC,"[UE %d] Integrity protection algorithm is set to none\n",ue_mod_idP); securityMode |= 0x70 ; break; } - LOG_D(RRC,"[UE %d] security mode is %x \n",Mod_id, securityMode); + LOG_D(RRC,"[UE %d] security mode is %x \n",ue_mod_idP, securityMode); /* Store the parameters received */ - UE_rrc_inst[Mod_id].ciphering_algorithm = securityModeCommand->criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.cipheringAlgorithm; - UE_rrc_inst[Mod_id].integrity_algorithm = securityModeCommand->criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm; + UE_rrc_inst[ue_mod_idP].ciphering_algorithm = securityModeCommand->criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.cipheringAlgorithm; + UE_rrc_inst[ue_mod_idP].integrity_algorithm = securityModeCommand->criticalExtensions.choice.c1.choice.securityModeCommand_r8.securityConfigSMC.securityAlgorithmConfig.integrityProtAlgorithm; memset((void *)&ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); //memset((void *)&SecurityModeCommand,0,sizeof(SecurityModeCommand_t)); @@ -1174,7 +1174,7 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id, frame_t frameP,SecurityM 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,frameP,eNB_index); + ue_mod_idP,frameP,eNB_index); enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg, @@ -1201,7 +1201,7 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id, frame_t frameP,SecurityM msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size; memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + Mod_id, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + ue_mod_idP, msg_p); } } # endif @@ -1213,12 +1213,12 @@ void rrc_ue_process_securityModeCommand(uint8_t Mod_id, frame_t frameP,SecurityM for (i = 0; i < (enc_rval.encoded + 7) / 8; i++) LOG_T(RRC, "%02x.", buffer[i]); LOG_T(RRC, "\n"); - pdcp_rrc_data_req (eNB_index, Mod_id, frameP, 0, DCCH, rrc_mui++, 0, (enc_rval.encoded + 7) / 8, buffer, 1); + pdcp_rrc_data_req (eNB_index, ue_mod_idP, frameP, 0, DCCH, rrc_mui++, 0, (enc_rval.encoded + 7) / 8, buffer, 1); } } } -void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id, frame_t frameP,UECapabilityEnquiry_t *UECapabilityEnquiry,uint8_t eNB_index) { +void rrc_ue_process_ueCapabilityEnquiry(uint8_t ue_mod_idP, frame_t frameP,UECapabilityEnquiry_t *UECapabilityEnquiry,uint8_t eNB_index) { asn_enc_rval_t enc_rval; @@ -1231,7 +1231,7 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id, frame_t frameP,UECapabil int i; LOG_I(RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing UECapabilityEnquiry (eNB %d)\n", - Mod_id,frameP,eNB_index); + ue_mod_idP,frameP,eNB_index); memset((void *)&ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); @@ -1243,10 +1243,10 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id, frame_t frameP,UECapabil 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); - // 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; + (const char*)UE_rrc_inst[ue_mod_idP].UECapability, + UE_rrc_inst[ue_mod_idP].UECapability_size); + // ue_CapabilityRAT_Container.ueCapabilityRAT_Container.buf = UE_rrc_inst[ue_mod_idP].UECapability; + // ue_CapabilityRAT_Container.ueCapabilityRAT_Container.size = UE_rrc_inst[ue_mod_idP].UECapability_size; if (UECapabilityEnquiry->criticalExtensions.present == UECapabilityEnquiry__criticalExtensions_PR_c1) { @@ -1285,7 +1285,7 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id, frame_t frameP,UECapabil msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size; memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + Mod_id, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, NB_eNB_INST + ue_mod_idP, msg_p); } } # endif @@ -1297,7 +1297,7 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id, frame_t frameP,UECapabil for (i = 0; i < (enc_rval.encoded + 7) / 8; i++) LOG_T(RRC, "%02x.", buffer[i]); LOG_T(RRC, "\n"); - pdcp_rrc_data_req (eNB_index, Mod_id, frameP, 0, DCCH, rrc_mui++, 0, (enc_rval.encoded + 7) / 8, buffer, 1); + pdcp_rrc_data_req (eNB_index, ue_mod_idP, frameP, 0, DCCH, rrc_mui++, 0, (enc_rval.encoded + 7) / 8, buffer, 1); } } } @@ -1305,12 +1305,12 @@ void rrc_ue_process_ueCapabilityEnquiry(uint8_t Mod_id, frame_t frameP,UECapabil } -void rrc_ue_process_rrcConnectionReconfiguration(module_id_t Mod_id, frame_t frameP, +void rrc_ue_process_rrcConnectionReconfiguration(module_id_t ue_mod_idP, frame_t frameP, RRCConnectionReconfiguration_t *rrcConnectionReconfiguration, uint8_t eNB_index) { LOG_I(RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing RRCConnectionReconfiguration (eNB %d)\n", - Mod_id,frameP,eNB_index); + ue_mod_idP,frameP,eNB_index); if (rrcConnectionReconfiguration->criticalExtensions.present == RRCConnectionReconfiguration__criticalExtensions_PR_c1) { if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present == RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) { @@ -1318,16 +1318,16 @@ void rrc_ue_process_rrcConnectionReconfiguration(module_id_t Mod_id, frame_t fra if (rrcConnectionReconfiguration_r8->mobilityControlInfo) { LOG_I(RRC,"Mobility Control Information is present\n"); - rrc_ue_process_mobilityControlInfo(Mod_id, eNB_index, frameP, rrcConnectionReconfiguration_r8->mobilityControlInfo); + rrc_ue_process_mobilityControlInfo(ue_mod_idP, eNB_index, frameP, rrcConnectionReconfiguration_r8->mobilityControlInfo); } if (rrcConnectionReconfiguration_r8->measConfig != NULL) { LOG_I(RRC,"Measurement Configuration is present\n"); - rrc_ue_process_measConfig(Mod_id,frameP, eNB_index, + rrc_ue_process_measConfig(ue_mod_idP,frameP, eNB_index, rrcConnectionReconfiguration_r8->measConfig); } if (rrcConnectionReconfiguration_r8->radioResourceConfigDedicated) { LOG_I(RRC,"Radio Resource Configuration is present\n"); - rrc_ue_process_radioResourceConfigDedicated(Mod_id,frameP,eNB_index, rrcConnectionReconfiguration_r8->radioResourceConfigDedicated); + rrc_ue_process_radioResourceConfigDedicated(ue_mod_idP,frameP,eNB_index, rrcConnectionReconfiguration_r8->radioResourceConfigDedicated); } #if defined(ENABLE_ITTI) @@ -1347,7 +1347,7 @@ void rrc_ue_process_rrcConnectionReconfiguration(module_id_t Mod_id, frame_t fra NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.length = pdu_length; NAS_CONN_ESTABLI_CNF(msg_p).nasMsg.data = pdu_buffer; - itti_send_msg_to_task(TASK_NAS_UE, Mod_id, msg_p); + itti_send_msg_to_task(TASK_NAS_UE, ue_mod_idP, msg_p); } free (rrcConnectionReconfiguration_r8->dedicatedInfoNASList); @@ -1361,7 +1361,7 @@ void rrc_ue_process_rrcConnectionReconfiguration(module_id_t Mod_id, frame_t fra message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_CONNECTION_REESTABLISHMENT_IND); memset(&connection_reestablishment_ind, 0, sizeof(rrc_ral_connection_reestablishment_ind_t)); // TO DO ral_si_ind.plmn_id = 0; - connection_reestablishment_ind.ue_id = Mod_id; + connection_reestablishment_ind.ue_id = ue_mod_idP; if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated->drb_ToAddModList != NULL) { connection_reestablishment_ind.num_drb = rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated->drb_ToAddModList->list.count; @@ -1378,9 +1378,9 @@ void rrc_ue_process_rrcConnectionReconfiguration(module_id_t Mod_id, frame_t fra connection_reestablishment_ind.num_srb = 0; } memcpy (&message_ral_p->ittiMsg, (void *) &connection_reestablishment_ind, sizeof(rrc_ral_connection_reestablishment_ind_t)); - //#warning "Mod_id ? for instance ? => YES" + //#warning "ue_mod_idP ? for instance ? => YES" LOG_I(RRC, "Sending RRC_RAL_CONNECTION_REESTABLISHMENT_IND to mRAL\n"); - itti_send_msg_to_task (TASK_RAL_UE, Mod_id + NB_eNB_INST, message_ral_p); + itti_send_msg_to_task (TASK_RAL_UE, ue_mod_idP + NB_eNB_INST, message_ral_p); } #endif #endif @@ -1391,7 +1391,7 @@ void rrc_ue_process_rrcConnectionReconfiguration(module_id_t Mod_id, frame_t fra /* 36.331, 5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover) */ void rrc_ue_process_mobilityControlInfo(uint8_t eNB_index, uint8_t UE_id, frame_t frameP, struct MobilityControlInfo *mobilityControlInfo) { - module_id_t Mod_id = UE_id; + module_id_t ue_mod_idP = UE_id; /* DRB_ToReleaseList_t* drb2release_list; DRB_Identity_t *lcid; @@ -1413,16 +1413,16 @@ void rrc_ue_process_mobilityControlInfo(uint8_t eNB_index, uint8_t UE_id, frame_ //Removing SRB1 and SRB2 and DRB0 LOG_N(RRC,"[UE %d] : Update needed for rrc_pdcp_config_req (deprecated) and rrc_rlc_config_req commands(deprecated)\n", UE_id); - rrc_pdcp_config_req (eNB_index, UE_id, frameP, 0, CONFIG_ACTION_REMOVE, DCCH,UNDEF_SECURITY_MODE); - rrc_rlc_config_req(eNB_index, Mod_id,frameP,0,CONFIG_ACTION_REMOVE,Mod_id+DCCH,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + rrc_pdcp_config_req (eNB_index, UE_id, frameP, ENB_FLAG_NO, CONFIG_ACTION_REMOVE, DCCH,UNDEF_SECURITY_MODE); + rrc_rlc_config_req(eNB_index, ue_mod_idP,frameP,ENB_FLAG_NO,CONFIG_ACTION_REMOVE,ue_mod_idP+DCCH,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - rrc_pdcp_config_req (eNB_index, UE_id, frameP, 0, CONFIG_ACTION_REMOVE, DCCH1,UNDEF_SECURITY_MODE); - rrc_rlc_config_req(eNB_index, Mod_id,frameP,0,CONFIG_ACTION_REMOVE,Mod_id+DCCH1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + rrc_pdcp_config_req (eNB_index, UE_id, frameP, ENB_FLAG_NO, CONFIG_ACTION_REMOVE, DCCH1,UNDEF_SECURITY_MODE); + rrc_rlc_config_req(eNB_index, ue_mod_idP,frameP,ENB_FLAG_NO,CONFIG_ACTION_REMOVE,ue_mod_idP+DCCH1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - rrc_pdcp_config_req (eNB_index, UE_id, frameP, 0, CONFIG_ACTION_REMOVE, DTCH,UNDEF_SECURITY_MODE); - rrc_rlc_config_req(eNB_index, Mod_id,frameP,0,CONFIG_ACTION_REMOVE,Mod_id+DTCH,RADIO_ACCESS_BEARER,Rlc_info_um); + rrc_pdcp_config_req (eNB_index, UE_id, frameP, ENB_FLAG_NO, CONFIG_ACTION_REMOVE, DTCH,UNDEF_SECURITY_MODE); + rrc_rlc_config_req(eNB_index, ue_mod_idP,frameP,ENB_FLAG_NO,CONFIG_ACTION_REMOVE,ue_mod_idP+DTCH,RADIO_ACCESS_BEARER,Rlc_info_um); /* - rrc_pdcp_config_asn1_req(NB_eNB_INST+Mod_id,frameP, 0,eNB_index, + rrc_pdcp_config_asn1_req(NB_eNB_INST+ue_mod_idP,frameP, 0,eNB_index, NULL, // SRB_ToAddModList NULL, // DRB_ToAddModList drb2release_list, @@ -1435,7 +1435,7 @@ void rrc_ue_process_mobilityControlInfo(uint8_t eNB_index, uint8_t UE_id, frame_ #endif ); - rrc_rlc_config_asn1_req(NB_eNB_INST+Mod_id, frameP,0,eNB_index, + rrc_rlc_config_asn1_req(NB_eNB_INST+ue_mod_idP, frameP,0,eNB_index, NULL,// SRB_ToAddModList NULL,// DRB_ToAddModList drb2release_list // DRB_ToReleaseList @@ -1449,26 +1449,26 @@ void rrc_ue_process_mobilityControlInfo(uint8_t eNB_index, uint8_t UE_id, frame_ //A little cleanup at RRC... //Copying current queue config to free RRC index /* - memcpy((void *)UE_rrc_inst[Mod_id].SRB1_config[~(7<][MAC_UE][MOD %02d][]\n", - frameP, Mod_id, eNB_index, Mod_id); + frameP, ue_mod_idP, eNB_index, ue_mod_idP); // Reset MAC and configure PHY - rrc_mac_config_req(Mod_id,0,0,eNB_index, + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, (MeasObjectToAddMod_t **)NULL, @@ -1496,25 +1496,25 @@ void rrc_ue_process_mobilityControlInfo(uint8_t eNB_index, uint8_t UE_id, frame_ ); // Re-establish PDCP for all RBs that are established - // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, Mod_id+DCCH); - // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, Mod_id+DCCH1); - // rrc_pdcp_config_req (Mod_id+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, Mod_id+DTCH); + // rrc_pdcp_config_req (ue_mod_idP+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, ue_mod_idP+DCCH); + // rrc_pdcp_config_req (ue_mod_idP+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, ue_mod_idP+DCCH1); + // rrc_pdcp_config_req (ue_mod_idP+NB_eNB_INST, frameP, 0, CONFIG_ACTION_ADD, ue_mod_idP+DTCH); // Re-establish RLC for all RBs that are established - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,Mod_id+DCCH,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,Mod_id+DCCH1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - // rrc_rlc_config_req(Mod_id+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,Mod_id+DTCH,RADIO_ACCESS_BEARER,Rlc_info_um); + // rrc_rlc_config_req(ue_mod_idP+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,ue_mod_idP+DCCH,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + // rrc_rlc_config_req(ue_mod_idP+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,ue_mod_idP+DCCH1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + // rrc_rlc_config_req(ue_mod_idP+NB_eNB_INST,frameP,0,CONFIG_ACTION_ADD,ue_mod_idP+DTCH,RADIO_ACCESS_BEARER,Rlc_info_um); - UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_SI_RECEIVED; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].State = RRC_SI_RECEIVED; } -void rrc_detach_from_eNB(module_id_t Mod_id,uint8_t eNB_index) { - //UE_rrc_inst[Mod_id].DRB_config[eNB_index] +void rrc_detach_from_eNB(module_id_t ue_mod_idP,uint8_t eNB_index) { + //UE_rrc_inst[ue_mod_idP].DRB_config[eNB_index] } /*------------------------------------------------------------------------------------------*/ -void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint8_t *Buffer,uint8_t eNB_index){ +void rrc_ue_decode_dcch(module_id_t ue_mod_idP, frame_t frameP,uint8_t Srb_id, uint8_t *Buffer,uint8_t eNB_index){ /*------------------------------------------------------------------------------------------*/ //DL_DCCH_Message_t dldcchmsg; @@ -1528,14 +1528,14 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint if (Srb_id != 1) { LOG_E(RRC,"[UE %d] Frame %d: Received message on DL-DCCH (SRB%d), should not have ...\n", - Mod_id, frameP, Srb_id); + ue_mod_idP, frameP, Srb_id); return; } //memset(dl_dcch_msg,0,sizeof(DL_DCCH_Message_t)); // decode messages - // LOG_D(RRC,"[UE %d] Decoding DL-DCCH message\n",Mod_id); + // LOG_D(RRC,"[UE %d] Decoding DL-DCCH message\n",ue_mod_idP); /* for (i=0;i<30;i++) LOG_T(RRC,"%x.",Buffer[i]); @@ -1557,7 +1557,7 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint msg_p = itti_alloc_new_message (TASK_RRC_UE, RRC_DL_DCCH_MESSAGE); memcpy (&msg_p->ittiMsg, (void *) dl_dcch_msg, sizeof(RrcDlDcchMessage)); - itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task (TASK_UNKNOWN, ue_mod_idP + NB_eNB_INST, msg_p); } # else { @@ -1570,7 +1570,7 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint msg_p->ittiMsg.rrc_dl_dcch.size = message_string_size; memcpy(&msg_p->ittiMsg.rrc_dl_dcch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, ue_mod_idP + NB_eNB_INST, msg_p); } } # endif @@ -1578,12 +1578,12 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint if (dl_dcch_msg->message.present == DL_DCCH_MessageType_PR_c1) { - if (UE_rrc_inst[Mod_id].Info[eNB_index].State >= RRC_CONNECTED) { + if (UE_rrc_inst[ue_mod_idP].Info[eNB_index].State >= RRC_CONNECTED) { switch (dl_dcch_msg->message.choice.c1.present) { case DL_DCCH_MessageType__c1_PR_NOTHING: - LOG_I(RRC, "[UE %d] Frame %d : Received PR_NOTHING on DL-DCCH-Message\n", Mod_id, frameP); + LOG_I(RRC, "[UE %d] Frame %d : Received PR_NOTHING on DL-DCCH-Message\n", ue_mod_idP, frameP); return; case DL_DCCH_MessageType__c1_PR_csfbParametersResponseCDMA2000: @@ -1609,11 +1609,11 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint pdu_buffer = dedicatedInfoType->choice.dedicatedInfoNAS.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).UEid = ue_mod_idP; // 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); + itti_send_msg_to_task(TASK_NAS_UE, ue_mod_idP + NB_eNB_INST, msg_p); } #endif break; @@ -1630,33 +1630,33 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint if (dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.mobilityControlInfo != NULL) { /* 36.331, 5.3.5.4 Reception of an RRCConnectionReconfiguration including the mobilityControlInfo by the UE (handover)*/ - if (UE_rrc_inst[Mod_id].HandoverInfoUe.targetCellId + if (UE_rrc_inst[ue_mod_idP].HandoverInfoUe.targetCellId != dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.mobilityControlInfo->targetPhysCellId) { LOG_W(RRC, - "[UE %d] Frame %d: Handover target (%d) is different from RSRP measured target (%d)..\n", Mod_id, frameP, dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.mobilityControlInfo->targetPhysCellId, UE_rrc_inst[Mod_id].HandoverInfoUe.targetCellId); + "[UE %d] Frame %d: Handover target (%d) is different from RSRP measured target (%d)..\n", ue_mod_idP, frameP, dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.mobilityControlInfo->targetPhysCellId, UE_rrc_inst[ue_mod_idP].HandoverInfoUe.targetCellId); return; } else - if ((target_eNB_index = get_adjacent_cell_mod_id(UE_rrc_inst[Mod_id].HandoverInfoUe.targetCellId)) + if ((target_eNB_index = get_adjacent_cell_mod_id(UE_rrc_inst[ue_mod_idP].HandoverInfoUe.targetCellId)) == 0xFF) { LOG_W(RRC, - "[UE %d] Frame %d: Mod_id of the target eNB not found, check the network topology\n", Mod_id, frameP); + "[UE %d] Frame %d: ue_mod_idP of the target eNB not found, check the network topology\n", ue_mod_idP, frameP); return; } else { LOG_I(RRC, - "[UE% d] Frame %d: Received rrcConnectionReconfiguration with mobilityControlInfo \n", Mod_id, frameP); - UE_rrc_inst[Mod_id].HandoverInfoUe.measFlag = 1; // Ready to send more MeasReports if required + "[UE% d] Frame %d: Received rrcConnectionReconfiguration with mobilityControlInfo \n", ue_mod_idP, frameP); + UE_rrc_inst[ue_mod_idP].HandoverInfoUe.measFlag = 1; // Ready to send more MeasReports if required } } - rrc_ue_process_rrcConnectionReconfiguration(Mod_id, frameP, + rrc_ue_process_rrcConnectionReconfiguration(ue_mod_idP, frameP, &dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration, eNB_index); if (target_eNB_index != 0xFF) { - rrc_ue_generate_RRCConnectionReconfigurationComplete(Mod_id, frameP, target_eNB_index, + rrc_ue_generate_RRCConnectionReconfigurationComplete(ue_mod_idP, frameP, target_eNB_index, dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.rrc_TransactionIdentifier); - UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_HO_EXECUTION; - UE_rrc_inst[Mod_id].Info[target_eNB_index].State = RRC_RECONFIGURED; - LOG_I(RRC, "[UE %d] State = RRC_RECONFIGURED during HO (eNB %d)\n", Mod_id, target_eNB_index); + UE_rrc_inst[ue_mod_idP].Info[eNB_index].State = RRC_HO_EXECUTION; + UE_rrc_inst[ue_mod_idP].Info[target_eNB_index].State = RRC_RECONFIGURED; + LOG_I(RRC, "[UE %d] State = RRC_RECONFIGURED during HO (eNB %d)\n", ue_mod_idP, target_eNB_index); #if defined(ENABLE_ITTI) #ifdef ENABLE_RAL { @@ -1666,7 +1666,7 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_CONNECTION_RECONFIGURATION_HO_IND); memset(&connection_reconfiguration_ho_ind, 0, sizeof(rrc_ral_connection_reconfiguration_ho_ind_t)); - connection_reconfiguration_ho_ind.ue_id = Mod_id; + connection_reconfiguration_ho_ind.ue_id = ue_mod_idP; if (dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated->drb_ToAddModList != NULL) { connection_reconfiguration_ho_ind.num_drb = dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated->drb_ToAddModList->list.count; @@ -1683,18 +1683,18 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint connection_reconfiguration_ho_ind.num_srb = 0; } memcpy (&message_ral_p->ittiMsg, (void *) &connection_reconfiguration_ho_ind, sizeof(rrc_ral_connection_reconfiguration_ho_ind_t)); - //#warning "Mod_id ? for instance ? => YES" + //#warning "ue_mod_idP ? for instance ? => YES" LOG_I(RRC, "Sending RRC_RAL_CONNECTION_RECONFIGURATION_HO_IND to mRAL\n"); - itti_send_msg_to_task (TASK_RAL_UE, Mod_id + NB_eNB_INST, message_ral_p); + itti_send_msg_to_task (TASK_RAL_UE, ue_mod_idP + NB_eNB_INST, message_ral_p); } #endif #endif } else { - rrc_ue_generate_RRCConnectionReconfigurationComplete(Mod_id, frameP, eNB_index, + rrc_ue_generate_RRCConnectionReconfigurationComplete(ue_mod_idP, frameP, eNB_index, dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.rrc_TransactionIdentifier); - UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_RECONFIGURED; - LOG_I(RRC, "[UE %d] State = RRC_RECONFIGURED (eNB %d)\n", Mod_id, eNB_index); + UE_rrc_inst[ue_mod_idP].Info[eNB_index].State = RRC_RECONFIGURED; + LOG_I(RRC, "[UE %d] State = RRC_RECONFIGURED (eNB %d)\n", ue_mod_idP, eNB_index); #if defined(ENABLE_ITTI) #ifdef ENABLE_RAL { @@ -1704,7 +1704,7 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint message_ral_p = itti_alloc_new_message (TASK_RRC_UE, RRC_RAL_CONNECTION_RECONFIGURATION_IND); memset(&connection_reconfiguration_ind, 0, sizeof(rrc_ral_connection_reconfiguration_ind_t)); - connection_reconfiguration_ind.ue_id = Mod_id; + connection_reconfiguration_ind.ue_id = ue_mod_idP; if (dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated->drb_ToAddModList != NULL) { connection_reconfiguration_ind.num_drb = dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated->drb_ToAddModList->list.count; @@ -1721,9 +1721,9 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint connection_reconfiguration_ind.num_srb = 0; } memcpy (&message_ral_p->ittiMsg, (void *) &connection_reconfiguration_ind, sizeof(rrc_ral_connection_reconfiguration_ind_t)); - //#warning "Mod_id ? for instance ? => YES" + //#warning "ue_mod_idP ? for instance ? => YES" LOG_I(RRC, "Sending RRC_RAL_CONNECTION_RECONFIGURATION_IND to mRAL\n"); - itti_send_msg_to_task (TASK_RAL_UE, Mod_id + NB_eNB_INST, message_ral_p); + itti_send_msg_to_task (TASK_RAL_UE, ue_mod_idP + NB_eNB_INST, message_ral_p); } #endif #endif @@ -1742,24 +1742,24 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint dl_dcch_msg->message.choice.c1.choice.rrcConnectionRelease.criticalExtensions.choice.c1.choice.rrcConnectionRelease_r8.releaseCause; } - itti_send_msg_to_task(TASK_NAS_UE, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task(TASK_NAS_UE, ue_mod_idP + NB_eNB_INST, msg_p); #if defined(ENABLE_RAL) msg_p = itti_alloc_new_message(TASK_RRC_UE, RRC_RAL_CONNECTION_RELEASE_IND); - RRC_RAL_CONNECTION_RELEASE_IND(msg_p).ue_id = Mod_id; - itti_send_msg_to_task(TASK_RAL_UE, Mod_id + NB_eNB_INST, msg_p); + RRC_RAL_CONNECTION_RELEASE_IND(msg_p).ue_id = ue_mod_idP; + itti_send_msg_to_task(TASK_RAL_UE, ue_mod_idP + NB_eNB_INST, msg_p); #endif #endif break; case DL_DCCH_MessageType__c1_PR_securityModeCommand: - LOG_I(RRC, "[UE %d] Received securityModeCommand (eNB %d)\n", Mod_id, eNB_index); - rrc_ue_process_securityModeCommand(Mod_id, frameP, &dl_dcch_msg->message.choice.c1.choice.securityModeCommand, + LOG_I(RRC, "[UE %d] Received securityModeCommand (eNB %d)\n", ue_mod_idP, eNB_index); + rrc_ue_process_securityModeCommand(ue_mod_idP, frameP, &dl_dcch_msg->message.choice.c1.choice.securityModeCommand, eNB_index); break; case DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry: - LOG_I(RRC, "[UE %d] Received Capability Enquiry (eNB %d)\n", Mod_id, eNB_index); - rrc_ue_process_ueCapabilityEnquiry(Mod_id, frameP, &dl_dcch_msg->message.choice.c1.choice.ueCapabilityEnquiry, + LOG_I(RRC, "[UE %d] Received Capability Enquiry (eNB %d)\n", ue_mod_idP, eNB_index); + rrc_ue_process_ueCapabilityEnquiry(ue_mod_idP, frameP, &dl_dcch_msg->message.choice.c1.choice.ueCapabilityEnquiry, eNB_index); break; @@ -1787,7 +1787,7 @@ void rrc_ue_decode_dcch(module_id_t Mod_id, frame_t frameP,uint8_t Srb_id, uint } } #ifndef NO_RRM - send_msg(&S_rrc,msg_rrc_end_scan_req(Mod_id,eNB_index)); + send_msg(&S_rrc,msg_rrc_end_scan_req(ue_mod_idP,eNB_index)); #endif } @@ -1798,12 +1798,12 @@ const char SIBType[16][6] ={"SIB3\0","SIB4\0","SIB5\0","SIB6\0","SIB7\0","SIB8\0 const char SIBPeriod[7][7]= {"80ms\0","160ms\0","320ms\0","640ms\0","1280ms\0","2560ms\0","5120ms\0"}; int siPeriod_int[7] = {80,160,320,640,1280,2560,5120}; -int decode_BCCH_DLSCH_Message(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t *Sdu,uint8_t Sdu_len, uint8_t rsrq, uint8_t rsrp) { +int decode_BCCH_DLSCH_Message(module_id_t ue_mod_idP, frame_t frameP,uint8_t eNB_index,uint8_t *Sdu,uint8_t Sdu_len, uint8_t rsrq, uint8_t rsrp) { //BCCH_DL_SCH_Message_t bcch_message; BCCH_DL_SCH_Message_t *bcch_message=NULL;//_ptr=&bcch_message; - SystemInformationBlockType1_t **sib1=&UE_rrc_inst[Mod_id].sib1[eNB_index]; - SystemInformation_t **si=UE_rrc_inst[Mod_id].si[eNB_index]; + SystemInformationBlockType1_t **sib1=&UE_rrc_inst[ue_mod_idP].sib1[eNB_index]; + SystemInformation_t **si=UE_rrc_inst[ue_mod_idP].si[eNB_index]; asn_dec_rval_t dec_rval; uint32_t si_window;//, sib1_decoded=0, si_decoded=0; // int i; @@ -1811,18 +1811,18 @@ int decode_BCCH_DLSCH_Message(module_id_t Mod_id, frame_t frameP,uint8_t eNB_ind vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_IN); - if ((UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 1) && - (UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus == 1)) { + if ((UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIB1Status == 1) && + (UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus == 1)) { // Avoid decoding to prevent memory bloating vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT); return 0; } else { - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_RECEIVING_SIB); + rrc_set_sub_state (ue_mod_idP, RRC_SUB_STATE_IDLE_RECEIVING_SIB); //memset(&bcch_message,0,sizeof(BCCH_DL_SCH_Message_t)); - // LOG_D(RRC,"[UE %d] Decoding DL_BCCH_DLSCH_Message\n",Mod_id) + // LOG_D(RRC,"[UE %d] Decoding DL_BCCH_DLSCH_Message\n",ue_mod_idP) /* for (i=0;iittiMsg, (void *) bcch_message, sizeof(RrcDlBcchMessage)); - itti_send_msg_to_task (TASK_UNKNOWN, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task (TASK_UNKNOWN, ue_mod_idP + NB_eNB_INST, msg_p); } # else { @@ -1865,7 +1865,7 @@ int decode_BCCH_DLSCH_Message(module_id_t Mod_id, frame_t frameP,uint8_t eNB_ind msg_p->ittiMsg.rrc_dl_bcch.size = message_string_size; memcpy(&msg_p->ittiMsg.rrc_dl_bcch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, ue_mod_idP + NB_eNB_INST, msg_p); } } # endif @@ -1875,27 +1875,27 @@ int decode_BCCH_DLSCH_Message(module_id_t Mod_id, frame_t frameP,uint8_t eNB_ind switch (bcch_message->message.choice.c1.present) { case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: if ((frameP %2) == 0) { - if (UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 0) { + if (UE_rrc_inst[ue_mod_idP].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, rsrq, rsrp); + LOG_D(RRC,"[UE %d] Decoding First SIB1\n",ue_mod_idP); + decode_SIB1(ue_mod_idP, eNB_index, rsrq, rsrp); //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 ((UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIB1Status == 1) && + (UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus == 0)) { // if ((frameP %8) == 1) { // check only in odd frames for SI - si_window = (frameP%(UE_rrc_inst[Mod_id].Info[eNB_index].SIperiod/10))/(UE_rrc_inst[Mod_id].Info[eNB_index].SIwindowsize/10); + si_window = (frameP%(UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIperiod/10))/(UE_rrc_inst[ue_mod_idP].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 frameP %d, si_window %d\n",Mod_id,frameP,si_window); - decode_SI(Mod_id,frameP,eNB_index,si_window); + LOG_D(RRC,"[UE %d] Decoding SI for frameP %d, si_window %d\n",ue_mod_idP,frameP,si_window); + decode_SI(ue_mod_idP,frameP,eNB_index,si_window); //mac_xface->macphy_exit("after decode_SI"); // } @@ -1909,19 +1909,19 @@ int decode_BCCH_DLSCH_Message(module_id_t Mod_id, frame_t frameP,uint8_t eNB_ind } } - if ((rrc_get_sub_state(Mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) + if ((rrc_get_sub_state(ue_mod_idP) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) # if defined(ENABLE_USE_MME) - && (UE_rrc_inst[Mod_id].initialNasMsg.data != NULL) + && (UE_rrc_inst[ue_mod_idP].initialNasMsg.data != NULL) #endif ) { - rrc_ue_generate_RRCConnectionRequest(Mod_id, frameP, 0); + rrc_ue_generate_RRCConnectionRequest(ue_mod_idP, frameP, 0); LOG_I(RRC, "not sending connection request\n"); - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_CONNECTING); + rrc_set_sub_state (ue_mod_idP, RRC_SUB_STATE_IDLE_CONNECTING); } - /* if ((UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status == 1) && - (UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus == 1) && (frameP >= Mod_id * 20 + 10)) + /* if ((UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIB1Status == 1) && + (UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus == 1) && (frameP >= ue_mod_idP * 20 + 10)) SEQUENCE_free(&asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message, 0);*/ vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_BCCH, VCD_FUNCTION_OUT); @@ -1929,13 +1929,13 @@ int decode_BCCH_DLSCH_Message(module_id_t Mod_id, frame_t frameP,uint8_t eNB_ind } -int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp) { - SystemInformationBlockType1_t **sib1=&UE_rrc_inst[Mod_id].sib1[eNB_index]; +int decode_SIB1(module_id_t ue_mod_idP,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp) { + SystemInformationBlockType1_t **sib1=&UE_rrc_inst[ue_mod_idP].sib1[eNB_index]; int i; vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_UE_DECODE_SIB1, VCD_FUNCTION_IN); - LOG_D(RRC,"[UE %d] : Dumping SIB 1\n",Mod_id); + LOG_D(RRC,"[UE %d] : Dumping SIB 1\n",ue_mod_idP); // xer_fprint(stdout,&asn_DEF_SystemInformationBlockType1, (void*)*sib1); @@ -1968,12 +1968,12 @@ int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp LOG_D(RRC,"S-Subframe Config : %d\n",(int)(*sib1)->tdd_Config->specialSubframePatterns); } - UE_rrc_inst[Mod_id].Info[eNB_index].SIperiod = siPeriod_int[(*sib1)->schedulingInfoList.list.array[0]->si_Periodicity]; - UE_rrc_inst[Mod_id].Info[eNB_index].SIwindowsize = siWindowLength_int[(*sib1)->si_WindowLength]; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIperiod = siPeriod_int[(*sib1)->schedulingInfoList.list.array[0]->si_Periodicity]; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIwindowsize = siWindowLength_int[(*sib1)->si_WindowLength]; LOG_D(RRC, "[MSC_MSG][FRAME unknown][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB1 params eNB %d) --->][MAC_UE][MOD %02d][]\n", - Mod_id, eNB_index, Mod_id); + ue_mod_idP, eNB_index, ue_mod_idP); - rrc_mac_config_req(Mod_id,0,0,eNB_index, + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, (MeasObjectToAddMod_t **)NULL, @@ -1981,10 +1981,10 @@ int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp 0, (struct LogicalChannelConfig *)NULL, (MeasGapConfig_t *)NULL, - UE_rrc_inst[Mod_id].sib1[eNB_index]->tdd_Config, + UE_rrc_inst[ue_mod_idP].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, + &UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIwindowsize, + &UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIperiod, NULL, NULL, NULL, @@ -2001,8 +2001,8 @@ int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp #endif ); - UE_rrc_inst[Mod_id].Info[eNB_index].SIB1Status = 1; - UE_rrc_inst[Mod_id].Info[eNB_index].SIB1systemInfoValueTag = (*sib1)->systemInfoValueTag; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIB1Status = 1; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIB1systemInfoValueTag = (*sib1)->systemInfoValueTag; #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) { @@ -2022,15 +2022,15 @@ int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp plmn_Identity = &(*sib1)->cellAccessRelatedInfo.plmn_IdentityList.list.array[plmn]->plmn_Identity; if (((plmn_Identity->mcc == NULL) || - ((UE_rrc_inst[Mod_id].plmnID.MCCdigit1 == *(plmn_Identity->mcc->list.array[0])) && - (UE_rrc_inst[Mod_id].plmnID.MCCdigit2 == *(plmn_Identity->mcc->list.array[1])) && - (UE_rrc_inst[Mod_id].plmnID.MCCdigit3 == *(plmn_Identity->mcc->list.array[2])))) + ((UE_rrc_inst[ue_mod_idP].plmnID.MCCdigit1 == *(plmn_Identity->mcc->list.array[0])) && + (UE_rrc_inst[ue_mod_idP].plmnID.MCCdigit2 == *(plmn_Identity->mcc->list.array[1])) && + (UE_rrc_inst[ue_mod_idP].plmnID.MCCdigit3 == *(plmn_Identity->mcc->list.array[2])))) && - (UE_rrc_inst[Mod_id].plmnID.MNCdigit1 == *(plmn_Identity->mnc.list.array[0])) && - (UE_rrc_inst[Mod_id].plmnID.MNCdigit2 == *(plmn_Identity->mnc.list.array[1])) && - (((UE_rrc_inst[Mod_id].plmnID.MNCdigit3 == 0xf) && (plmn_Identity->mnc.list.count == 2)) + (UE_rrc_inst[ue_mod_idP].plmnID.MNCdigit1 == *(plmn_Identity->mnc.list.array[0])) && + (UE_rrc_inst[ue_mod_idP].plmnID.MNCdigit2 == *(plmn_Identity->mnc.list.array[1])) && + (((UE_rrc_inst[ue_mod_idP].plmnID.MNCdigit3 == 0xf) && (plmn_Identity->mnc.list.count == 2)) || - (UE_rrc_inst[Mod_id].plmnID.MNCdigit3 == *(plmn_Identity->mnc.list.array[2])))) { + (UE_rrc_inst[ue_mod_idP].plmnID.MNCdigit3 == *(plmn_Identity->mnc.list.array[2])))) { /* PLMN match, send a confirmation to NAS */ MessageDef *msg_p; @@ -2042,7 +2042,7 @@ int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp NAS_CELL_SELECTION_CNF (msg_p).rsrq = rsrq; NAS_CELL_SELECTION_CNF (msg_p).rsrp = rsrp; - itti_send_msg_to_task(TASK_NAS_UE, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task(TASK_NAS_UE, ue_mod_idP + NB_eNB_INST, msg_p); cell_valid = 1; break; } @@ -2056,7 +2056,7 @@ int decode_SIB1(module_id_t Mod_id,uint8_t eNB_index, uint8_t rsrq, uint8_t rsrp msg_p = itti_alloc_new_message(TASK_RRC_UE, PHY_FIND_NEXT_CELL_REQ); - itti_send_msg_to_task(TASK_PHY_UE, Mod_id + NB_eNB_INST, msg_p); + itti_send_msg_to_task(TASK_PHY_UE, ue_mod_idP + NB_eNB_INST, msg_p); } } #endif @@ -2165,9 +2165,9 @@ void dump_sib13(SystemInformationBlockType13_r9_t *sib13) { #endif //const char SIBPeriod[7][7]= {"80ms\0","160ms\0","320ms\0","640ms\0","1280ms\0","2560ms\0","5120ms\0"}; -int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_window) { +int decode_SI(module_id_t ue_mod_idP, frame_t frameP,uint8_t eNB_index,uint8_t si_window) { - SystemInformation_t **si=&UE_rrc_inst[Mod_id].si[eNB_index][si_window]; + SystemInformation_t **si=&UE_rrc_inst[ue_mod_idP].si[eNB_index][si_window]; int i; struct SystemInformation_r8_IEs_sib_TypeAndInfo_Member *typeandinfo; @@ -2189,13 +2189,13 @@ int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_wi switch(typeandinfo->present) { case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib2: - UE_rrc_inst[Mod_id].sib2[eNB_index] = &typeandinfo->choice.sib2; - LOG_D(RRC,"[UE %d] Frame %d Found SIB2 from eNB %d\n",Mod_id,frameP,eNB_index); - dump_sib2(UE_rrc_inst[Mod_id].sib2[eNB_index]); + UE_rrc_inst[ue_mod_idP].sib2[eNB_index] = &typeandinfo->choice.sib2; + LOG_D(RRC,"[UE %d] Frame %d Found SIB2 from eNB %d\n",ue_mod_idP,frameP,eNB_index); + dump_sib2(UE_rrc_inst[ue_mod_idP].sib2[eNB_index]); LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB2 params eNB %d) --->][MAC_UE][MOD %02d][]\n", - frameP, Mod_id, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, - &UE_rrc_inst[Mod_id].sib2[eNB_index]->radioResourceConfigCommon, + frameP, ue_mod_idP, eNB_index, ue_mod_idP); + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, + &UE_rrc_inst[ue_mod_idP].sib2[eNB_index]->radioResourceConfigCommon, (struct PhysicalConfigDedicated *)NULL, (MeasObjectToAddMod_t **)NULL, (MAC_MainConfig_t *)NULL, @@ -2206,10 +2206,10 @@ int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_wi (MobilityControlInfo_t *)NULL, NULL, NULL, - UE_rrc_inst[Mod_id].sib2[eNB_index]->freqInfo.ul_CarrierFreq, - UE_rrc_inst[Mod_id].sib2[eNB_index]->freqInfo.ul_Bandwidth, - &UE_rrc_inst[Mod_id].sib2[eNB_index]->freqInfo.additionalSpectrumEmission, - UE_rrc_inst[Mod_id].sib2[eNB_index]->mbsfn_SubframeConfigList + UE_rrc_inst[ue_mod_idP].sib2[eNB_index]->freqInfo.ul_CarrierFreq, + UE_rrc_inst[ue_mod_idP].sib2[eNB_index]->freqInfo.ul_Bandwidth, + &UE_rrc_inst[ue_mod_idP].sib2[eNB_index]->freqInfo.additionalSpectrumEmission, + UE_rrc_inst[ue_mod_idP].sib2[eNB_index]->mbsfn_SubframeConfigList #ifdef Rel10 ,0, (MBSFN_AreaInfoList_r9_t *)NULL, @@ -2220,19 +2220,19 @@ int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_wi 0 #endif ); - UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus = 1; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus = 1; // After SI is received, prepare RRCConnectionRequest #ifdef Rel10 - if (UE_rrc_inst[Mod_id].MBMS_flag < 3) // see -Q option + if (UE_rrc_inst[ue_mod_idP].MBMS_flag < 3) // see -Q option #endif #if !(defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)) - rrc_ue_generate_RRCConnectionRequest(Mod_id,frameP,eNB_index); + rrc_ue_generate_RRCConnectionRequest(ue_mod_idP,frameP,eNB_index); LOG_I(RRC, "not sending connection request\n"); #endif - if (UE_rrc_inst[Mod_id].Info[eNB_index].State == RRC_IDLE) { - LOG_I(RRC,"[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n",Mod_id); - UE_rrc_inst[Mod_id].Info[eNB_index].State = RRC_SI_RECEIVED; + if (UE_rrc_inst[ue_mod_idP].Info[eNB_index].State == RRC_IDLE) { + LOG_I(RRC,"[UE %d] Received SIB1/SIB2/SIB3 Switching to RRC_SI_RECEIVED\n",ue_mod_idP); + UE_rrc_inst[ue_mod_idP].Info[eNB_index].State = RRC_SI_RECEIVED; #ifdef ENABLE_RAL { MessageDef *message_ral_p = NULL; @@ -2255,65 +2255,65 @@ int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_wi // TO DO ral_si_ind.link_data_rate = 0; memcpy (&message_ral_p->ittiMsg, (void *) &ral_si_ind, sizeof(rrc_ral_system_information_ind_t)); -#warning "Mod_id ? for instance ?" - itti_send_msg_to_task (TASK_RAL_UE, Mod_id + NB_eNB_INST, message_ral_p); +#warning "ue_mod_idP ? for instance ?" + itti_send_msg_to_task (TASK_RAL_UE, ue_mod_idP + NB_eNB_INST, message_ral_p); } #endif } break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib3: - UE_rrc_inst[Mod_id].sib3[eNB_index] = &typeandinfo->choice.sib3; - LOG_I(RRC,"[UE %d] Frame %d Found SIB3 from eNB %d\n",Mod_id,frameP,eNB_index); - dump_sib3(UE_rrc_inst[Mod_id].sib3[eNB_index]); - UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus = 1; + UE_rrc_inst[ue_mod_idP].sib3[eNB_index] = &typeandinfo->choice.sib3; + LOG_I(RRC,"[UE %d] Frame %d Found SIB3 from eNB %d\n",ue_mod_idP,frameP,eNB_index); + dump_sib3(UE_rrc_inst[ue_mod_idP].sib3[eNB_index]); + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus = 1; - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_SIB_COMPLETE); + rrc_set_sub_state (ue_mod_idP, RRC_SUB_STATE_IDLE_SIB_COMPLETE); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib4: - UE_rrc_inst[Mod_id].sib4[eNB_index] = &typeandinfo->choice.sib4; - LOG_I(RRC,"[UE %d] Frame %d Found SIB4 from eNB %d\n",Mod_id,frameP,eNB_index); + UE_rrc_inst[ue_mod_idP].sib4[eNB_index] = &typeandinfo->choice.sib4; + LOG_I(RRC,"[UE %d] Frame %d Found SIB4 from eNB %d\n",ue_mod_idP,frameP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib5: - UE_rrc_inst[Mod_id].sib5[eNB_index] = &typeandinfo->choice.sib5; - LOG_I(RRC,"[UE %d] Found SIB5 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib5[eNB_index] = &typeandinfo->choice.sib5; + LOG_I(RRC,"[UE %d] Found SIB5 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib6: - UE_rrc_inst[Mod_id].sib6[eNB_index] = &typeandinfo->choice.sib6; - LOG_I(RRC,"[UE %d] Found SIB6 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib6[eNB_index] = &typeandinfo->choice.sib6; + LOG_I(RRC,"[UE %d] Found SIB6 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib7: - UE_rrc_inst[Mod_id].sib7[eNB_index] = &typeandinfo->choice.sib7; - LOG_I(RRC,"[UE %d] Found SIB7 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib7[eNB_index] = &typeandinfo->choice.sib7; + LOG_I(RRC,"[UE %d] Found SIB7 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib8: - UE_rrc_inst[Mod_id].sib8[eNB_index] = &typeandinfo->choice.sib8; - LOG_I(RRC,"[UE %d] Found SIB8 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib8[eNB_index] = &typeandinfo->choice.sib8; + LOG_I(RRC,"[UE %d] Found SIB8 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib9: - UE_rrc_inst[Mod_id].sib9[eNB_index] = &typeandinfo->choice.sib9; - LOG_I(RRC,"[UE %d] Found SIB9 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib9[eNB_index] = &typeandinfo->choice.sib9; + LOG_I(RRC,"[UE %d] Found SIB9 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib10: - UE_rrc_inst[Mod_id].sib10[eNB_index] = &typeandinfo->choice.sib10; - LOG_I(RRC,"[UE %d] Found SIB10 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib10[eNB_index] = &typeandinfo->choice.sib10; + LOG_I(RRC,"[UE %d] Found SIB10 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib11: - UE_rrc_inst[Mod_id].sib11[eNB_index] = &typeandinfo->choice.sib11; - LOG_I(RRC,"[UE %d] Found SIB11 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib11[eNB_index] = &typeandinfo->choice.sib11; + LOG_I(RRC,"[UE %d] Found SIB11 from eNB %d\n",ue_mod_idP,eNB_index); break; #ifdef Rel10 case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib12_v920: - UE_rrc_inst[Mod_id].sib12[eNB_index] = &typeandinfo->choice.sib12_v920; - LOG_I(RRC,"[RRC][UE %d] Found SIB12 from eNB %d\n",Mod_id,eNB_index); + UE_rrc_inst[ue_mod_idP].sib12[eNB_index] = &typeandinfo->choice.sib12_v920; + LOG_I(RRC,"[RRC][UE %d] Found SIB12 from eNB %d\n",ue_mod_idP,eNB_index); break; case SystemInformation_r8_IEs_sib_TypeAndInfo_Member_PR_sib13_v920: - UE_rrc_inst[Mod_id].sib13[eNB_index] = &typeandinfo->choice.sib13_v920; - LOG_I(RRC,"[RRC][UE %d] Found SIB13 from eNB %d\n",Mod_id,eNB_index); - dump_sib13(UE_rrc_inst[Mod_id].sib13[eNB_index]); + UE_rrc_inst[ue_mod_idP].sib13[eNB_index] = &typeandinfo->choice.sib13_v920; + LOG_I(RRC,"[RRC][UE %d] Found SIB13 from eNB %d\n",ue_mod_idP,eNB_index); + dump_sib13(UE_rrc_inst[ue_mod_idP].sib13[eNB_index]); // adding here function to store necessary parameters for using in decode_MCCH_Message + maybe transfer to PHY layer LOG_D(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB13 params eNB %d) --->][MAC_UE][MOD %02d][]\n", - frameP, Mod_id, eNB_index, Mod_id); - rrc_mac_config_req(Mod_id,0,0,eNB_index, + frameP, ue_mod_idP, eNB_index, ue_mod_idP); + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, (MeasObjectToAddMod_t **)NULL, @@ -2330,14 +2330,14 @@ int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_wi NULL, (MBSFN_SubframeConfigList_t *)NULL ,0, - &UE_rrc_inst[Mod_id].sib13[eNB_index]->mbsfn_AreaInfoList_r9, + &UE_rrc_inst[ue_mod_idP].sib13[eNB_index]->mbsfn_AreaInfoList_r9, (PMCH_InfoList_r9_t *)NULL #ifdef CBA ,0, 0 #endif ); - UE_rrc_inst[Mod_id].Info[eNB_index].SIStatus = 1; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].SIStatus = 1; break; #endif default: @@ -2351,60 +2351,60 @@ int decode_SI(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index,uint8_t si_wi } // layer 3 filtering of RSRP (EUTRA) measurements: 36.331, Sec. 5.5.3.2 -void ue_meas_filtering(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index){ - float a = UE_rrc_inst[Mod_id].filter_coeff_rsrp; // 'a' in 36.331 Sec. 5.5.3.2 - float a1 = UE_rrc_inst[Mod_id].filter_coeff_rsrq; +void ue_meas_filtering(module_id_t ue_mod_idP, frame_t frameP,uint8_t eNB_index){ + float a = UE_rrc_inst[ue_mod_idP].filter_coeff_rsrp; // 'a' in 36.331 Sec. 5.5.3.2 + float a1 = UE_rrc_inst[ue_mod_idP].filter_coeff_rsrq; //float rsrp_db, rsrq_db; uint8_t eNB_offset; - if(UE_rrc_inst[Mod_id].QuantityConfig[0] != NULL) { // Only consider 1 serving cell (index: 0) - if (UE_rrc_inst[Mod_id].QuantityConfig[0]->quantityConfigEUTRA != NULL) { - if(UE_rrc_inst[Mod_id].QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRP != NULL) { - for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(Mod_id);eNB_offset++) { - //filter_factor = 1/power(2,*UE_rrc_inst[Mod_id].QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRP/4); + if(UE_rrc_inst[ue_mod_idP].QuantityConfig[0] != NULL) { // Only consider 1 serving cell (index: 0) + if (UE_rrc_inst[ue_mod_idP].QuantityConfig[0]->quantityConfigEUTRA != NULL) { + if(UE_rrc_inst[ue_mod_idP].QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRP != NULL) { + for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(ue_mod_idP);eNB_offset++) { + //filter_factor = 1/power(2,*UE_rrc_inst[ue_mod_idP].QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRP/4); // LOG_N(RRC,"[UE %d] Frame %d : check proper operation in abstraction mode rsrp (%d), rx gain (%d) N_RB_DL (%d)\n", - // Mod_id,frameP,mac_xface->get_RSRP(Mod_id,eNB_offset),mac_xface->get_rx_total_gain_dB(Mod_id),mac_xface->lte_frame_parms->N_RB_DL); - UE_rrc_inst[Mod_id].rsrp_db[eNB_offset] = (dB_fixed_times10(mac_xface->get_RSRP(Mod_id,eNB_offset))/10.0)-mac_xface->get_rx_total_gain_dB(Mod_id)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12); - UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset] = (1.0-a)*UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset] + a*UE_rrc_inst[Mod_id].rsrp_db[eNB_offset]; - //mac_xface->set_RSRP_filtered(Mod_id,eNB_offset,UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]); + // ue_mod_idP,frameP,mac_xface->get_RSRP(ue_mod_idP,eNB_offset),mac_xface->get_rx_total_gain_dB(ue_mod_idP),mac_xface->lte_frame_parms->N_RB_DL); + UE_rrc_inst[ue_mod_idP].rsrp_db[eNB_offset] = (dB_fixed_times10(mac_xface->get_RSRP(ue_mod_idP,eNB_offset))/10.0)-mac_xface->get_rx_total_gain_dB(ue_mod_idP)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12); + UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset] = (1.0-a)*UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset] + a*UE_rrc_inst[ue_mod_idP].rsrp_db[eNB_offset]; + //mac_xface->set_RSRP_filtered(ue_mod_idP,eNB_offset,UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]); LOG_D(RRC,"[UE %d] Frame %d: Meas RSRP: eNB_offset: %d rsrp_coef: %3.2f filter_coef: %d before L3 filtering: rsrp: %3.1f after L3 filtering: rsrp: %3.1f \n ", - Mod_id, frameP, eNB_offset,a, + ue_mod_idP, frameP, eNB_offset,a, *UE_rrc_inst->QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRP, - UE_rrc_inst[Mod_id].rsrp_db[eNB_offset], - UE_rrc_inst[Mod_id].rsrp_db_filtered[eNB_offset]); + UE_rrc_inst[ue_mod_idP].rsrp_db[eNB_offset], + UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]); } } } 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]); + for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(ue_mod_idP);eNB_offset++) { + UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]= mac_xface->get_RSRP(ue_mod_idP,eNB_offset); + // phy_vars_ue->PHY_measurements.rsrp_filtered[eNB_offset]=UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]; + //mac_xface->set_RSRP_filtered(ue_mod_idP,eNB_offset,UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]); } } - if (UE_rrc_inst[Mod_id].QuantityConfig[0]->quantityConfigEUTRA != NULL) { - if(UE_rrc_inst[Mod_id].QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRQ != NULL) { - for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(Mod_id);eNB_offset++) { - // LOG_N(RRC,"[UE %d] Frame %d : check if this operation workes properly in abstraction mode\n",Mod_id,frameP); - UE_rrc_inst[Mod_id].rsrq_db[eNB_offset] = (10*log10(mac_xface->get_RSRQ(Mod_id,eNB_offset)))-20; - UE_rrc_inst[Mod_id].rsrq_db_filtered[eNB_offset]=(1-a1)*UE_rrc_inst[Mod_id].rsrq_db_filtered[eNB_offset] + a1 *UE_rrc_inst[Mod_id].rsrq_db[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[ue_mod_idP].QuantityConfig[0]->quantityConfigEUTRA != NULL) { + if(UE_rrc_inst[ue_mod_idP].QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRQ != NULL) { + for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(ue_mod_idP);eNB_offset++) { + // LOG_N(RRC,"[UE %d] Frame %d : check if this operation workes properly in abstraction mode\n",ue_mod_idP,frameP); + UE_rrc_inst[ue_mod_idP].rsrq_db[eNB_offset] = (10*log10(mac_xface->get_RSRQ(ue_mod_idP,eNB_offset)))-20; + UE_rrc_inst[ue_mod_idP].rsrq_db_filtered[eNB_offset]=(1-a1)*UE_rrc_inst[ue_mod_idP].rsrq_db_filtered[eNB_offset] + a1 *UE_rrc_inst[ue_mod_idP].rsrq_db[eNB_offset]; + //mac_xface->set_RSRP_filtered(ue_mod_idP,eNB_offset,UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]); /* LOG_D(RRC,"[UE %d] meas RSRQ: eNB_offset: %d rsrq_coef: %3.2f filter_coef: %d before L3 filtering: rsrq: %3.1f after L3 filtering: rsrq: %3.1f \n ", - Mod_id, eNB_offset, + ue_mod_idP, eNB_offset, a1, *UE_rrc_inst->QuantityConfig[0]->quantityConfigEUTRA->filterCoefficientRSRQ, - mac_xface->get_RSRQ(Mod_id,eNB_offset), - UE_rrc_inst[Mod_id].rsrq_db[eNB_offset], - UE_rrc_inst[Mod_id].rsrq_db_filtered[eNB_offset]); + mac_xface->get_RSRQ(ue_mod_idP,eNB_offset), + UE_rrc_inst[ue_mod_idP].rsrq_db[eNB_offset], + UE_rrc_inst[ue_mod_idP].rsrq_db_filtered[eNB_offset]); */ } } } else{ - for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(Mod_id);eNB_offset++) { - UE_rrc_inst[Mod_id].rsrq_db_filtered[eNB_offset]= mac_xface->get_RSRQ(Mod_id,eNB_offset); + for (eNB_offset = 0;eNB_offset<1+mac_xface->get_n_adj_cells(ue_mod_idP);eNB_offset++) { + UE_rrc_inst[ue_mod_idP].rsrq_db_filtered[eNB_offset]= mac_xface->get_RSRQ(ue_mod_idP,eNB_offset); } } } @@ -2447,7 +2447,7 @@ void rrc_ue_generate_MeasurementReport(module_id_t eNB_id, module_id_t UE_id, fr // if (measFlag == 1) { cellId = get_adjacent_cell_id(UE_id, eNB_id); //PhycellId of serving cell - targetCellId = UE_rrc_inst[UE_id].HandoverInfoUe.targetCellId ;//get_adjacent_cell_id(Mod_id,target_eNB_offset); //PhycellId of target cell + targetCellId = UE_rrc_inst[UE_id].HandoverInfoUe.targetCellId ;//get_adjacent_cell_id(ue_mod_idP,target_eNB_offset); //PhycellId of target cell if (pframe!=frameP){ pframe=frameP; @@ -2459,7 +2459,7 @@ void rrc_ue_generate_MeasurementReport(module_id_t eNB_id, module_id_t UE_id, fr frameP, UE_id, size, eNB_id, rrc_mui, eNB_id, DCCH); result = pdcp_data_req(eNB_id, UE_id, frameP, 0, DCCH, rrc_mui++, 0, size, buffer, PDCP_TRANSMISSION_MODE_DATA); AssertFatal (result == TRUE, "PDCP data request failed!\n"); - //LOG_D(RRC, "[UE %d] Frame %d Sending MeasReport (%d bytes) through DCCH%d to PDCP \n",Mod_id,frameP, size, DCCH); + //LOG_D(RRC, "[UE %d] Frame %d Sending MeasReport (%d bytes) through DCCH%d to PDCP \n",ue_mod_idP,frameP, size, DCCH); } // measFlag = 0; //re-setting measFlag so that no more MeasReports are sent in this frameP // } @@ -2468,7 +2468,7 @@ void rrc_ue_generate_MeasurementReport(module_id_t eNB_id, module_id_t UE_id, fr } // Measurement report triggering, described in 36.331 Section 5.5.4.1: called periodically -void ue_measurement_report_triggering(module_id_t Mod_id, frame_t frameP,uint8_t eNB_index) { +void ue_measurement_report_triggering(module_id_t ue_mod_idP, frame_t frameP,uint8_t eNB_index) { uint8_t i,j; Hysteresis_t hys; TimeToTrigger_t ttt_ms; @@ -2482,67 +2482,67 @@ void ue_measurement_report_triggering(module_id_t Mod_id, frame_t frameP,uint8_t for(i=0 ; imeasObjectId; - reportConfigId = UE_rrc_inst[Mod_id].MeasId[i][j]->reportConfigId; - if( /*UE_rrc_inst[Mod_id].MeasId[i][j] != NULL && */ UE_rrc_inst[Mod_id].MeasObj[i][measObjId-1] != NULL) { - if(UE_rrc_inst[Mod_id].MeasObj[i][measObjId-1]->measObject.present == MeasObjectToAddMod__measObject_PR_measObjectEUTRA) { + if(UE_rrc_inst[ue_mod_idP].MeasId[i][j] != NULL) { + measObjId = UE_rrc_inst[ue_mod_idP].MeasId[i][j]->measObjectId; + reportConfigId = UE_rrc_inst[ue_mod_idP].MeasId[i][j]->reportConfigId; + if( /*UE_rrc_inst[ue_mod_idP].MeasId[i][j] != NULL && */ UE_rrc_inst[ue_mod_idP].MeasObj[i][measObjId-1] != NULL) { + if(UE_rrc_inst[ue_mod_idP].MeasObj[i][measObjId-1]->measObject.present == MeasObjectToAddMod__measObject_PR_measObjectEUTRA) { /* consider any neighboring cell detected on the associated frequency to be * applicable when the concerned cell is not included in the blackCellsToAddModList * defined within the VarMeasConfig for this measId */ - // LOG_I(RRC,"event %d %d %p \n", measObjId,reportConfigId, UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]); - if((UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1] != NULL) && - (UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]->reportConfig.present==ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA) && - (UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.present == ReportConfigEUTRA__triggerType_PR_event)) { - hys = UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.hysteresis; - //LOG_N(RRC,"[UE%d] Frame %d Check below lines for segfault :), Fix me \n",Mod_id, frameP); - ttt_ms = timeToTrigger_ms[UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger]; + // LOG_I(RRC,"event %d %d %p \n", measObjId,reportConfigId, UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]); + if((UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1] != NULL) && + (UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]->reportConfig.present==ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA) && + (UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.present == ReportConfigEUTRA__triggerType_PR_event)) { + hys = UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.hysteresis; + //LOG_N(RRC,"[UE%d] Frame %d Check below lines for segfault :), Fix me \n",ue_mod_idP, frameP); + ttt_ms = timeToTrigger_ms[UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger]; // Freq specific offset of neighbor cell freq - ofn = ((UE_rrc_inst[Mod_id].MeasObj[i][measObjId-1]->measObject.choice.measObjectEUTRA.offsetFreq != NULL) ? - *UE_rrc_inst[Mod_id].MeasObj[i][measObjId-1]->measObject.choice.measObjectEUTRA.offsetFreq : 15); // /* 15 is the Default */ + ofn = ((UE_rrc_inst[ue_mod_idP].MeasObj[i][measObjId-1]->measObject.choice.measObjectEUTRA.offsetFreq != NULL) ? + *UE_rrc_inst[ue_mod_idP].MeasObj[i][measObjId-1]->measObject.choice.measObjectEUTRA.offsetFreq : 15); // /* 15 is the Default */ // cellIndividualOffset of neighbor cell - not defined yet ocn = 0; - a3_offset = UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset; + a3_offset = UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset; - switch (UE_rrc_inst[Mod_id].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present) { + switch (UE_rrc_inst[ue_mod_idP].ReportConfig[i][reportConfigId-1]->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present) { case ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1: - LOG_D(RRC,"[UE %d] Frame %d : A1 event: check if serving becomes better than threshold\n",Mod_id, frameP); + LOG_D(RRC,"[UE %d] Frame %d : A1 event: check if serving becomes better than threshold\n",ue_mod_idP, frameP); break; case ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2: - LOG_D(RRC,"[UE %d] Frame %d : A2 event, check if serving becomes worse than a threshold\n",Mod_id, frameP); + LOG_D(RRC,"[UE %d] Frame %d : A2 event, check if serving becomes worse than a threshold\n",ue_mod_idP, frameP); break; case ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3: - LOG_D(RRC,"[UE %d] Frame %d : A3 event: check if a neighboring cell becomes offset better than serving to trigger a measurement event \n",Mod_id, frameP); - if ((check_trigger_meas_event(Mod_id,frameP,eNB_index,i,j,ofn,ocn,hys,ofs,ocs,a3_offset,ttt_ms)) && - (UE_rrc_inst[Mod_id].Info[0].State >= RRC_CONNECTED) && - (UE_rrc_inst[Mod_id].Info[0].T304_active == 0 ) && - (UE_rrc_inst[Mod_id].HandoverInfoUe.measFlag == 1)) { + LOG_D(RRC,"[UE %d] Frame %d : A3 event: check if a neighboring cell becomes offset better than serving to trigger a measurement event \n",ue_mod_idP, frameP); + if ((check_trigger_meas_event(ue_mod_idP,frameP,eNB_index,i,j,ofn,ocn,hys,ofs,ocs,a3_offset,ttt_ms)) && + (UE_rrc_inst[ue_mod_idP].Info[0].State >= RRC_CONNECTED) && + (UE_rrc_inst[ue_mod_idP].Info[0].T304_active == 0 ) && + (UE_rrc_inst[ue_mod_idP].HandoverInfoUe.measFlag == 1)) { //trigger measurement reporting procedure (36.331, section 5.5.5) - if (UE_rrc_inst[Mod_id].measReportList[i][j] == NULL) { - UE_rrc_inst[Mod_id].measReportList[i][j] = malloc(sizeof(MEAS_REPORT_LIST)); + if (UE_rrc_inst[ue_mod_idP].measReportList[i][j] == NULL) { + UE_rrc_inst[ue_mod_idP].measReportList[i][j] = malloc(sizeof(MEAS_REPORT_LIST)); } - UE_rrc_inst[Mod_id].measReportList[i][j]->measId = UE_rrc_inst[Mod_id].MeasId[i][j]->measId; - UE_rrc_inst[Mod_id].measReportList[i][j]->numberOfReportsSent = 0; - rrc_ue_generate_MeasurementReport(Mod_id,frameP,eNB_index); - UE_rrc_inst[Mod_id].HandoverInfoUe.measFlag = 1; - LOG_I(RRC,"[UE %d] Frame %d: A3 event detected, state: %d \n", Mod_id, frameP, UE_rrc_inst[Mod_id].Info[0].State); + UE_rrc_inst[ue_mod_idP].measReportList[i][j]->measId = UE_rrc_inst[ue_mod_idP].MeasId[i][j]->measId; + UE_rrc_inst[ue_mod_idP].measReportList[i][j]->numberOfReportsSent = 0; + rrc_ue_generate_MeasurementReport(ue_mod_idP,frameP,eNB_index); + UE_rrc_inst[ue_mod_idP].HandoverInfoUe.measFlag = 1; + LOG_I(RRC,"[UE %d] Frame %d: A3 event detected, state: %d \n", ue_mod_idP, frameP, UE_rrc_inst[ue_mod_idP].Info[0].State); } else { - if(UE_rrc_inst[Mod_id].measReportList[i][j] != NULL){ - free(UE_rrc_inst[Mod_id].measReportList[i][j]); + if(UE_rrc_inst[ue_mod_idP].measReportList[i][j] != NULL){ + free(UE_rrc_inst[ue_mod_idP].measReportList[i][j]); } - UE_rrc_inst[Mod_id].measReportList[i][j] = NULL; + UE_rrc_inst[ue_mod_idP].measReportList[i][j] = NULL; } break; case ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4: - LOG_D(RRC,"[UE %d] Frame %d : received an A4 event, neighbor becomes offset better than a threshold\n",Mod_id, frameP); + LOG_D(RRC,"[UE %d] Frame %d : received an A4 event, neighbor becomes offset better than a threshold\n",ue_mod_idP, frameP); break; case ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5: - LOG_D(RRC,"[UE %d] Frame %d: received an A5 event, serving becomes worse than threshold 1 and neighbor becomes better than threshold 2\n",Mod_id, frameP); + LOG_D(RRC,"[UE %d] Frame %d: received an A5 event, serving becomes worse than threshold 1 and neighbor becomes better than threshold 2\n",ue_mod_idP, frameP); break; default: LOG_D(RRC,"Invalid ReportConfigEUTRA__triggerType__event__eventId: %d", - UE_rrc_inst[Mod_id].ReportConfig[i][j]->reportConfig.choice.reportConfigEUTRA.triggerType.present); + UE_rrc_inst[ue_mod_idP].ReportConfig[i][j]->reportConfig.choice.reportConfigEUTRA.triggerType.present); break; } } @@ -2553,36 +2553,36 @@ void ue_measurement_report_triggering(module_id_t Mod_id, frame_t frameP,uint8_t } } -//check_trigger_meas_event(Mod_id, frameP, eNB_index, i,j,ofn,ocn,hys,ofs,ocs,a3_offset,ttt_ms) -uint8_t check_trigger_meas_event(module_id_t Mod_id,frame_t frameP, uint8_t eNB_index, uint8_t ue_cnx_index, uint8_t meas_index, +//check_trigger_meas_event(ue_mod_idP, frameP, eNB_index, i,j,ofn,ocn,hys,ofs,ocs,a3_offset,ttt_ms) +uint8_t check_trigger_meas_event(module_id_t ue_mod_idP,frame_t frameP, uint8_t eNB_index, uint8_t ue_cnx_index, uint8_t meas_index, Q_OffsetRange_t ofn, Q_OffsetRange_t ocn, Hysteresis_t hys, Q_OffsetRange_t ofs, Q_OffsetRange_t ocs, long a3_offset, TimeToTrigger_t ttt) { uint8_t eNB_offset; uint8_t currentCellIndex = mac_xface->lte_frame_parms->Nid_cell; LOG_I(RRC,"ofn(%d) ocn(%d) hys(%d) ofs(%d) ocs(%d) a3_offset(%d) ttt(%d) rssi %3.1f\n", \ - ofn,ocn,hys,ofs,ocs,a3_offset,ttt,10*log10(mac_xface->get_RSSI(Mod_id))-mac_xface->get_rx_total_gain_dB(Mod_id)); + ofn,ocn,hys,ofs,ocs,a3_offset,ttt,10*log10(mac_xface->get_RSSI(ue_mod_idP))-mac_xface->get_rx_total_gain_dB(ue_mod_idP)); - // for (eNB_offset = 0;(eNB_offset<1+mac_xface->get_n_adj_cells(Mod_id))&& (eNB_offset!=eNB_index);eNB_offset++) { - for (eNB_offset = 1;(eNB_offset<1+mac_xface->get_n_adj_cells(Mod_id));eNB_offset++) { + // for (eNB_offset = 0;(eNB_offset<1+mac_xface->get_n_adj_cells(ue_mod_idP))&& (eNB_offset!=eNB_index);eNB_offset++) { + for (eNB_offset = 1;(eNB_offset<1+mac_xface->get_n_adj_cells(ue_mod_idP));eNB_offset++) { /* RHS: Verify that idx 0 corresponds to currentCellIndex in rsrp array */ - 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*/) { + if(UE_rrc_inst[ue_mod_idP].rsrp_db_filtered[eNB_offset]+ofn+ocn-hys > UE_rrc_inst[ue_mod_idP].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, frameP, ue_cnx_index,meas_index,UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1],currentCellIndex,eNB_offset); + ue_mod_idP, frameP, 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, frameP, ue_cnx_index,meas_index,UE_rrc_inst->measTimer[ue_cnx_index][meas_index][eNB_offset-1],currentCellIndex,eNB_offset); + ue_mod_idP, frameP, 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! + UE_rrc_inst->HandoverInfoUe.targetCellId = get_adjacent_cell_id(ue_mod_idP,eNB_offset-1); //check this! LOG_D(RRC,"[UE %d] Frame %d eNB %d: Handover triggered: targetCellId: %d currentCellId: %d eNB_offset: %d rsrp source: %3.1f rsrp target: %3.1f\n", \ - Mod_id, frameP, eNB_index, + ue_mod_idP, frameP, eNB_index, UE_rrc_inst->HandoverInfoUe.targetCellId,ue_cnx_index,eNB_offset, - (dB_fixed_times10(UE_rrc_inst[Mod_id].rsrp_db[0])/10.0)-mac_xface->get_rx_total_gain_dB(Mod_id)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12), - (dB_fixed_times10(UE_rrc_inst[Mod_id].rsrp_db[eNB_offset])/10.0)-mac_xface->get_rx_total_gain_dB(Mod_id)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12)); + (dB_fixed_times10(UE_rrc_inst[ue_mod_idP].rsrp_db[0])/10.0)-mac_xface->get_rx_total_gain_dB(ue_mod_idP)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12), + (dB_fixed_times10(UE_rrc_inst[ue_mod_idP].rsrp_db[eNB_offset])/10.0)-mac_xface->get_rx_total_gain_dB(ue_mod_idP)-dB_fixed(mac_xface->lte_frame_parms->N_RB_DL*12)); UE_rrc_inst->Info[0].handoverTarget = eNB_offset; return 1; } @@ -2591,15 +2591,15 @@ uint8_t check_trigger_meas_event(module_id_t Mod_id,frame_t frameP, uint8_t eNB_ } #ifdef Rel10 -int decode_MCCH_Message(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index, uint8_t *Sdu, uint8_t Sdu_len,uint8_t mbsfn_sync_area) { +int decode_MCCH_Message(module_id_t ue_mod_idP, frame_t frameP, uint8_t eNB_index, uint8_t *Sdu, uint8_t Sdu_len,uint8_t mbsfn_sync_area) { MCCH_Message_t *mcch=NULL; - MBSFNAreaConfiguration_r9_t **mcch_message=&UE_rrc_inst[Mod_id].mcch_message[eNB_index]; + MBSFNAreaConfiguration_r9_t **mcch_message=&UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]; asn_dec_rval_t dec_rval; - if (UE_rrc_inst[Mod_id].Info[eNB_index].MCCHStatus[mbsfn_sync_area] == 1) { + if (UE_rrc_inst[ue_mod_idP].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, frameP, mbsfn_sync_area); + ue_mod_idP, frameP, mbsfn_sync_area); return 0; // avoid decoding to prevent memory bloating } else { @@ -2609,7 +2609,7 @@ int decode_MCCH_Message(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index, u (const void *)Sdu, Sdu_len); if ((dec_rval.code != RC_OK) && (dec_rval.consumed==0)) { - LOG_E(RRC,"[UE %d] Failed to decode MCCH__MESSAGE (%d bits)\n",Mod_id,dec_rval.consumed); + LOG_E(RRC,"[UE %d] Failed to decode MCCH__MESSAGE (%d bits)\n",ue_mod_idP,dec_rval.consumed); //free the memory SEQUENCE_free(&asn_DEF_MCCH_Message, (void*)mcch, 1); return -1; @@ -2619,15 +2619,15 @@ int decode_MCCH_Message(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index, u #endif if (mcch->message.present == MCCH_MessageType_PR_c1) { - LOG_D(RRC,"[UE %d] Found mcch message \n",Mod_id); + LOG_D(RRC,"[UE %d] Found mcch message \n",ue_mod_idP); if(mcch->message.choice.c1.present == MCCH_MessageType__c1_PR_mbsfnAreaConfiguration_r9) { /* memcpy((void*)*mcch_message, (void*)&mcch->message.choice.c1.choice.mbsfnAreaConfiguration_r9, sizeof(MBSFNAreaConfiguration_r9_t)); */ *mcch_message = &mcch->message.choice.c1.choice.mbsfnAreaConfiguration_r9; - LOG_I(RRC,"[UE %d] Frame %d : Found MBSFNAreaConfiguration from eNB %d \n",Mod_id, frameP, eNB_index); - decode_MBSFNAreaConfiguration(Mod_id,eNB_index,frameP, mbsfn_sync_area); + LOG_I(RRC,"[UE %d] Frame %d : Found MBSFNAreaConfiguration from eNB %d \n",ue_mod_idP, frameP, eNB_index); + decode_MBSFNAreaConfiguration(ue_mod_idP,eNB_index,frameP, mbsfn_sync_area); } } @@ -2635,11 +2635,11 @@ int decode_MCCH_Message(module_id_t Mod_id, frame_t frameP, uint8_t eNB_index, u return 0; } -void decode_MBSFNAreaConfiguration(module_id_t Mod_id, uint8_t eNB_index, frame_t frameP,uint8_t mbsfn_sync_area) { +void decode_MBSFNAreaConfiguration(module_id_t ue_mod_idP, uint8_t eNB_index, frame_t frameP,uint8_t mbsfn_sync_area) { LOG_D(RRC,"[UE %d] Frame %d : Number of MCH(s) in the MBSFN Sync Area %d is %d\n", - Mod_id, frameP, mbsfn_sync_area, UE_rrc_inst[Mod_id].mcch_message[eNB_index]->pmch_InfoList_r9.list.count); + ue_mod_idP, frameP, mbsfn_sync_area, UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9.list.count); // store to MAC/PHY necessary parameters for receiving MTCHs - rrc_mac_config_req(Mod_id,0,0,eNB_index, + rrc_mac_config_req(ue_mod_idP,ENB_FLAG_NO,0,eNB_index, (RadioResourceConfigCommonSIB_t *)NULL, (struct PhysicalConfigDedicated *)NULL, (MeasObjectToAddMod_t **)NULL, @@ -2659,7 +2659,7 @@ void decode_MBSFNAreaConfiguration(module_id_t Mod_id, uint8_t eNB_index, frame_ , 0, (MBSFN_AreaInfoList_r9_t *)NULL, -&UE_rrc_inst[Mod_id].mcch_message[eNB_index]->pmch_InfoList_r9 +&UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9 #endif #ifdef CBA , @@ -2668,10 +2668,10 @@ void decode_MBSFNAreaConfiguration(module_id_t Mod_id, uint8_t eNB_index, frame_ #endif ); - UE_rrc_inst[Mod_id].Info[eNB_index].MCCHStatus[mbsfn_sync_area] = 1; + UE_rrc_inst[ue_mod_idP].Info[eNB_index].MCCHStatus[mbsfn_sync_area] = 1; // Config Radio Bearer for MBMS user data (similar way to configure for eNB side in init_MBMS function) - rrc_pdcp_config_asn1_req(eNB_index, Mod_id, frameP, 0, + rrc_pdcp_config_asn1_req(eNB_index, ue_mod_idP, frameP, 0, NULL, // SRB_ToAddModList NULL, // DRB_ToAddModList (DRB_ToReleaseList_t*)NULL, @@ -2680,16 +2680,16 @@ void decode_MBSFNAreaConfiguration(module_id_t Mod_id, uint8_t eNB_index, frame_ NULL, // key rrc integrity NULL // key encryption #ifdef Rel10 - ,&(UE_rrc_inst[Mod_id].mcch_message[eNB_index]->pmch_InfoList_r9) + ,&(UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9) #endif ); - rrc_rlc_config_asn1_req(eNB_index, Mod_id, frameP,0, + rrc_rlc_config_asn1_req(eNB_index, ue_mod_idP, frameP,0, NULL,// SRB_ToAddModList NULL,// DRB_ToAddModList NULL,// DRB_ToReleaseList #ifdef Rel10 - &(UE_rrc_inst[Mod_id].mcch_message[eNB_index]->pmch_InfoList_r9) + &(UE_rrc_inst[ue_mod_idP].mcch_message[eNB_index]->pmch_InfoList_r9) #endif ); // */ @@ -2707,7 +2707,7 @@ void *rrc_ue_task(void *args_p) { MessageDef *msg_p; const char *msg_name; instance_t instance; - unsigned int Mod_id; + unsigned int ue_mod_id; int result; SRB_INFO *srb_info_p; @@ -2719,7 +2719,7 @@ void *rrc_ue_task(void *args_p) { msg_name = ITTI_MSG_NAME (msg_p); instance = ITTI_MSG_INSTANCE (msg_p); - Mod_id = instance - NB_eNB_INST; + ue_mod_id = instance - NB_eNB_INST; switch (ITTI_MSG_ID(msg_p)) { case TERMINATE_MESSAGE: @@ -2727,63 +2727,63 @@ void *rrc_ue_task(void *args_p) { break; case MESSAGE_TEST: - LOG_I(RRC, "[UE %d] Received %s\n", Mod_id, msg_name); + LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); break; /* MAC messages */ case RRC_MAC_IN_SYNC_IND: - LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", Mod_id, msg_name, + LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name, RRC_MAC_IN_SYNC_IND (msg_p).frame, RRC_MAC_IN_SYNC_IND (msg_p).enb_index); - UE_rrc_inst[Mod_id].Info[RRC_MAC_IN_SYNC_IND (msg_p).enb_index].N310_cnt = 0; - if (UE_rrc_inst[Mod_id].Info[RRC_MAC_IN_SYNC_IND (msg_p).enb_index].T310_active == 1) - UE_rrc_inst[Mod_id].Info[RRC_MAC_IN_SYNC_IND (msg_p).enb_index].N311_cnt++; + UE_rrc_inst[ue_mod_id].Info[RRC_MAC_IN_SYNC_IND (msg_p).enb_index].N310_cnt = 0; + if (UE_rrc_inst[ue_mod_id].Info[RRC_MAC_IN_SYNC_IND (msg_p).enb_index].T310_active == 1) + UE_rrc_inst[ue_mod_id].Info[RRC_MAC_IN_SYNC_IND (msg_p).enb_index].N311_cnt++; break; case RRC_MAC_OUT_OF_SYNC_IND: - LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", Mod_id, msg_name, + LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name, RRC_MAC_OUT_OF_SYNC_IND (msg_p).frame, RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index); - UE_rrc_inst[Mod_id].Info[RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index].N310_cnt ++; + UE_rrc_inst[ue_mod_id].Info[RRC_MAC_OUT_OF_SYNC_IND (msg_p).enb_index].N310_cnt ++; break; case RRC_MAC_BCCH_DATA_IND: - LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", Mod_id, msg_name, + LOG_D(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name, RRC_MAC_BCCH_DATA_IND (msg_p).frame, RRC_MAC_BCCH_DATA_IND (msg_p).enb_index); - decode_BCCH_DLSCH_Message (Mod_id, RRC_MAC_BCCH_DATA_IND (msg_p).frame, + decode_BCCH_DLSCH_Message (ue_mod_id, RRC_MAC_BCCH_DATA_IND (msg_p).frame, RRC_MAC_BCCH_DATA_IND (msg_p).enb_index, RRC_MAC_BCCH_DATA_IND (msg_p).sdu, RRC_MAC_BCCH_DATA_IND (msg_p).sdu_size, RRC_MAC_BCCH_DATA_IND (msg_p).rsrq, RRC_MAC_BCCH_DATA_IND (msg_p).rsrp); break; case RRC_MAC_CCCH_DATA_CNF: - LOG_I(RRC, "[UE %d] Received %s: eNB %d\n", Mod_id, msg_name, + LOG_I(RRC, "[UE %d] Received %s: eNB %d\n", ue_mod_id, msg_name, RRC_MAC_CCCH_DATA_CNF (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[Mod_id].Srb0[RRC_MAC_CCCH_DATA_CNF (msg_p).enb_index].Tx_buffer.payload_size = 0; + UE_rrc_inst[ue_mod_id].Srb0[RRC_MAC_CCCH_DATA_CNF (msg_p).enb_index].Tx_buffer.payload_size = 0; break; case RRC_MAC_CCCH_DATA_IND: - LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", Mod_id, msg_name, + LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d\n", ue_mod_id, msg_name, RRC_MAC_CCCH_DATA_IND (msg_p).frame, RRC_MAC_CCCH_DATA_IND (msg_p).enb_index); - srb_info_p = &UE_rrc_inst[Mod_id].Srb0[RRC_MAC_CCCH_DATA_IND (msg_p).enb_index]; + srb_info_p = &UE_rrc_inst[ue_mod_id].Srb0[RRC_MAC_CCCH_DATA_IND (msg_p).enb_index]; memcpy (srb_info_p->Rx_buffer.Payload, RRC_MAC_CCCH_DATA_IND (msg_p).sdu, RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size); srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size; - rrc_ue_decode_ccch (Mod_id, RRC_MAC_CCCH_DATA_IND (msg_p).frame, srb_info_p, + rrc_ue_decode_ccch (ue_mod_id, RRC_MAC_CCCH_DATA_IND (msg_p).frame, srb_info_p, RRC_MAC_CCCH_DATA_IND (msg_p).enb_index); break; # ifdef Rel10 case RRC_MAC_MCCH_DATA_IND: - LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", Mod_id, msg_name, + LOG_I(RRC, "[UE %d] Received %s: frameP %d, eNB %d, mbsfn SA %d\n", ue_mod_id, msg_name, RRC_MAC_MCCH_DATA_IND (msg_p).frame, RRC_MAC_MCCH_DATA_IND (msg_p).enb_index, RRC_MAC_MCCH_DATA_IND (msg_p).mbsfn_sync_area); - decode_MCCH_Message (Mod_id, RRC_MAC_MCCH_DATA_IND (msg_p).frame, RRC_MAC_MCCH_DATA_IND (msg_p).enb_index, + decode_MCCH_Message (ue_mod_id, RRC_MAC_MCCH_DATA_IND (msg_p).frame, RRC_MAC_MCCH_DATA_IND (msg_p).enb_index, RRC_MAC_MCCH_DATA_IND (msg_p).sdu, RRC_MAC_MCCH_DATA_IND (msg_p).sdu_size, RRC_MAC_MCCH_DATA_IND (msg_p).mbsfn_sync_area); break; @@ -2791,10 +2791,10 @@ void *rrc_ue_task(void *args_p) { /* PDCP messages */ case RRC_DCCH_DATA_IND: - LOG_I(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n", Mod_id, msg_name, + LOG_I(RRC, "[UE %d] Received %s: frameP %d, DCCH %d, eNB %d\n", ue_mod_id, msg_name, RRC_DCCH_DATA_IND (msg_p).frame, RRC_DCCH_DATA_IND (msg_p).dcch_index, RRC_DCCH_DATA_IND (msg_p).eNB_index); - rrc_ue_decode_dcch (Mod_id, RRC_DCCH_DATA_IND (msg_p).frame, + rrc_ue_decode_dcch (ue_mod_id, RRC_DCCH_DATA_IND (msg_p).frame, RRC_DCCH_DATA_IND (msg_p).dcch_index, RRC_DCCH_DATA_IND (msg_p).sdu_p, RRC_DCCH_DATA_IND (msg_p).eNB_index); @@ -2806,18 +2806,18 @@ void *rrc_ue_task(void *args_p) { # if defined(ENABLE_USE_MME) /* NAS messages */ case NAS_CELL_SELECTION_REQ: - Mod_id = 0; /* TODO force Mod_id to first UE, NAS UE not virtualized yet */ + ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */ - LOG_I(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", Mod_id, msg_name, rrc_get_state(Mod_id), + LOG_I(RRC, "[UE %d] Received %s: state %d, plmnID %d, rat %x\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id), NAS_CELL_SELECTION_REQ (msg_p).plmnID, NAS_CELL_SELECTION_REQ (msg_p).rat); /* Save cell selection criterion */ { - UE_rrc_inst[Mod_id].plmnID = NAS_CELL_SELECTION_REQ (msg_p).plmnID; - UE_rrc_inst[Mod_id].rat = NAS_CELL_SELECTION_REQ (msg_p).rat; + UE_rrc_inst[ue_mod_id].plmnID = NAS_CELL_SELECTION_REQ (msg_p).plmnID; + UE_rrc_inst[ue_mod_id].rat = NAS_CELL_SELECTION_REQ (msg_p).rat; } - switch (rrc_get_state(Mod_id)) { + switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_INACTIVE: { /* Need to first activate lower layers */ @@ -2825,9 +2825,9 @@ void *rrc_ue_task(void *args_p) { message_p = itti_alloc_new_message(TASK_RRC_UE, ACTIVATE_MESSAGE); - itti_send_msg_to_task(TASK_L2L1, NB_eNB_INST + Mod_id, message_p); + itti_send_msg_to_task(TASK_L2L1, NB_eNB_INST + ue_mod_id, message_p); - rrc_set_state (Mod_id, RRC_STATE_IDLE); + rrc_set_state (ue_mod_id, RRC_STATE_IDLE); /* Fall through to next case */ } @@ -2841,38 +2841,38 @@ void *rrc_ue_task(void *args_p) { PHY_FIND_CELL_REQ (message_p).earfcn_start = 1; PHY_FIND_CELL_REQ (message_p).earfcn_end = 1; - itti_send_msg_to_task(TASK_PHY_UE, NB_eNB_INST + Mod_id, message_p); - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_SEARCHING); + itti_send_msg_to_task(TASK_PHY_UE, NB_eNB_INST + ue_mod_id, message_p); + rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_SEARCHING); break; } case RRC_STATE_CONNECTED: /* should not happen */ - LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", Mod_id, msg_name, rrc_get_state(Mod_id)); + LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); break; default: - LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", Mod_id, rrc_get_state(Mod_id)); + LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", ue_mod_id, rrc_get_state(ue_mod_id)); break; } break; case NAS_CONN_ESTABLI_REQ: - LOG_I(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", Mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause, + LOG_I(RRC, "[UE %d] Received %s: cause %d, type %d, s_tmsi %d, plmnID %d\n", ue_mod_id, msg_name, NAS_CONN_ESTABLI_REQ (msg_p).cause, NAS_CONN_ESTABLI_REQ (msg_p).type, NAS_CONN_ESTABLI_REQ (msg_p).s_tmsi, NAS_CONN_ESTABLI_REQ (msg_p).plmnID); - UE_rrc_inst[Mod_id].initialNasMsg = NAS_CONN_ESTABLI_REQ (msg_p).initialNasMsg; + UE_rrc_inst[ue_mod_id].initialNasMsg = NAS_CONN_ESTABLI_REQ (msg_p).initialNasMsg; - switch (rrc_get_state(Mod_id)) { + switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_IDLE: { - if (rrc_get_sub_state(Mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) + if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) { - rrc_ue_generate_RRCConnectionRequest(Mod_id, 0 /* TODO put frameP number ! */, 0); + rrc_ue_generate_RRCConnectionRequest(ue_mod_id, 0 /* TODO put frameP number ! */, 0); LOG_I(RRC, "not sending connection request\n"); - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_CONNECTING); + rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING); } break; } @@ -2880,11 +2880,11 @@ void *rrc_ue_task(void *args_p) { case RRC_STATE_INACTIVE: case RRC_STATE_CONNECTED: /* should not happen */ - LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", Mod_id, msg_name, rrc_get_state(Mod_id)); + LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); break; default: - LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", Mod_id, rrc_get_state(Mod_id)); + LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", ue_mod_id, rrc_get_state(ue_mod_id)); break; } break; @@ -2894,22 +2894,22 @@ void *rrc_ue_task(void *args_p) { uint32_t length; uint8_t *buffer; - LOG_I(RRC, "[UE %d] Received %s: UEid %d\n", Mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid); + LOG_I(RRC, "[UE %d] Received %s: UEid %d\n", ue_mod_id, msg_name, NAS_UPLINK_DATA_REQ (msg_p).UEid); /* Create message for PDCP (ULInformationTransfer_t) */ length = do_ULInformationTransfer(&buffer, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.length, NAS_UPLINK_DATA_REQ (msg_p).nasMsg.data); /* Transfer data to PDCP */ - pdcp_rrc_data_req (0, Mod_id, 0 /* TODO put frameP number ! */, 0, DCCH, rrc_mui++, 0, length, buffer, 1); + pdcp_rrc_data_req (0, ue_mod_id, 0 /* TODO put frameP number ! */, 0, DCCH, rrc_mui++, 0, length, buffer, 1); break; } # endif # if defined(ENABLE_RAL) case RRC_RAL_SCAN_REQ: - LOG_I(RRC, "[UE %d] Received %s: state %d\n", Mod_id, msg_name); + LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name); - switch (rrc_get_state(Mod_id)) { + switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_INACTIVE: { /* Need to first activate lower layers */ @@ -2919,19 +2919,19 @@ void *rrc_ue_task(void *args_p) { itti_send_msg_to_task(TASK_L2L1, instance, message_p); - rrc_set_state (Mod_id, RRC_STATE_IDLE); + rrc_set_state (ue_mod_id, RRC_STATE_IDLE); /* Fall through to next case */ } case RRC_STATE_IDLE: { - if (rrc_get_sub_state(Mod_id) != RRC_SUB_STATE_IDLE_SEARCHING) { + if (rrc_get_sub_state(ue_mod_id) != RRC_SUB_STATE_IDLE_SEARCHING) { /* Ask to layer 1 to find a cell matching the criterion */ MessageDef *message_p; message_p = itti_alloc_new_message(TASK_RRC_UE, PHY_FIND_CELL_REQ); - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_SEARCHING); + rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_SEARCHING); PHY_FIND_CELL_REQ (message_p).transaction_id = RRC_RAL_SCAN_REQ (msg_p).transaction_id; PHY_FIND_CELL_REQ (message_p).earfcn_start = 1; @@ -2944,20 +2944,20 @@ void *rrc_ue_task(void *args_p) { case RRC_STATE_CONNECTED: /* should not happen */ - LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", Mod_id, msg_name, rrc_get_state(Mod_id)); + LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); break; default: - LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", Mod_id, rrc_get_state(Mod_id)); + LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", ue_mod_id, rrc_get_state(ue_mod_id)); break; } break; case PHY_FIND_CELL_IND: - LOG_I(RRC, "[UE %d] Received %s: state %d\n", Mod_id, msg_name, rrc_get_state(Mod_id)); - switch (rrc_get_state(Mod_id)) { + LOG_I(RRC, "[UE %d] Received %s: state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); + switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_IDLE: - switch (rrc_get_sub_state(Mod_id)) { + switch (rrc_get_sub_state(ue_mod_id)) { case RRC_SUB_STATE_IDLE_SEARCHING: { MessageDef *message_p; @@ -2977,7 +2977,7 @@ void *rrc_ue_task(void *args_p) { RRC_RAL_SCAN_CONF (message_p).link_scan_resp[i].sig_strength._union.dbm = PHY_FIND_CELL_IND(msg_p).cells[i].rsrp; } - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE); + rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE); itti_send_msg_to_task(TASK_RAL_UE, instance, message_p); break; @@ -2985,20 +2985,20 @@ void *rrc_ue_task(void *args_p) { default: LOG_C(RRC, "[UE %d] Invalid RRC state %d substate %d\n", - Mod_id, - rrc_get_state(Mod_id), - rrc_get_sub_state(Mod_id)); + ue_mod_id, + rrc_get_state(ue_mod_id), + rrc_get_sub_state(ue_mod_id)); } break; case RRC_STATE_INACTIVE: case RRC_STATE_CONNECTED: /* should not happen */ - LOG_E(RRC, "[UE %d] indication %s in RRC state %d\n", Mod_id, msg_name, rrc_get_state(Mod_id)); + LOG_E(RRC, "[UE %d] indication %s in RRC state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); break; default: - LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", Mod_id, rrc_get_state(Mod_id)); + LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", ue_mod_id, rrc_get_state(ue_mod_id)); break; } break; @@ -3021,20 +3021,20 @@ void *rrc_ue_task(void *args_p) { } case RRC_RAL_CONFIGURE_THRESHOLD_REQ: - rrc_ue_ral_handle_configure_threshold_request(Mod_id, msg_p); + rrc_ue_ral_handle_configure_threshold_request(ue_mod_id, msg_p); break; case RRC_RAL_CONNECTION_ESTABLISHMENT_REQ: - LOG_I(RRC, "[UE %d] Received %s\n", Mod_id, msg_name); - switch (rrc_get_state(Mod_id)) { + LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); + switch (rrc_get_state(ue_mod_id)) { case RRC_STATE_IDLE: { - if (rrc_get_sub_state(Mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) + if (rrc_get_sub_state(ue_mod_id) == RRC_SUB_STATE_IDLE_SIB_COMPLETE) { - rrc_ue_generate_RRCConnectionRequest(Mod_id, 0 /* TODO put frameP number ! */, 0); + rrc_ue_generate_RRCConnectionRequest(ue_mod_id, 0 /* TODO put frameP number ! */, 0); LOG_I(RRC, "not sending connection request\n"); - rrc_set_sub_state (Mod_id, RRC_SUB_STATE_IDLE_CONNECTING); + rrc_set_sub_state (ue_mod_id, RRC_SUB_STATE_IDLE_CONNECTING); } break; } @@ -3042,23 +3042,23 @@ void *rrc_ue_task(void *args_p) { case RRC_STATE_INACTIVE: case RRC_STATE_CONNECTED: /* should not happen */ - LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", Mod_id, msg_name, rrc_get_state(Mod_id)); + LOG_E(RRC, "[UE %d] request %s in RRC state %d\n", ue_mod_id, msg_name, rrc_get_state(ue_mod_id)); break; default: - LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", Mod_id, rrc_get_state(Mod_id)); + LOG_C(RRC, "[UE %d] Invalid RRC state %d\n", ue_mod_id, rrc_get_state(ue_mod_id)); break; } break; case RRC_RAL_CONNECTION_RELEASE_REQ: - Mod_id = 0; /* TODO force Mod_id to first UE, NAS UE not virtualized yet */ - LOG_I(RRC, "[UE %d] Received %s\n", Mod_id, msg_name); + ue_mod_id = 0; /* TODO force ue_mod_id to first UE, NAS UE not virtualized yet */ + LOG_I(RRC, "[UE %d] Received %s\n", ue_mod_id, msg_name); break; #endif default: - LOG_E(RRC, "[UE %d] Received unexpected message %s\n", Mod_id, msg_name); + LOG_E(RRC, "[UE %d] Received unexpected message %s\n", ue_mod_id, msg_name); break; } diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 5e2c496c60..405537ee16 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -27,7 +27,6 @@ *******************************************************************************/ - /*! \file rrc_eNB.c * \brief rrc procedures for eNB * \author Raymond Knopp and Navid Nikaein @@ -63,2077 +62,2103 @@ //#endif #ifdef USER_MODE -# include "RRC/NAS/nas_config.h" -# include "RRC/NAS/rb_config.h" -# include "OCG.h" -# include "OCG_extern.h" +# include "RRC/NAS/nas_config.h" +# include "RRC/NAS/rb_config.h" +# include "OCG.h" +# include "OCG_extern.h" #endif #if defined(ENABLE_SECURITY) -# include "UTIL/OSA/osa_defs.h" +# include "UTIL/OSA/osa_defs.h" #endif #if defined(ENABLE_USE_MME) -# include "rrc_eNB_S1AP.h" -# if defined(ENABLE_ITTI) -# else -# include "../../S1AP/s1ap_eNB.h" -# endif +# include "rrc_eNB_S1AP.h" +# if defined(ENABLE_ITTI) +# else +# include "../../S1AP/s1ap_eNB.h" +# endif #endif #include "pdcp.h" #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +# include "intertask_interface.h" #endif #ifdef ENABLE_RAL -#include "rrc_eNB_ral.h" +# include "rrc_eNB_ral.h" #endif //#define XER_PRINT #ifdef PHY_EMUL -extern EMULATION_VARS *Emul_vars; +extern EMULATION_VARS *Emul_vars; #endif -extern eNB_MAC_INST *eNB_mac_inst; -extern UE_MAC_INST *UE_mac_inst; +extern eNB_MAC_INST *eNB_mac_inst; +extern UE_MAC_INST *UE_mac_inst; #ifdef BIGPHYSAREA -extern void *bigphys_malloc (int); +extern void *bigphys_malloc( + int); #endif -extern uint16_t two_tier_hexagonal_cellIds[7]; -extern inline unsigned int taus (void); +extern uint16_t two_tier_hexagonal_cellIds[7]; +extern inline unsigned int taus( + void); /* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */ -static const uint8_t RRC_TRANSACTION_IDENTIFIER_NUMBER = 4; +static const uint8_t RRC_TRANSACTION_IDENTIFIER_NUMBER = 4; -mui_t rrc_eNB_mui = 0; +mui_t rrc_eNB_mui = 0; /*------------------------------------------------------------------------------*/ -static void init_SI (module_id_t Mod_id +static void init_SI( + module_id_t enb_mod_idP #if defined(ENABLE_ITTI) - , RrcConfigurationReq *configuration + , + RrcConfigurationReq * configuration #endif - ) { - uint8_t SIwindowsize = 1; - uint16_t SIperiod = 8; + ) { + uint8_t SIwindowsize = 1; + uint16_t SIperiod = 8; #ifdef Rel10 - int i; + int i; #endif - /* - uint32_t mib=0; - int i; - int N_RB_DL,phich_resource; + /* + uint32_t mib=0; + int i; + int N_RB_DL,phich_resource; + do_MIB(enb_mod_idP, mac_xface->lte_frame_parms,0x321,&mib); - do_MIB(Mod_id, mac_xface->lte_frame_parms,0x321,&mib); + for (i=0;i<1024;i+=4) + do_MIB(enb_mod_idP, mac_xface->lte_frame_parms,i,&mib); - for (i=0;i<1024;i+=4) - do_MIB(Mod_id, mac_xface->lte_frame_parms,i,&mib); + N_RB_DL=6; + while (N_RB_DL != 0) { + phich_resource = 1; + while (phich_resource != 0) { + for (i=0;i<2;i++) { + mac_xface->lte_frame_parms->N_RB_DL = N_RB_DL; + mac_xface->lte_frame_parms->phich_config_common.phich_duration=i; + mac_xface->lte_frame_parms->phich_config_common.phich_resource = phich_resource; + do_MIB(enb_mod_idP, mac_xface->lte_frame_parms,0,&mib); + } + if (phich_resource == 1) + phich_resource = 3; + else if (phich_resource == 3) + phich_resource = 6; + else if (phich_resource == 6) + phich_resource = 12; + else if (phich_resource == 12) + phich_resource = 0; + } + if (N_RB_DL == 6) + N_RB_DL = 15; + else if (N_RB_DL == 15) + N_RB_DL = 25; + else if (N_RB_DL == 25) + N_RB_DL = 50; + else if (N_RB_DL == 50) + N_RB_DL = 75; + else if (N_RB_DL == 75) + N_RB_DL = 100; + else if (N_RB_DL == 100) + N_RB_DL = 0; + } + exit(-1); + */ - N_RB_DL=6; - while (N_RB_DL != 0) { - phich_resource = 1; - while (phich_resource != 0) { - for (i=0;i<2;i++) { - mac_xface->lte_frame_parms->N_RB_DL = N_RB_DL; - mac_xface->lte_frame_parms->phich_config_common.phich_duration=i; - mac_xface->lte_frame_parms->phich_config_common.phich_resource = phich_resource; - do_MIB(Mod_id, mac_xface->lte_frame_parms,0,&mib); - } - if (phich_resource == 1) - phich_resource = 3; - else if (phich_resource == 3) - phich_resource = 6; - else if (phich_resource == 6) - phich_resource = 12; - else if (phich_resource == 12) - phich_resource = 0; - } - if (N_RB_DL == 6) - N_RB_DL = 15; - else if (N_RB_DL == 15) - N_RB_DL = 25; - else if (N_RB_DL == 25) - N_RB_DL = 50; - else if (N_RB_DL == 50) - N_RB_DL = 75; - else if (N_RB_DL == 75) - N_RB_DL = 100; - else if (N_RB_DL == 100) - N_RB_DL = 0; - } - exit(-1); - */ + eNB_rrc_inst[enb_mod_idP].sizeof_SIB1 = 0; + eNB_rrc_inst[enb_mod_idP].sizeof_SIB23 = 0; - eNB_rrc_inst[Mod_id].sizeof_SIB1 = 0; - eNB_rrc_inst[Mod_id].sizeof_SIB23 = 0; + eNB_rrc_inst[enb_mod_idP].SIB1 = (uint8_t *) malloc16(32); - eNB_rrc_inst[Mod_id].SIB1 = (uint8_t *) malloc16 (32); + /* + printf ("before SIB1 init : Nid_cell %d\n", mac_xface->lte_frame_parms->Nid_cell); + printf ("before SIB1 init : frame_type %d,tdd_config %d\n", + mac_xface->lte_frame_parms->frame_type, + mac_xface->lte_frame_parms->tdd_config); + */ - /* - printf ("before SIB1 init : Nid_cell %d\n", mac_xface->lte_frame_parms->Nid_cell); - printf ("before SIB1 init : frame_type %d,tdd_config %d\n", - mac_xface->lte_frame_parms->frame_type, - mac_xface->lte_frame_parms->tdd_config); - */ - - if (eNB_rrc_inst[Mod_id].SIB1) - eNB_rrc_inst[Mod_id].sizeof_SIB1 = do_SIB1 (Mod_id, - mac_xface->lte_frame_parms, - (uint8_t *) - eNB_rrc_inst[Mod_id].SIB1, - &eNB_rrc_inst[Mod_id]. - siblock1, - &eNB_rrc_inst[Mod_id].sib1 + if (eNB_rrc_inst[enb_mod_idP].SIB1) + eNB_rrc_inst[enb_mod_idP].sizeof_SIB1 = do_SIB1(enb_mod_idP, mac_xface->lte_frame_parms, (uint8_t *) + eNB_rrc_inst[enb_mod_idP].SIB1, + &eNB_rrc_inst[enb_mod_idP].siblock1, &eNB_rrc_inst[enb_mod_idP].sib1 #if defined(ENABLE_ITTI) - , configuration + , configuration #endif - ); - else - { - LOG_E (RRC, "[eNB %d] init_SI: FATAL, no memory for SIB1 allocated\n", Mod_id); - mac_xface->macphy_exit ("[RRC][init_SI] FATAL, no memory for SIB1 allocated"); + ); + else { + LOG_E(RRC, "[eNB %d] init_SI: FATAL, no memory for SIB1 allocated\n", enb_mod_idP); + mac_xface->macphy_exit("[RRC][init_SI] FATAL, no memory for SIB1 allocated"); } - /* - printf ("after SIB1 init : Nid_cell %d\n", mac_xface->lte_frame_parms->Nid_cell); - printf ("after SIB1 init : frame_type %d,tdd_config %d\n", - mac_xface->lte_frame_parms->frame_type, - mac_xface->lte_frame_parms->tdd_config); - */ - if (eNB_rrc_inst[Mod_id].sizeof_SIB1 == 255) - mac_xface->macphy_exit ("[RRC][init_SI] FATAL, eNB_rrc_inst[Mod_id].sizeof_SIB1 == 255"); + /* + printf ("after SIB1 init : Nid_cell %d\n", mac_xface->lte_frame_parms->Nid_cell); + printf ("after SIB1 init : frame_type %d,tdd_config %d\n", + mac_xface->lte_frame_parms->frame_type, + mac_xface->lte_frame_parms->tdd_config); + */ + if (eNB_rrc_inst[enb_mod_idP].sizeof_SIB1 == 255) + mac_xface->macphy_exit("[RRC][init_SI] FATAL, eNB_rrc_inst[enb_mod_idP].sizeof_SIB1 == 255"); - eNB_rrc_inst[Mod_id].SIB23 = (uint8_t *) malloc16 (64); - if (eNB_rrc_inst[Mod_id].SIB23) { - eNB_rrc_inst[Mod_id].sizeof_SIB23 = do_SIB23 (Mod_id, - mac_xface-> - lte_frame_parms, - eNB_rrc_inst[Mod_id].SIB23, - &eNB_rrc_inst[Mod_id].systemInformation, - &eNB_rrc_inst[Mod_id].sib2, - &eNB_rrc_inst[Mod_id].sib3 + eNB_rrc_inst[enb_mod_idP].SIB23 = (uint8_t *) malloc16(64); + if (eNB_rrc_inst[enb_mod_idP].SIB23) { + eNB_rrc_inst[enb_mod_idP].sizeof_SIB23 = do_SIB23(enb_mod_idP, + mac_xface->lte_frame_parms, + eNB_rrc_inst[enb_mod_idP].SIB23, + &eNB_rrc_inst[enb_mod_idP].systemInformation, + &eNB_rrc_inst[enb_mod_idP].sib2, &eNB_rrc_inst[enb_mod_idP].sib3 #ifdef Rel10 - , - &eNB_rrc_inst[Mod_id].sib13, - eNB_rrc_inst[Mod_id].MBMS_flag + , &eNB_rrc_inst[enb_mod_idP].sib13, eNB_rrc_inst[enb_mod_idP].MBMS_flag #endif #if defined(ENABLE_ITTI) - , configuration + , configuration #endif - ); - /* - eNB_rrc_inst[Mod_id].sizeof_SIB23 = do_SIB2_AT4(Mod_id, - eNB_rrc_inst[Mod_id].SIB23, - &eNB_rrc_inst[Mod_id].systemInformation, - &eNB_rrc_inst[Mod_id].sib2, -#if defined(ENABLE_ITTI) - , configuration -#endif - ); - */ - if (eNB_rrc_inst[Mod_id].sizeof_SIB23 == 255) - mac_xface->macphy_exit ("[RRC][init_SI] FATAL, eNB_rrc_inst[Mod_id].sizeof_SIB23 == 255"); + ); + /* + eNB_rrc_inst[enb_mod_idP].sizeof_SIB23 = do_SIB2_AT4(enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].SIB23, + &eNB_rrc_inst[enb_mod_idP].systemInformation, + &eNB_rrc_inst[enb_mod_idP].sib2, + #if defined(ENABLE_ITTI) + , configuration + #endif + ); + */ + if (eNB_rrc_inst[enb_mod_idP].sizeof_SIB23 == 255) + mac_xface->macphy_exit("[RRC][init_SI] FATAL, eNB_rrc_inst[enb_mod_idP].sizeof_SIB23 == 255"); - LOG_T (RRC, "[eNB %d] SIB2/3 Contents (partial)\n", Mod_id); - LOG_T (RRC, "[eNB %d] pusch_config_common.n_SB = %ld\n", Mod_id, - eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.pusch_ConfigBasic.n_SB); - LOG_T (RRC, "[eNB %d] pusch_config_common.hoppingMode = %ld\n", Mod_id, - eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode); - LOG_T (RRC, "[eNB %d] pusch_config_common.pusch_HoppingOffset = %ld\n", - Mod_id, - eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset); - LOG_T (RRC, "[eNB %d] pusch_config_common.enable64QAM = %d\n", Mod_id, - (int) eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM); - LOG_T (RRC, "[eNB %d] pusch_config_common.groupHoppingEnabled = %d\n", - Mod_id, - (int) eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled); - LOG_T (RRC, "[eNB %d] pusch_config_common.groupAssignmentPUSCH = %ld\n", - Mod_id, - eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. - groupAssignmentPUSCH); - LOG_T (RRC, - "[eNB %d] pusch_config_common.sequenceHoppingEnabled = %d\n", - Mod_id, - (int) eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. - sequenceHoppingEnabled); - LOG_T (RRC, "[eNB %d] pusch_config_common.cyclicShift = %ld\n", Mod_id, - eNB_rrc_inst[Mod_id].sib2->radioResourceConfigCommon. - pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift); + LOG_T(RRC, "[eNB %d] SIB2/3 Contents (partial)\n", enb_mod_idP); + LOG_T(RRC, "[eNB %d] pusch_config_common.n_SB = %ld\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB); + LOG_T(RRC, "[eNB %d] pusch_config_common.hoppingMode = %ld\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode); + LOG_T(RRC, "[eNB %d] pusch_config_common.pusch_HoppingOffset = %ld\n", + enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon. + pusch_ConfigBasic.pusch_HoppingOffset); + LOG_T(RRC, "[eNB %d] pusch_config_common.enable64QAM = %d\n", enb_mod_idP, + (int)eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon. + pusch_ConfigBasic.enable64QAM); + LOG_T(RRC, "[eNB %d] pusch_config_common.groupHoppingEnabled = %d\n", enb_mod_idP, + (int)eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon. + ul_ReferenceSignalsPUSCH.groupHoppingEnabled); + LOG_T(RRC, "[eNB %d] pusch_config_common.groupAssignmentPUSCH = %ld\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. + groupAssignmentPUSCH); + LOG_T(RRC, "[eNB %d] pusch_config_common.sequenceHoppingEnabled = %d\n", enb_mod_idP, + (int)eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. + sequenceHoppingEnabled); + LOG_T(RRC, "[eNB %d] pusch_config_common.cyclicShift = %ld\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon.pusch_ConfigCommon. + ul_ReferenceSignalsPUSCH.cyclicShift); #ifdef Rel10 - if (eNB_rrc_inst[Mod_id].MBMS_flag > 0) { - for (i=0; - i< eNB_rrc_inst[Mod_id].sib2->mbsfn_SubframeConfigList->list.count; - i++){ - // SIB 2 - // LOG_D(RRC, "[eNB %d] mbsfn_SubframeConfigList.list.count = %ld\n", Mod_id, eNB_rrc_inst[Mod_id].sib2->mbsfn_SubframeConfigList->list.count); - LOG_D (RRC, "[eNB %d] SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n", - Mod_id,i,eNB_rrc_inst[Mod_id].sib2->mbsfn_SubframeConfigList->list.count); - LOG_D (RRC, "[eNB %d] mbsfn_Subframe_pattern is = %x\n", Mod_id, - eNB_rrc_inst[Mod_id].sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0]>>0); - LOG_D (RRC, "[eNB %d] radioframe_allocation_period = %ld (just index number, not the real value)\n", Mod_id, eNB_rrc_inst[Mod_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod); // need to display the real value, using array of char (like in dumping SIB2) - LOG_D (RRC, "[eNB %d] radioframe_allocation_offset = %ld\n", - Mod_id, - eNB_rrc_inst[Mod_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset); + if (eNB_rrc_inst[enb_mod_idP].MBMS_flag > 0) { + for (i = 0; i < eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count; i++) { + // SIB 2 + // LOG_D(RRC, "[eNB %d] mbsfn_SubframeConfigList.list.count = %ld\n", enb_mod_idP, eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count); + LOG_D(RRC, "[eNB %d] SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n", + enb_mod_idP, i, eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count); + LOG_D(RRC, "[eNB %d] mbsfn_Subframe_pattern is = %x\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation. + choice.oneFrame.buf[0] >> 0); + LOG_D(RRC, "[eNB %d] radioframe_allocation_period = %ld (just index number, not the real value)\n", enb_mod_idP, eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod); // need to display the real value, using array of char (like in dumping SIB2) + LOG_D(RRC, "[eNB %d] radioframe_allocation_offset = %ld\n", + enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset); + } + // SIB13 + for (i = 0; i < eNB_rrc_inst[enb_mod_idP].sib13->mbsfn_AreaInfoList_r9.list.count; i++) { + LOG_D(RRC, "[eNB %d] SIB13 contents for MBSFN sync area %d/2 (partial)\n", + enb_mod_idP, i, eNB_rrc_inst[enb_mod_idP].sib13->mbsfn_AreaInfoList_r9.list.count); + LOG_D(RRC, "[eNB %d] MCCH Repetition Period: %d (just index number, not real value)\n", + enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib13->mbsfn_AreaInfoList_r9.list.array[i]-> + mcch_Config_r9.mcch_RepetitionPeriod_r9); + LOG_D(RRC, "[eNB %d] MCCH Offset: %d\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9); + } } - // SIB13 - for (i=0; - i< eNB_rrc_inst[Mod_id].sib13->mbsfn_AreaInfoList_r9.list.count; - i++){ - LOG_D (RRC,"[eNB %d] SIB13 contents for MBSFN sync area %d/2 (partial)\n", - Mod_id, i, - eNB_rrc_inst[Mod_id].sib13->mbsfn_AreaInfoList_r9.list.count); - LOG_D (RRC,"[eNB %d] MCCH Repetition Period: %d (just index number, not real value)\n", - Mod_id, - eNB_rrc_inst[Mod_id].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - LOG_D (RRC, "[eNB %d] MCCH Offset: %d\n", Mod_id, - eNB_rrc_inst[Mod_id].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9); - } - } #endif - LOG_D (RRC, "[MSC_MSG][FRAME unknown][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) --->][MAC_UE][MOD %02d][]\n", - Mod_id, Mod_id); + LOG_D(RRC, + "[FRAME unknown][RRC_UE][MOD %02d][][--- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) --->][MAC_UE][MOD %02d][]\n", + enb_mod_idP, enb_mod_idP); - rrc_mac_config_req (Mod_id, 1, 0, 0, - (RadioResourceConfigCommonSIB_t *) & - eNB_rrc_inst[Mod_id].sib2-> - radioResourceConfigCommon, - (struct PhysicalConfigDedicated *) NULL, - (MeasObjectToAddMod_t **) NULL, - (MAC_MainConfig_t *) NULL, 0, - (struct LogicalChannelConfig *) NULL, - (MeasGapConfig_t *) NULL, - eNB_rrc_inst[Mod_id].sib1->tdd_Config, - NULL, - &SIwindowsize, &SIperiod, - eNB_rrc_inst[Mod_id].sib2->freqInfo.ul_CarrierFreq, - eNB_rrc_inst[Mod_id].sib2->freqInfo.ul_Bandwidth, - &eNB_rrc_inst[Mod_id].sib2->freqInfo. - additionalSpectrumEmission, - (MBSFN_SubframeConfigList_t *) eNB_rrc_inst[Mod_id]. - sib2->mbsfn_SubframeConfigList + rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, 0, 0, + (RadioResourceConfigCommonSIB_t *) & + eNB_rrc_inst[enb_mod_idP].sib2->radioResourceConfigCommon, + (struct PhysicalConfigDedicated *)NULL, + (MeasObjectToAddMod_t **) NULL, + (MAC_MainConfig_t *) NULL, 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *) NULL, + eNB_rrc_inst[enb_mod_idP].sib1->tdd_Config, + NULL, + &SIwindowsize, &SIperiod, + eNB_rrc_inst[enb_mod_idP].sib2->freqInfo.ul_CarrierFreq, + eNB_rrc_inst[enb_mod_idP].sib2->freqInfo.ul_Bandwidth, + &eNB_rrc_inst[enb_mod_idP].sib2->freqInfo.additionalSpectrumEmission, + (MBSFN_SubframeConfigList_t *) eNB_rrc_inst[enb_mod_idP].sib2->mbsfn_SubframeConfigList #ifdef Rel10 - , - eNB_rrc_inst[Mod_id].MBMS_flag, - (MBSFN_AreaInfoList_r9_t *) & eNB_rrc_inst[Mod_id]. - sib13->mbsfn_AreaInfoList_r9, - (PMCH_InfoList_r9_t *) NULL + , + eNB_rrc_inst[enb_mod_idP].MBMS_flag, + (MBSFN_AreaInfoList_r9_t *) & eNB_rrc_inst[enb_mod_idP].sib13->mbsfn_AreaInfoList_r9, + (PMCH_InfoList_r9_t *) NULL #endif #ifdef CBA - ,0, //eNB_rrc_inst[Mod_id].num_active_cba_groups, - 0 //eNB_rrc_inst[Mod_id].cba_rnti[0] + , 0, //eNB_rrc_inst[enb_mod_idP].num_active_cba_groups, + 0 //eNB_rrc_inst[enb_mod_idP].cba_rnti[0] #endif - ); - } - else - { - LOG_E (RRC, "[eNB] init_SI: FATAL, no memory for SIB2/3 allocated\n"); - mac_xface->macphy_exit ("[RRC][init_SI] FATAL, no memory for SIB2/3 allocated"); - } -} - -#ifdef Rel10 -/*------------------------------------------------------------------------------*/ -static void init_MCCH (module_id_t Mod_id) { - - int sync_area=0; - // initialize RRC_eNB_INST MCCH entry - eNB_rrc_inst[Mod_id].MCCH_MESSAGE=malloc(eNB_rrc_inst[Mod_id].num_mbsfn_sync_area*sizeof(uint32_t*)); - for (sync_area = 0; - sync_area < eNB_rrc_inst[Mod_id].num_mbsfn_sync_area; - sync_area++){ - - eNB_rrc_inst[Mod_id].sizeof_MCCH_MESSAGE[sync_area] = 0; - eNB_rrc_inst[Mod_id].MCCH_MESSAGE[sync_area] = (uint8_t *) malloc16 (32); - - if (eNB_rrc_inst[Mod_id].MCCH_MESSAGE[sync_area] == NULL) { - LOG_E(RRC,"[eNB %d][MAIN] init_MCCH: FATAL, no memory for MCCH MESSAGE allocated \n", Mod_id); - mac_xface->macphy_exit("[RRC][init_MCCH] not enough memory\n"); + ); } else { - eNB_rrc_inst[Mod_id].sizeof_MCCH_MESSAGE[sync_area] = do_MBSFNAreaConfig (Mod_id, - mac_xface->lte_frame_parms, - sync_area, - (uint8_t *) eNB_rrc_inst[Mod_id].MCCH_MESSAGE[sync_area], - &eNB_rrc_inst[Mod_id].mcch, - &eNB_rrc_inst[Mod_id].mcch_message); - - - LOG_I(RRC,"mcch message pointer %p for sync area %d \n", eNB_rrc_inst[Mod_id].MCCH_MESSAGE[sync_area],sync_area); - LOG_D (RRC, "[eNB %d] MCCH_MESSAGE contents for Sync Area %d (partial)\n", Mod_id,sync_area); - LOG_D (RRC, "[eNB %d] CommonSF_AllocPeriod_r9 %d\n", Mod_id, - eNB_rrc_inst[Mod_id].mcch_message->commonSF_AllocPeriod_r9); - LOG_D (RRC, - "[eNB %d] CommonSF_Alloc_r9.list.count (number of MBSFN Subframe Pattern) %d\n", - Mod_id, - eNB_rrc_inst[Mod_id].mcch_message->commonSF_Alloc_r9.list.count); - LOG_D (RRC, "[eNB %d] MBSFN Subframe Pattern: %02x (in hex)\n", - Mod_id, - eNB_rrc_inst[Mod_id].mcch_message->commonSF_Alloc_r9.list. - array[0]->subframeAllocation.choice.oneFrame.buf[0]); - - - if (eNB_rrc_inst[Mod_id].sizeof_MCCH_MESSAGE[sync_area] == 255) - mac_xface->macphy_exit ("[RRC][init_MCCH] eNB_rrc_inst[Mod_id].sizeof_MCCH_MESSAGE[sync_area] == 255"); - else - eNB_rrc_inst[Mod_id].MCCH_MESS[sync_area].Active = 1; + LOG_E(RRC, "[eNB] init_SI: FATAL, no memory for SIB2/3 allocated\n"); + mac_xface->macphy_exit("[RRC][init_SI] FATAL, no memory for SIB2/3 allocated"); } - } - //Set the eNB_rrc_inst[Mod_id].MCCH_MESS.Active to 1 (allow to transfer MCCH message RRC->MAC in function mac_rrc_data_req) - +} - // ??Configure MCCH logical channel - // call mac_config_req with appropriate structure from ASN.1 description - - // LOG_I(RRC, "DUY: serviceID is %d\n",eNB_rrc_inst[Mod_id].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->tmgi_r9.serviceId_r9.buf[2]); - // LOG_I(RRC, "DUY: session ID is %d\n",eNB_rrc_inst[Mod_id].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->sessionId_r9->buf[0]); - rrc_mac_config_req (Mod_id, 1, 0, 0, - (RadioResourceConfigCommonSIB_t *) NULL, - (struct PhysicalConfigDedicated *) NULL, - (MeasObjectToAddMod_t **) NULL, - (MAC_MainConfig_t *) NULL, - 0, - (struct LogicalChannelConfig *) NULL, - (MeasGapConfig_t *) NULL, - (TDD_Config_t *) NULL, - NULL, - (uint8_t *) NULL, - (uint16_t *) NULL, - NULL, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL #ifdef Rel10 - , - 0, - (MBSFN_AreaInfoList_r9_t *) NULL, - (PMCH_InfoList_r9_t *) & (eNB_rrc_inst[Mod_id].mcch_message->pmch_InfoList_r9) -#endif -#ifdef CBA - , 0, 0 -#endif - ); +/*------------------------------------------------------------------------------*/ +static void init_MCCH( + module_id_t enb_mod_idP) { - //LOG_I(RRC,"DUY: lcid after rrc_mac_config_req is %02d\n",eNB_rrc_inst[Mod_id].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9); + int sync_area = 0; + // initialize RRC_eNB_INST MCCH entry + eNB_rrc_inst[enb_mod_idP].MCCH_MESSAGE = malloc(eNB_rrc_inst[enb_mod_idP].num_mbsfn_sync_area * sizeof(uint32_t *)); + for (sync_area = 0; sync_area < eNB_rrc_inst[enb_mod_idP].num_mbsfn_sync_area; sync_area++) { + + eNB_rrc_inst[enb_mod_idP].sizeof_MCCH_MESSAGE[sync_area] = 0; + eNB_rrc_inst[enb_mod_idP].MCCH_MESSAGE[sync_area] = (uint8_t *) malloc16(32); + + if (eNB_rrc_inst[enb_mod_idP].MCCH_MESSAGE[sync_area] == NULL) { + LOG_E(RRC, "[eNB %d][MAIN] init_MCCH: FATAL, no memory for MCCH MESSAGE allocated \n", enb_mod_idP); + mac_xface->macphy_exit("[RRC][init_MCCH] not enough memory\n"); + } else { + eNB_rrc_inst[enb_mod_idP].sizeof_MCCH_MESSAGE[sync_area] = do_MBSFNAreaConfig(enb_mod_idP, + mac_xface->lte_frame_parms, + sync_area, (uint8_t *) + eNB_rrc_inst[enb_mod_idP].MCCH_MESSAGE + [sync_area], + &eNB_rrc_inst[enb_mod_idP].mcch, + &eNB_rrc_inst + [enb_mod_idP].mcch_message); + + LOG_I(RRC, "mcch message pointer %p for sync area %d \n", eNB_rrc_inst[enb_mod_idP].MCCH_MESSAGE[sync_area], + sync_area); + LOG_D(RRC, "[eNB %d] MCCH_MESSAGE contents for Sync Area %d (partial)\n", enb_mod_idP, sync_area); + LOG_D(RRC, "[eNB %d] CommonSF_AllocPeriod_r9 %d\n", enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].mcch_message->commonSF_AllocPeriod_r9); + LOG_D(RRC, + "[eNB %d] CommonSF_Alloc_r9.list.count (number of MBSFN Subframe Pattern) %d\n", + enb_mod_idP, eNB_rrc_inst[enb_mod_idP].mcch_message->commonSF_Alloc_r9.list.count); + LOG_D(RRC, "[eNB %d] MBSFN Subframe Pattern: %02x (in hex)\n", + enb_mod_idP, + eNB_rrc_inst[enb_mod_idP].mcch_message->commonSF_Alloc_r9.list.array[0]->subframeAllocation. + choice.oneFrame.buf[0]); + + if (eNB_rrc_inst[enb_mod_idP].sizeof_MCCH_MESSAGE[sync_area] == 255) + mac_xface->macphy_exit("[RRC][init_MCCH] eNB_rrc_inst[enb_mod_idP].sizeof_MCCH_MESSAGE[sync_area] == 255"); + else + eNB_rrc_inst[enb_mod_idP].MCCH_MESS[sync_area].Active = 1; + } + } + //Set the eNB_rrc_inst[enb_mod_idP].MCCH_MESS.Active to 1 (allow to transfer MCCH message RRC->MAC in function mac_rrc_data_req) + + // ??Configure MCCH logical channel + // call mac_config_req with appropriate structure from ASN.1 description + + // LOG_I(RRC, "DUY: serviceID is %d\n",eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->tmgi_r9.serviceId_r9.buf[2]); + // LOG_I(RRC, "DUY: session ID is %d\n",eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->sessionId_r9->buf[0]); + rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, 0, 0, + (RadioResourceConfigCommonSIB_t *) NULL, + (struct PhysicalConfigDedicated *)NULL, + (MeasObjectToAddMod_t **) NULL, + (MAC_MainConfig_t *) NULL, + 0, + (struct LogicalChannelConfig *)NULL, + (MeasGapConfig_t *) NULL, + (TDD_Config_t *) NULL, + NULL, (uint8_t *) NULL, (uint16_t *) NULL, NULL, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL +# ifdef Rel10 + , + 0, + (MBSFN_AreaInfoList_r9_t *) NULL, + (PMCH_InfoList_r9_t *) & (eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9) +# endif +# ifdef CBA + , 0, 0 +# endif + ); + + //LOG_I(RRC,"DUY: lcid after rrc_mac_config_req is %02d\n",eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9); } /*------------------------------------------------------------------------------*/ -static void init_MBMS (module_id_t Mod_id, frame_t frameP) { - // init the configuration for MTCH +static void init_MBMS( + module_id_t enb_mod_idP, + frame_t frameP) { + // init the configuration for MTCH - if (eNB_rrc_inst[Mod_id].MBMS_flag > 0) { + if (eNB_rrc_inst[enb_mod_idP].MBMS_flag > 0) { - LOG_D(RRC,"[eNB %d] Frame %d : Radio Bearer config request for MBMS\n", Mod_id, frameP); //check the lcid - // Configuring PDCP and RLC for MBMS Radio Bearer + LOG_D(RRC, "[eNB %d] Frame %d : Radio Bearer config request for MBMS\n", enb_mod_idP, frameP); //check the lcid + // Configuring PDCP and RLC for MBMS Radio Bearer - rrc_pdcp_config_asn1_req (Mod_id, 0, frameP, 1, - NULL, // SRB_ToAddModList + rrc_pdcp_config_asn1_req(enb_mod_idP, 0, frameP, 1, NULL, // SRB_ToAddModList + NULL, // DRB_ToAddModList + (DRB_ToReleaseList_t *) NULL, 0, // security mode + NULL, // key rrc encryption + NULL, // key rrc integrity + NULL // key encryption +# ifdef Rel10 + , &(eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9) +# endif + ); + + rrc_rlc_config_asn1_req(enb_mod_idP, 0, frameP, ENB_FLAG_YES, NULL, // SRB_ToAddModList NULL, // DRB_ToAddModList - (DRB_ToReleaseList_t *) NULL, - 0, // security mode - NULL, // key rrc encryption - NULL, // key rrc integrity - NULL // key encryption -#ifdef Rel10 - , - &(eNB_rrc_inst[Mod_id].mcch_message->pmch_InfoList_r9) -#endif - ); - - rrc_rlc_config_asn1_req(Mod_id, 0,frameP, 1, - NULL,// SRB_ToAddModList - NULL,// DRB_ToAddModList - NULL,// DRB_ToReleaseList - &(eNB_rrc_inst[Mod_id].mcch_message->pmch_InfoList_r9)); - - //rrc_mac_config_req(); - } + NULL, // DRB_ToReleaseList + &(eNB_rrc_inst[enb_mod_idP].mcch_message->pmch_InfoList_r9)); + + //rrc_mac_config_req(); + } } #endif /*------------------------------------------------------------------------------*/ -static void rrc_lite_eNB_init_security(module_id_t Mod_id, uint8_t UE_index) -{ +static void rrc_lite_eNB_init_security( + module_id_t enb_mod_idP, + module_id_t ue_mod_idP) { #if defined(ENABLE_SECURITY) - char ascii_buffer[65]; - uint8_t i; + char ascii_buffer[65]; + uint8_t i; - memset(eNB_rrc_inst[Mod_id].kenb[UE_index], UE_index, 32); + memset(eNB_rrc_inst[enb_mod_idP].kenb[ue_mod_idP], ue_mod_idP, 32); for (i = 0; i < 32; i++) { - sprintf(&ascii_buffer[2 * i], "%02X", eNB_rrc_inst[Mod_id].kenb[UE_index][i]); + sprintf(&ascii_buffer[2 * i], "%02X", eNB_rrc_inst[enb_mod_idP].kenb[ue_mod_idP][i]); } ascii_buffer[2 * i] = '\0'; - LOG_T(RRC, "[OSA][eNB %d][UE %d] kenb = %s\n", Mod_id, UE_index, ascii_buffer); + LOG_T(RRC, "[OSA][eNB %d][UE %d] kenb = %s\n", enb_mod_idP, ue_mod_idP, ascii_buffer); #endif } /*------------------------------------------------------------------------------*/ -uint8_t rrc_eNB_get_next_transaction_identifier(module_id_t Mod_id) -{ - static uint8_t rrc_transaction_identifier[NUMBER_OF_eNB_MAX]; +uint8_t rrc_eNB_get_next_transaction_identifier( + module_id_t enb_mod_idP) { + static uint8_t rrc_transaction_identifier[NUMBER_OF_eNB_MAX]; - rrc_transaction_identifier[Mod_id] = (rrc_transaction_identifier[Mod_id] + 1) % RRC_TRANSACTION_IDENTIFIER_NUMBER; + rrc_transaction_identifier[enb_mod_idP] = (rrc_transaction_identifier[enb_mod_idP] + 1) % RRC_TRANSACTION_IDENTIFIER_NUMBER; - return rrc_transaction_identifier[Mod_id]; + return rrc_transaction_identifier[enb_mod_idP]; } /*------------------------------------------------------------------------------*/ /* Functions to handle UE index in eNB UE list */ -static uint8_t rrc_eNB_get_next_free_UE_index (module_id_t Mod_id, uint64_t UE_identity) -{ - uint8_t i, first_index = UE_INDEX_INVALID, reg = 0; +static module_id_t rrc_eNB_get_next_free_UE_index( + module_id_t enb_mod_idP, + uint64_t UE_identity) { - AssertFatal(Mod_id < NB_eNB_INST, "eNB index invalid (%d/%d)!", Mod_id, NB_eNB_INST); + boolean_t reg = FALSE; + module_id_t i, first_index = UE_MODULE_INVALID; - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if ((first_index == UE_INDEX_INVALID) && (eNB_rrc_inst[Mod_id].Info.UE_list[i] == 0)) { - first_index = i; // save first free position + AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB index invalid (%d/%d)!", enb_mod_idP, NB_eNB_INST); + + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if ((first_index == UE_MODULE_INVALID) && (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == 0)) { + first_index = i; // save first free position + } + + if (eNB_rrc_inst[enb_mod_idP].Info.UE_list[i] == UE_identity) { + // UE_identity already registered + reg = TRUE; + } } - if (eNB_rrc_inst[Mod_id].Info.UE_list[i] == UE_identity) { - // UE_identity already registered - reg = 1; + if (reg == 0) { + LOG_I(RRC, "[eNB %d] Adding UE %d with identity " PRIu64 "\n", enb_mod_idP, first_index, UE_identity); + return (first_index); + } else { + return (UE_MODULE_INVALID); } - } - - if (reg == 0) { - LOG_I(RRC, "[eNB %d] Adding UE %d with identity "PRIu64"\n", Mod_id, first_index, UE_identity); - return (first_index); - } - else { - return (UE_INDEX_INVALID); - } } -void rrc_eNB_free_UE_index (module_id_t enb_mod_idP, module_id_t ue_mod_idP) -{ - AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB inst invalid (%d/%d) for UE %d!", enb_mod_idP, NB_eNB_INST, ue_mod_idP); - AssertFatal(ue_mod_idP < NUMBER_OF_UE_MAX, "UE inst invalid (%d/%d) for eNB %d!", ue_mod_idP, NUMBER_OF_UE_MAX, enb_mod_idP); +void rrc_eNB_free_UE_index( + module_id_t enb_mod_idP, + module_id_t ue_mod_idP) { + AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB inst invalid (%d/%d) for UE %d!", enb_mod_idP, NB_eNB_INST, ue_mod_idP); + AssertFatal(ue_mod_idP < NUMBER_OF_UE_MAX, "UE inst invalid (%d/%d) for eNB %d!", ue_mod_idP, NUMBER_OF_UE_MAX, + enb_mod_idP); - LOG_I (RRC, "[eNB %d] Removing UE %d rv 0x%" PRIx64 "\n", enb_mod_idP, ue_mod_idP, eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]); - eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE; - eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0; + LOG_I(RRC, "[eNB %d] Removing UE %d rv 0x%" PRIx64 "\n", enb_mod_idP, ue_mod_idP, + eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]); + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE; + eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0; } /*------------------------------------------------------------------------------*/ -void rrc_eNB_process_RRCConnectionSetupComplete (module_id_t Mod_id, - frame_t frameP, - uint8_t UE_index, - RRCConnectionSetupComplete_r8_IEs_t *rrcConnectionSetupComplete) -{ - LOG_I (RRC, "[eNB %d][RAPROC] Frame %d : Logical Channel UL-DCCH, ""processing RRCConnectionSetupComplete from UE %d\n", - Mod_id, frameP, UE_index); +void rrc_eNB_process_RRCConnectionSetupComplete( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + RRCConnectionSetupComplete_r8_IEs_t * rrcConnectionSetupComplete) { + LOG_I(RRC, + "[eNB %d][RAPROC] Frame %d : Logical Channel UL-DCCH, " "processing RRCConnectionSetupComplete from UE %d\n", + enb_mod_idP, frameP, ue_mod_idP); #if defined(ENABLE_USE_MME) - if (EPC_MODE_ENABLED == 1) - { - // Forward message to S1AP layer - rrc_eNB_send_S1AP_NAS_FIRST_REQ(Mod_id, UE_index, rrcConnectionSetupComplete); - } - else + if (EPC_MODE_ENABLED == 1) { + // Forward message to S1AP layer + rrc_eNB_send_S1AP_NAS_FIRST_REQ(enb_mod_idP, ue_mod_idP, rrcConnectionSetupComplete); + } else #endif - { - // RRC loop back (no S1AP), send SecurityModeCommand to UE - rrc_eNB_generate_SecurityModeCommand (Mod_id, frameP, UE_index); - // rrc_eNB_generate_UECapabilityEnquiry(Mod_id,frameP,UE_index); - } + { + // RRC loop back (no S1AP), send SecurityModeCommand to UE + rrc_eNB_generate_SecurityModeCommand(enb_mod_idP, frameP, ue_mod_idP); + // rrc_eNB_generate_UECapabilityEnquiry(enb_mod_idP,frameP,ue_mod_idP); + } } /*------------------------------------------------------------------------------*/ -void rrc_eNB_generate_SecurityModeCommand (module_id_t Mod_id, frame_t frameP, uint16_t UE_index) -{ - uint8_t buffer[100]; - uint8_t size; +void rrc_eNB_generate_SecurityModeCommand( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP) { + uint8_t buffer[100]; + uint8_t size; - size = do_SecurityModeCommand(Mod_id, buffer, UE_index, rrc_eNB_get_next_transaction_identifier(Mod_id), - eNB_rrc_inst[Mod_id].ciphering_algorithm[UE_index], eNB_rrc_inst[Mod_id].integrity_algorithm[UE_index]); + size = do_SecurityModeCommand(enb_mod_idP, buffer, ue_mod_idP, rrc_eNB_get_next_transaction_identifier(enb_mod_idP), + eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[ue_mod_idP], + eNB_rrc_inst[enb_mod_idP].integrity_algorithm[ue_mod_idP]); - LOG_I (RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d, UE id %d)\n", - Mod_id, frameP, size, UE_index); + LOG_I(RRC, + "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d, UE id %d)\n", + enb_mod_idP, frameP, size, ue_mod_idP); - - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (securityModeCommand to UE %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", - frameP, Mod_id, size, UE_index, rrc_eNB_mui, Mod_id, DCCH); - //rrc_rlc_data_req(Mod_id,frameP, 1,(UE_index*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); - pdcp_rrc_data_req (Mod_id, UE_index, frameP, 1, DCCH, - rrc_eNB_mui++, 0, size, buffer, 1); + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (securityModeCommand to UE %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", + frameP, enb_mod_idP, size, ue_mod_idP, rrc_eNB_mui, enb_mod_idP, DCCH); + //rrc_rlc_data_req(enb_mod_idP,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); + pdcp_rrc_data_req(enb_mod_idP, ue_mod_idP, frameP, 1, DCCH, rrc_eNB_mui++, 0, size, buffer, 1); } /*------------------------------------------------------------------------------*/ -void rrc_eNB_generate_UECapabilityEnquiry (module_id_t Mod_id, frame_t frameP, uint16_t UE_index) -{ +void rrc_eNB_generate_UECapabilityEnquiry( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP) { - uint8_t buffer[100]; - uint8_t size; + uint8_t buffer[100]; + uint8_t size; - size = do_UECapabilityEnquiry (Mod_id, buffer, UE_index, rrc_eNB_get_next_transaction_identifier(Mod_id)); + size = do_UECapabilityEnquiry(enb_mod_idP, buffer, ue_mod_idP, rrc_eNB_get_next_transaction_identifier(enb_mod_idP)); - LOG_I (RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate UECapabilityEnquiry (bytes %d, UE id %d)\n", - Mod_id, frameP, size, UE_index); + LOG_I(RRC, + "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate UECapabilityEnquiry (bytes %d, UE id %d)\n", + enb_mod_idP, frameP, size, ue_mod_idP); - - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (UECapabilityEnquiry to UE %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", - frameP, Mod_id, size, UE_index, rrc_eNB_mui, Mod_id, DCCH); - //rrc_rlc_data_req(Mod_id,frameP, 1,(UE_index*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); - pdcp_rrc_data_req (Mod_id, UE_index, frameP, 1, DCCH, - rrc_eNB_mui++, 0, size, buffer, 1); + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (UECapabilityEnquiry to UE %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", + frameP, enb_mod_idP, size, ue_mod_idP, rrc_eNB_mui, enb_mod_idP, DCCH); + //rrc_rlc_data_req(enb_mod_idP,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); + pdcp_rrc_data_req(enb_mod_idP, ue_mod_idP, frameP, 1, DCCH, rrc_eNB_mui++, 0, size, buffer, 1); } /*------------------------------------------------------------------------------*/ -static void rrc_eNB_generate_defaultRRCConnectionReconfiguration (module_id_t Mod_id, frame_t frameP, - uint16_t UE_index, - uint8_t ho_state) -{ +static void rrc_eNB_generate_defaultRRCConnectionReconfiguration( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + uint8_t ho_state) { #if defined(ENABLE_ITTI) - eNB_RRC_UE_INFO *UE_info = &eNB_rrc_inst[Mod_id].Info.UE[UE_index]; + eNB_RRC_UE_INFO *UE_info = &eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP]; #endif - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i; + uint8_t buffer[RRC_BUF_SIZE]; + uint16_t size; + int i; - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - eNB_RRC_INST *rrc_inst = &eNB_rrc_inst[Mod_id]; + // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE + eNB_RRC_INST *rrc_inst = &eNB_rrc_inst[enb_mod_idP]; - struct PhysicalConfigDedicated **physicalConfigDedicated = &rrc_inst->physicalConfigDedicated[UE_index]; + struct PhysicalConfigDedicated **physicalConfigDedicated = &rrc_inst->physicalConfigDedicated[ue_mod_idP]; + struct SRB_ToAddMod *SRB2_config; + struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config; + struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config; + struct LogicalChannelConfig__ul_SpecificParameters + *SRB2_ul_SpecificParameters; + SRB_ToAddModList_t *SRB_configList = rrc_inst->SRB_configList[ue_mod_idP]; + SRB_ToAddModList_t *SRB_configList2; - struct SRB_ToAddMod *SRB2_config; - struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config; - struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters - *SRB2_ul_SpecificParameters; - SRB_ToAddModList_t *SRB_configList = rrc_inst->SRB_configList[UE_index]; - SRB_ToAddModList_t *SRB_configList2; + struct DRB_ToAddMod *DRB_config; + struct RLC_Config *DRB_rlc_config; + struct PDCP_Config *DRB_pdcp_config; + struct PDCP_Config__rlc_AM *PDCP_rlc_AM; + struct PDCP_Config__rlc_UM *PDCP_rlc_UM; + struct LogicalChannelConfig *DRB_lchan_config; + struct LogicalChannelConfig__ul_SpecificParameters + *DRB_ul_SpecificParameters; + DRB_ToAddModList_t **DRB_configList = &rrc_inst->DRB_configList[ue_mod_idP]; - struct DRB_ToAddMod *DRB_config; - struct RLC_Config *DRB_rlc_config; - struct PDCP_Config *DRB_pdcp_config; - struct PDCP_Config__rlc_AM *PDCP_rlc_AM; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM; - struct LogicalChannelConfig *DRB_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters - *DRB_ul_SpecificParameters; - DRB_ToAddModList_t **DRB_configList = &rrc_inst->DRB_configList[UE_index]; - - MAC_MainConfig_t *mac_MainConfig; - MeasObjectToAddModList_t *MeasObj_list; - MeasObjectToAddMod_t *MeasObj; - ReportConfigToAddModList_t *ReportConfig_list; - ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, - *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; - MeasIdToAddModList_t *MeasId_list; - MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; + MAC_MainConfig_t *mac_MainConfig; + MeasObjectToAddModList_t *MeasObj_list; + MeasObjectToAddMod_t *MeasObj; + ReportConfigToAddModList_t *ReportConfig_list; + ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, + *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; + MeasIdToAddModList_t *MeasId_list; + MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; #if Rel10 - long *sr_ProhibitTimer_r9; + long *sr_ProhibitTimer_r9; #endif - long *logicalchannelgroup, *logicalchannelgroup_drb; - long *maxHARQ_Tx, *periodicBSR_Timer; + long *logicalchannelgroup, *logicalchannelgroup_drb; + long *maxHARQ_Tx, *periodicBSR_Timer; - RSRP_Range_t *rsrp=NULL; - struct MeasConfig__speedStatePars *Sparams=NULL; - QuantityConfig_t *quantityConfig=NULL; - CellsToAddMod_t *CellToAdd; - CellsToAddModList_t *CellsToAddModList; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - DedicatedInfoNAS_t *dedicatedInfoNas; + RSRP_Range_t *rsrp = NULL; + struct MeasConfig__speedStatePars *Sparams = NULL; + QuantityConfig_t *quantityConfig = NULL; + CellsToAddMod_t *CellToAdd; + CellsToAddModList_t *CellsToAddModList; + struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; + DedicatedInfoNAS_t *dedicatedInfoNas; - C_RNTI_t *cba_RNTI = NULL; + C_RNTI_t *cba_RNTI = NULL; #ifdef CBA - //struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola; - uint8_t *cba_RNTI_buf; - cba_RNTI = CALLOC (1, sizeof (C_RNTI_t)); - cba_RNTI_buf = CALLOC (1, 2 * sizeof (uint8_t)); - cba_RNTI->buf = cba_RNTI_buf; - cba_RNTI->size = 2; - cba_RNTI->bits_unused = 0; - // associate UEs to the CBa groups as a function of their UE id - if (rrc_inst->num_active_cba_groups) - { - cba_RNTI->buf[0] = - rrc_inst->cba_rnti[UE_index % rrc_inst->num_active_cba_groups] & 0xff; - cba_RNTI->buf[1] = 0xff; - LOG_D (RRC, - "[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d\n", - Mod_id, frameP, - rrc_inst->cba_rnti[UE_index % rrc_inst->num_active_cba_groups], - UE_index % rrc_inst->num_active_cba_groups, UE_index); - } - else - { - cba_RNTI->buf[0] = 0x0; - cba_RNTI->buf[1] = 0x0; - LOG_D (RRC, "[eNB %d] Frame %d: no cba_RNTI is configured for UE %d\n", - Mod_id, frameP, UE_index); + //struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola; + uint8_t *cba_RNTI_buf; + cba_RNTI = CALLOC(1, sizeof(C_RNTI_t)); + cba_RNTI_buf = CALLOC(1, 2 * sizeof(uint8_t)); + cba_RNTI->buf = cba_RNTI_buf; + cba_RNTI->size = 2; + cba_RNTI->bits_unused = 0; + // associate UEs to the CBa groups as a function of their UE id + if (rrc_inst->num_active_cba_groups) { + cba_RNTI->buf[0] = rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups] & 0xff; + cba_RNTI->buf[1] = 0xff; + LOG_D(RRC, + "[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d\n", + enb_mod_idP, frameP, + rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups], + ue_mod_idP % rrc_inst->num_active_cba_groups, ue_mod_idP); + } else { + cba_RNTI->buf[0] = 0x0; + cba_RNTI->buf[1] = 0x0; + LOG_D(RRC, "[eNB %d] Frame %d: no cba_RNTI is configured for UE %d\n", enb_mod_idP, frameP, ue_mod_idP); } - #endif - // Configure SRB2 - /// SRB2 - SRB2_config = CALLOC (1, sizeof (*SRB2_config)); - SRB_configList2 = CALLOC (1, sizeof (*SRB_configList2)); - memset (SRB_configList2, 0, sizeof (*SRB_configList2)); + // Configure SRB2 + /// SRB2 + SRB2_config = CALLOC(1, sizeof(*SRB2_config)); + SRB_configList2 = CALLOC(1, sizeof(*SRB_configList2)); + memset(SRB_configList2, 0, sizeof(*SRB_configList2)); - SRB2_config->srb_Identity = 2; - SRB2_rlc_config = CALLOC (1, sizeof (*SRB2_rlc_config)); - SRB2_config->rlc_Config = SRB2_rlc_config; + SRB2_config->srb_Identity = 2; + SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config)); + SRB2_config->rlc_Config = SRB2_rlc_config; - SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms50; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; + SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; + SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; + SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms50; + SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; - SRB2_lchan_config = CALLOC (1, sizeof (*SRB2_lchan_config)); - SRB2_config->logicalChannelConfig = SRB2_lchan_config; + SRB2_lchan_config = CALLOC(1, sizeof(*SRB2_lchan_config)); + SRB2_config->logicalChannelConfig = SRB2_lchan_config; - SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; + SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - SRB2_ul_SpecificParameters = CALLOC (1, sizeof (*SRB2_ul_SpecificParameters)); + SRB2_ul_SpecificParameters = CALLOC(1, sizeof(*SRB2_ul_SpecificParameters)); - SRB2_ul_SpecificParameters->priority = 1; - SRB2_ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - SRB2_ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; + SRB2_ul_SpecificParameters->priority = 1; + SRB2_ul_SpecificParameters->prioritisedBitRate = + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; + SRB2_ul_SpecificParameters->bucketSizeDuration = + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - // LCG for CCCH and DCCH is 0 as defined in 36331 - logicalchannelgroup = CALLOC (1, sizeof (long)); - *logicalchannelgroup = 0; + // LCG for CCCH and DCCH is 0 as defined in 36331 + logicalchannelgroup = CALLOC(1, sizeof(long)); + *logicalchannelgroup = 0; - SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; + SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; - ASN_SEQUENCE_ADD (&SRB_configList->list, SRB2_config); - ASN_SEQUENCE_ADD (&SRB_configList2->list, SRB2_config); + SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; + ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); + ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB2_config); - // Configure DRB - *DRB_configList = CALLOC (1, sizeof (*DRB_configList)); - /// DRB - DRB_config = CALLOC (1, sizeof (*DRB_config)); - - DRB_config->eps_BearerIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->eps_BearerIdentity) = 5L; // LW set to first value, allowed value 5..15 - // DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 - // NN: this is the 1st DRB for this ue, so set it to 1 - // NN: this is the 1st DRB for this ue, so set it to 1 - DRB_config->drb_Identity = (DRB_Identity_t) 1; // (UE_index+1); //allowed values 1..32 - DRB_config->logicalChannelIdentity = CALLOC (1, sizeof (long)); - *(DRB_config->logicalChannelIdentity) = (long) 3; - DRB_rlc_config = CALLOC (1, sizeof (*DRB_rlc_config)); - DRB_config->rlc_Config = DRB_rlc_config; + // Configure DRB + *DRB_configList = CALLOC(1, sizeof(*DRB_configList)); + /// DRB + DRB_config = CALLOC(1, sizeof(*DRB_config)); + DRB_config->eps_BearerIdentity = CALLOC(1, sizeof(long)); + *(DRB_config->eps_BearerIdentity) = 5L; // LW set to first value, allowed value 5..15 + // DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 + // NN: this is the 1st DRB for this ue, so set it to 1 + // NN: this is the 1st DRB for this ue, so set it to 1 + DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32 + DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); + *(DRB_config->logicalChannelIdentity) = (long)3; + DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); + DRB_config->rlc_Config = DRB_rlc_config; #ifdef EXMIMO_IOT - DRB_rlc_config->present = RLC_Config_PR_am; - DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; - DRB_rlc_config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p16; - DRB_rlc_config->choice.am.ul_AM_RLC.pollByte = PollByte_kBinfinity; - DRB_rlc_config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t8; - DRB_rlc_config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - DRB_rlc_config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms25; + DRB_rlc_config->present = RLC_Config_PR_am; + DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; + DRB_rlc_config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p16; + DRB_rlc_config->choice.am.ul_AM_RLC.pollByte = PollByte_kBinfinity; + DRB_rlc_config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t8; + DRB_rlc_config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; + DRB_rlc_config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms25; #else - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms5; + DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; + DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; + DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; + DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms5; #endif - DRB_pdcp_config = CALLOC (1, sizeof (*DRB_pdcp_config)); - DRB_config->pdcp_Config = DRB_pdcp_config; + DRB_pdcp_config = CALLOC(1, sizeof(*DRB_pdcp_config)); + DRB_config->pdcp_Config = DRB_pdcp_config; #ifdef EXMIMO_IOT - DRB_pdcp_config->discardTimer = CALLOC (1, sizeof (long)); - *DRB_pdcp_config->discardTimer = PDCP_Config__discardTimer_infinity; + DRB_pdcp_config->discardTimer = CALLOC(1, sizeof(long)); + *DRB_pdcp_config->discardTimer = PDCP_Config__discardTimer_infinity; #else - DRB_pdcp_config->discardTimer = NULL; + DRB_pdcp_config->discardTimer = NULL; #endif - DRB_pdcp_config->rlc_AM = NULL; - DRB_pdcp_config->rlc_UM = NULL; + DRB_pdcp_config->rlc_AM = NULL; + DRB_pdcp_config->rlc_UM = NULL; #ifdef EXMIMO_IOT - PDCP_rlc_AM = CALLOC (1, sizeof (*PDCP_rlc_AM)); - DRB_pdcp_config->rlc_AM = PDCP_rlc_AM; - PDCP_rlc_AM->statusReportRequired = FALSE; + PDCP_rlc_AM = CALLOC(1, sizeof(*PDCP_rlc_AM)); + DRB_pdcp_config->rlc_AM = PDCP_rlc_AM; + PDCP_rlc_AM->statusReportRequired = FALSE; #else - PDCP_rlc_UM = CALLOC (1, sizeof (*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; + PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); + DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; + PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; #endif - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; + DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - DRB_lchan_config = CALLOC (1, sizeof (*DRB_lchan_config)); - DRB_config->logicalChannelConfig = DRB_lchan_config; - DRB_ul_SpecificParameters = CALLOC (1, sizeof (*DRB_ul_SpecificParameters)); - DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; + DRB_lchan_config = CALLOC(1, sizeof(*DRB_lchan_config)); + DRB_config->logicalChannelConfig = DRB_lchan_config; + DRB_ul_SpecificParameters = CALLOC(1, sizeof(*DRB_ul_SpecificParameters)); + DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; + DRB_ul_SpecificParameters->priority = 2; // lower priority than srb1, srb2 + DRB_ul_SpecificParameters->prioritisedBitRate = + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; + DRB_ul_SpecificParameters->bucketSizeDuration = + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - DRB_ul_SpecificParameters->priority = 2; // lower priority than srb1, srb2 - DRB_ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - DRB_ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; + // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) + logicalchannelgroup_drb = CALLOC(1, sizeof(long)); + *logicalchannelgroup_drb = 1; + DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; - // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) - logicalchannelgroup_drb = CALLOC (1, sizeof (long)); - *logicalchannelgroup_drb = 1; - DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; + ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config); - ASN_SEQUENCE_ADD (&(*DRB_configList)->list, DRB_config); + mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig)); + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP] = mac_MainConfig; - mac_MainConfig = CALLOC (1, sizeof (*mac_MainConfig)); - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index] = mac_MainConfig; + mac_MainConfig->ul_SCH_Config = CALLOC(1, sizeof(*mac_MainConfig->ul_SCH_Config)); - mac_MainConfig->ul_SCH_Config = CALLOC (1, sizeof (*mac_MainConfig->ul_SCH_Config)); + maxHARQ_Tx = CALLOC(1, sizeof(long)); + *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; + mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; + periodicBSR_Timer = CALLOC(1, sizeof(long)); + *periodicBSR_Timer = MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf64; + mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; + mac_MainConfig->ul_SCH_Config->retxBSR_Timer = MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf320; + mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE - maxHARQ_Tx = CALLOC (1, sizeof (long)); - *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; - periodicBSR_Timer = CALLOC (1, sizeof (long)); - *periodicBSR_Timer = MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf64; - mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; - mac_MainConfig->ul_SCH_Config->retxBSR_Timer = MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf320; - mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE + mac_MainConfig->drx_Config = NULL; - mac_MainConfig->drx_Config = NULL; + mac_MainConfig->phr_Config = CALLOC(1, sizeof(*mac_MainConfig->phr_Config)); - mac_MainConfig->phr_Config = CALLOC (1, sizeof (*mac_MainConfig->phr_Config)); + mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; + mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes - mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; - mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes + mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB + mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB #ifdef Rel10 - sr_ProhibitTimer_r9 = CALLOC (1, sizeof (long)); - *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; - //sps_RA_ConfigList_rlola = NULL; + sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); + *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR + mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; + //sps_RA_ConfigList_rlola = NULL; #endif + // Measurement ID list + MeasId_list = CALLOC(1, sizeof(*MeasId_list)); + memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); - // Measurement ID list - MeasId_list = CALLOC (1, sizeof (*MeasId_list)); - memset ((void *) MeasId_list, 0, sizeof (*MeasId_list)); + MeasId0 = CALLOC(1, sizeof(*MeasId0)); + MeasId0->measId = 1; + MeasId0->measObjectId = 1; + MeasId0->reportConfigId = 1; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId0); - MeasId0 = CALLOC (1, sizeof (*MeasId0)); - MeasId0->measId = 1; - MeasId0->measObjectId = 1; - MeasId0->reportConfigId = 1; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId0); + MeasId1 = CALLOC(1, sizeof(*MeasId1)); + MeasId1->measId = 2; + MeasId1->measObjectId = 1; + MeasId1->reportConfigId = 2; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId1); - MeasId1 = CALLOC (1, sizeof (*MeasId1)); - MeasId1->measId = 2; - MeasId1->measObjectId = 1; - MeasId1->reportConfigId = 2; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId1); + MeasId2 = CALLOC(1, sizeof(*MeasId2)); + MeasId2->measId = 3; + MeasId2->measObjectId = 1; + MeasId2->reportConfigId = 3; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId2); - MeasId2 = CALLOC (1, sizeof (*MeasId2)); - MeasId2->measId = 3; - MeasId2->measObjectId = 1; - MeasId2->reportConfigId = 3; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId2); + MeasId3 = CALLOC(1, sizeof(*MeasId3)); + MeasId3->measId = 4; + MeasId3->measObjectId = 1; + MeasId3->reportConfigId = 4; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId3); - MeasId3 = CALLOC (1, sizeof (*MeasId3)); - MeasId3->measId = 4; - MeasId3->measObjectId = 1; - MeasId3->reportConfigId = 4; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId3); + MeasId4 = CALLOC(1, sizeof(*MeasId4)); + MeasId4->measId = 5; + MeasId4->measObjectId = 1; + MeasId4->reportConfigId = 5; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId4); - MeasId4 = CALLOC (1, sizeof (*MeasId4)); - MeasId4->measId = 5; - MeasId4->measObjectId = 1; - MeasId4->reportConfigId = 5; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId4); + MeasId5 = CALLOC(1, sizeof(*MeasId5)); + MeasId5->measId = 6; + MeasId5->measObjectId = 1; + MeasId5->reportConfigId = 6; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId5); - MeasId5 = CALLOC (1, sizeof (*MeasId5)); - MeasId5->measId = 6; - MeasId5->measObjectId = 1; - MeasId5->reportConfigId = 6; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId5); + // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; + // Add one EUTRA Measurement Object + MeasObj_list = CALLOC(1, sizeof(*MeasObj_list)); + memset((void *)MeasObj_list, 0, sizeof(*MeasObj_list)); - // Add one EUTRA Measurement Object - MeasObj_list = CALLOC (1, sizeof (*MeasObj_list)); - memset ((void *) MeasObj_list, 0, sizeof (*MeasObj_list)); + // Configure MeasObject - // Configure MeasObject + MeasObj = CALLOC(1, sizeof(*MeasObj)); + memset((void *)MeasObj, 0, sizeof(*MeasObj)); - MeasObj = CALLOC (1, sizeof (*MeasObj)); - memset ((void *) MeasObj, 0, sizeof (*MeasObj)); + MeasObj->measObjectId = 1; + MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; + MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; + MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; + MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC(1, sizeof(uint8_t)); + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; + MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB - MeasObj->measObjectId = 1; - MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; - MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; - MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; - MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC (1, sizeof (uint8_t)); - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; - MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB + MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = + (CellsToAddModList_t *) CALLOC(1, sizeof(*CellsToAddModList)); - MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = (CellsToAddModList_t *) CALLOC (1, sizeof (*CellsToAddModList)); + CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; - CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; + // Add adjacent cell lists (6 per eNB) + for (i = 0; i < 6; i++) { + CellToAdd = (CellsToAddMod_t *) CALLOC(1, sizeof(*CellToAdd)); + CellToAdd->cellIndex = i + 1; + CellToAdd->physCellId = get_adjacent_cell_id(enb_mod_idP, i); + CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; - // Add adjacent cell lists (6 per eNB) - for (i = 0; i < 6; i++) { - CellToAdd = (CellsToAddMod_t *) CALLOC (1, sizeof (*CellToAdd)); - CellToAdd->cellIndex = i + 1; - CellToAdd->physCellId = get_adjacent_cell_id (Mod_id, i); - CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; + ASN_SEQUENCE_ADD(&CellsToAddModList->list, CellToAdd); + } - ASN_SEQUENCE_ADD (&CellsToAddModList->list, CellToAdd); - } + ASN_SEQUENCE_ADD(&MeasObj_list->list, MeasObj); + // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; - ASN_SEQUENCE_ADD (&MeasObj_list->list, MeasObj); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; + // Report Configurations for periodical, A1-A5 events + ReportConfig_list = CALLOC(1, sizeof(*ReportConfig_list)); - // Report Configurations for periodical, A1-A5 events - ReportConfig_list = CALLOC (1, sizeof (*ReportConfig_list)); + ReportConfig_per = CALLOC(1, sizeof(*ReportConfig_per)); - ReportConfig_per = CALLOC (1, sizeof (*ReportConfig_per)); + ReportConfig_A1 = CALLOC(1, sizeof(*ReportConfig_A1)); - ReportConfig_A1 = CALLOC (1, sizeof (*ReportConfig_A1)); + ReportConfig_A2 = CALLOC(1, sizeof(*ReportConfig_A2)); - ReportConfig_A2 = CALLOC (1, sizeof (*ReportConfig_A2)); + ReportConfig_A3 = CALLOC(1, sizeof(*ReportConfig_A3)); - ReportConfig_A3 = CALLOC (1, sizeof (*ReportConfig_A3)); + ReportConfig_A4 = CALLOC(1, sizeof(*ReportConfig_A4)); - ReportConfig_A4 = CALLOC (1, sizeof (*ReportConfig_A4)); + ReportConfig_A5 = CALLOC(1, sizeof(*ReportConfig_A5)); - ReportConfig_A5 = CALLOC (1, sizeof (*ReportConfig_A5)); + ReportConfig_per->reportConfigId = 1; + ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_periodical; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = + ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - ReportConfig_per->reportConfigId = 1; - ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_periodical; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_per); - ASN_SEQUENCE_ADD (&ReportConfig_list->list, ReportConfig_per); - - ReportConfig_A1->reportConfigId = 2; - ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1.a1_Threshold.present = - ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1.a1_Threshold.choice.threshold_RSRP = 10; + ReportConfig_A1->reportConfigId = 2; + ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. + a1_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. + a1_Threshold.choice.threshold_RSRP = 10; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - ASN_SEQUENCE_ADD (&ReportConfig_list->list, ReportConfig_A1); + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A1); - if (ho_state == 1 /*HO_MEASURMENT*/ ){ - LOG_I(RRC,"[eNB %d] frame %d: requesting A2, A3, A4, A5, and A6 event reporting\n", Mod_id, frameP); - ReportConfig_A2->reportConfigId = 3; - ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present= ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2.a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2.a2_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A2); + if (ho_state == 1 /*HO_MEASURMENT */ ) { + LOG_I(RRC, "[eNB %d] frame %d: requesting A2, A3, A4, A5, and A6 event reporting\n", enb_mod_idP, frameP); + ReportConfig_A2->reportConfigId = 3; + ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA2.a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA2.a2_Threshold.choice.threshold_RSRP = 10; - ReportConfig_A3->reportConfigId = 4; - ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = + ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = 1;//10; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.reportOnLeave = 1; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.hysteresis = 0.5; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger = TimeToTrigger_ms40; - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A3); - - ReportConfig_A4->reportConfigId = 5; - ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4.a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4.a4_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A4); - - ReportConfig_A5->reportConfigId = 6; - ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold1.choice.threshold_RSRP = 10; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold2.choice.threshold_RSRP = 10; - - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A5); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A2); - rsrp=CALLOC(1,sizeof(RSRP_Range_t)); - *rsrp=20; - - Sparams = CALLOC(1,sizeof(*Sparams)); - Sparams->present=MeasConfig__speedStatePars_PR_setup; - Sparams->choice.setup.timeToTrigger_SF.sf_High=SpeedStateScaleFactors__sf_Medium_oDot75; - Sparams->choice.setup.timeToTrigger_SF.sf_Medium=SpeedStateScaleFactors__sf_High_oDot5; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh=10; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium=5; - Sparams->choice.setup.mobilityStateParameters.t_Evaluation=MobilityStateParameters__t_Evaluation_s60; - Sparams->choice.setup.mobilityStateParameters.t_HystNormal=MobilityStateParameters__t_HystNormal_s120; - - quantityConfig = CALLOC(1,sizeof(*quantityConfig)); - memset((void *)quantityConfig,0,sizeof(*quantityConfig)); - quantityConfig->quantityConfigEUTRA = CALLOC(1,sizeof(struct QuantityConfigEUTRA)); - memset((void *)quantityConfig->quantityConfigEUTRA,0,sizeof(*quantityConfig->quantityConfigEUTRA)); - quantityConfig->quantityConfigCDMA2000 = NULL; - quantityConfig->quantityConfigGERAN = NULL; - quantityConfig->quantityConfigUTRA = NULL; - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = CALLOC(1,sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP))); - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = CALLOC(1,sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ))); - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; - - LOG_I(RRC,"[eNB %d] Frame %d: potential handover preparation: store the information in an intermediate structure in case of failure\n",Mod_id, frameP); - // store the information in an intermediate structure for Hanodver management - //rrc_inst->handover_info.as_config.sourceRadioResourceConfig.srb_ToAddModList = CALLOC(1,sizeof()); - rrc_inst->handover_info[UE_index] = CALLOC(1,sizeof(*(rrc_inst->handover_info[UE_index]))); - //memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.srb_ToAddModList,(void *)SRB_list,sizeof(SRB_ToAddModList_t)); - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.srb_ToAddModList = SRB_configList2; - //memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.drb_ToAddModList,(void *)DRB_list,sizeof(DRB_ToAddModList_t)); - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.drb_ToAddModList = *DRB_configList; - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.mac_MainConfig = CALLOC(1, sizeof(*rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.mac_MainConfig)); - memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.mac_MainConfig, - (void *)mac_MainConfig, - sizeof(MAC_MainConfig_t)); - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.physicalConfigDedicated = CALLOC(1,sizeof(PhysicalConfigDedicated_t)); - memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.physicalConfigDedicated, - (void *)rrc_inst->physicalConfigDedicated[UE_index], - sizeof(PhysicalConfigDedicated_t)); - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.sps_Config = NULL; - //memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.sps_Config,(void *)rrc_inst->sps_Config[UE_index],sizeof(SPS_Config_t)); + ReportConfig_A3->reportConfigId = 4; + ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; - } - + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = 1; //10; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA3.reportOnLeave = 1; + + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = + ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.hysteresis = 0.5; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger = + TimeToTrigger_ms40; + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A3); + + ReportConfig_A4->reportConfigId = 5; + ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA4.a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA4.a4_Threshold.choice.threshold_RSRP = 10; + + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = + ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A4); + + ReportConfig_A5->reportConfigId = 6; + ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold1.choice.threshold_RSRP = 10; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold2.choice.threshold_RSRP = 10; + + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = + ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5); + // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; + + rsrp = CALLOC(1, sizeof(RSRP_Range_t)); + *rsrp = 20; + + Sparams = CALLOC(1, sizeof(*Sparams)); + Sparams->present = MeasConfig__speedStatePars_PR_setup; + Sparams->choice.setup.timeToTrigger_SF.sf_High = SpeedStateScaleFactors__sf_Medium_oDot75; + Sparams->choice.setup.timeToTrigger_SF.sf_Medium = SpeedStateScaleFactors__sf_High_oDot5; + Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh = 10; + Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium = 5; + Sparams->choice.setup.mobilityStateParameters.t_Evaluation = MobilityStateParameters__t_Evaluation_s60; + Sparams->choice.setup.mobilityStateParameters.t_HystNormal = MobilityStateParameters__t_HystNormal_s120; + + quantityConfig = CALLOC(1, sizeof(*quantityConfig)); + memset((void *)quantityConfig, 0, sizeof(*quantityConfig)); + quantityConfig->quantityConfigEUTRA = CALLOC(1, sizeof(struct QuantityConfigEUTRA)); + memset((void *)quantityConfig->quantityConfigEUTRA, 0, sizeof(*quantityConfig->quantityConfigEUTRA)); + quantityConfig->quantityConfigCDMA2000 = NULL; + quantityConfig->quantityConfigGERAN = NULL; + quantityConfig->quantityConfigUTRA = NULL; + quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = + CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP))); + quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = + CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ))); + *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; + *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; + + LOG_I(RRC, + "[eNB %d] Frame %d: potential handover preparation: store the information in an intermediate structure in case of failure\n", + enb_mod_idP, frameP); + // store the information in an intermediate structure for Hanodver management + //rrc_inst->handover_info.as_config.sourceRadioResourceConfig.srb_ToAddModList = CALLOC(1,sizeof()); + rrc_inst->handover_info[ue_mod_idP] = CALLOC(1, sizeof(*(rrc_inst->handover_info[ue_mod_idP]))); + //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList,(void *)SRB_list,sizeof(SRB_ToAddModList_t)); + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList = SRB_configList2; + //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList,(void *)DRB_list,sizeof(DRB_ToAddModList_t)); + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList = *DRB_configList; + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.mac_MainConfig = + CALLOC(1, sizeof(*rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.mac_MainConfig)); + memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.mac_MainConfig, + (void *)mac_MainConfig, sizeof(MAC_MainConfig_t)); + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.physicalConfigDedicated = + CALLOC(1, sizeof(PhysicalConfigDedicated_t)); + memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.physicalConfigDedicated, + (void *)rrc_inst->physicalConfigDedicated[ue_mod_idP], sizeof(PhysicalConfigDedicated_t)); + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.sps_Config = NULL; + //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.sps_Config,(void *)rrc_inst->sps_Config[ue_mod_idP],sizeof(SPS_Config_t)); + + } #if defined(ENABLE_ITTI) - /* Initialize NAS list */ - dedicatedInfoNASList = CALLOC (1, sizeof (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - /* Add all NAS PDUs to the list */ - for (i = 0; i < UE_info->nb_of_e_rabs; i++) - { - if (UE_info->e_rab[i].param.nas_pdu.buffer != NULL) - { - dedicatedInfoNas = CALLOC (1, sizeof(DedicatedInfoNAS_t)); + /* Initialize NAS list */ + dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); + /* Add all NAS PDUs to the list */ + for (i = 0; i < UE_info->nb_of_e_rabs; i++) { + if (UE_info->e_rab[i].param.nas_pdu.buffer != NULL) { + dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - OCTET_STRING_fromBuf (dedicatedInfoNas, (char *) UE_info->e_rab[i].param.nas_pdu.buffer, UE_info->e_rab[i].param.nas_pdu.length); - ASN_SEQUENCE_ADD (&dedicatedInfoNASList->list, dedicatedInfoNas); + OCTET_STRING_fromBuf(dedicatedInfoNas, (char *)UE_info->e_rab[i].param.nas_pdu.buffer, + UE_info->e_rab[i].param.nas_pdu.length); + ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); + } + + /* TODO parameters yet to process ... */ + { + UE_info->e_rab[i].param.qos; + UE_info->e_rab[i].param.sgw_addr; + UE_info->e_rab[i].param.gtp_teid; + } + + /* TODO should test if e RAB are Ok before! */ + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].e_rab[i].status = E_RAB_STATUS_DONE; } - - /* TODO parameters yet to process ... */ - { - UE_info->e_rab[i].param.qos; - UE_info->e_rab[i].param.sgw_addr; - UE_info->e_rab[i].param.gtp_teid; + /* If list is empty free the list and reset the address */ + if (dedicatedInfoNASList->list.count == 0) { + free(dedicatedInfoNASList); + dedicatedInfoNASList = NULL; } - - /* TODO should test if e RAB are Ok before! */ - eNB_rrc_inst[Mod_id].Info.UE[UE_index].e_rab[i].status = E_RAB_STATUS_DONE; - } - /* If list is empty free the list and reset the address */ - if(dedicatedInfoNASList->list.count == 0) - { - free (dedicatedInfoNASList); - dedicatedInfoNASList = NULL; - } #endif - memset (buffer, 0, RRC_BUF_SIZE); + memset(buffer, 0, RRC_BUF_SIZE); - size = do_RRCConnectionReconfiguration (Mod_id, buffer, UE_index, rrc_eNB_get_next_transaction_identifier(Mod_id), //Transaction_id, - SRB_configList2, *DRB_configList, NULL, // DRB2_list, - NULL, // *sps_Config, - physicalConfigDedicated[UE_index], MeasObj_list, ReportConfig_list, - quantityConfig, + size = do_RRCConnectionReconfiguration(enb_mod_idP, buffer, ue_mod_idP, rrc_eNB_get_next_transaction_identifier(enb_mod_idP), //Transaction_id, + SRB_configList2, *DRB_configList, NULL, // DRB2_list, + NULL, // *sps_Config, + physicalConfigDedicated[ue_mod_idP], MeasObj_list, ReportConfig_list, + quantityConfig, #ifdef EXMIMO_IOT - NULL, + NULL, #else - MeasId_list, + MeasId_list, #endif - mac_MainConfig, NULL, NULL, Sparams, rsrp, - cba_RNTI, dedicatedInfoNASList); + mac_MainConfig, NULL, NULL, Sparams, rsrp, cba_RNTI, dedicatedInfoNASList); #if defined(ENABLE_ITTI) - /* Free all NAS PDUs */ - for (i = 0; i < UE_info->nb_of_e_rabs; i++) - { - if (UE_info->e_rab[i].param.nas_pdu.buffer != NULL) - { - /* Free the NAS PDU buffer and invalidate it */ - free (UE_info->e_rab[i].param.nas_pdu.buffer); - UE_info->e_rab[i].param.nas_pdu.buffer = NULL; + /* Free all NAS PDUs */ + for (i = 0; i < UE_info->nb_of_e_rabs; i++) { + if (UE_info->e_rab[i].param.nas_pdu.buffer != NULL) { + /* Free the NAS PDU buffer and invalidate it */ + free(UE_info->e_rab[i].param.nas_pdu.buffer); + UE_info->e_rab[i].param.nas_pdu.buffer = NULL; + } } - } #endif - LOG_I (RRC,"[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %d)\n", - Mod_id, frameP, size, UE_index); + LOG_I(RRC, + "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %d)\n", + enb_mod_idP, frameP, size, ue_mod_idP); - LOG_D (RRC,"[MSC_MSG][FRAME %05d][RRC_eNB][MOD %u/%u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %d MUI %d) --->][PDCP][MOD %u/%u][RB %u]\n", - frameP, Mod_id, UE_index, size, UE_index, rrc_eNB_mui, Mod_id, UE_index, DCCH); - //rrc_rlc_data_req(Mod_id,frameP, 1,(UE_index*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); - pdcp_rrc_data_req (Mod_id, UE_index, frameP, 1, DCCH, - rrc_eNB_mui++, 0, size, buffer, 1); + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %u/%u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %d MUI %d) --->][PDCP][MOD %u/%u][RB %u]\n", + frameP, enb_mod_idP, ue_mod_idP, size, ue_mod_idP, rrc_eNB_mui, enb_mod_idP, ue_mod_idP, DCCH); + //rrc_rlc_data_req(enb_mod_idP,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); + pdcp_rrc_data_req(enb_mod_idP, ue_mod_idP, frameP, 1, DCCH, rrc_eNB_mui++, 0, size, buffer, 1); } /*------------------------------------------------------------------------------*/ -void rrc_eNB_process_MeasurementReport (module_id_t Mod_id, frame_t frameP, uint16_t UE_index, - MeasResults_t * measResults2) -{ +void rrc_eNB_process_MeasurementReport( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + MeasResults_t * measResults2) { - LOG_I (RRC,"[eNB %d] Frame %d: Process Measurement Report From UE %d (Measurement Id %d)\n", - Mod_id, frameP, UE_index, (int) measResults2->measId); - if (measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count > 0) { - LOG_I (RRC, "Physical Cell Id %d\n", - (int) measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId); - LOG_I (RRC, "RSRP of Target %d\n", - (int) *(measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->measResult.rsrpResult)); - LOG_I (RRC, "RSRQ of Target %d\n", - (int) *(measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->measResult.rsrqResult)); - } + LOG_I(RRC, "[eNB %d] Frame %d: Process Measurement Report From UE %d (Measurement Id %d)\n", + enb_mod_idP, frameP, ue_mod_idP, (int)measResults2->measId); + if (measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count > 0) { + LOG_I(RRC, "Physical Cell Id %d\n", + (int)measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId); + LOG_I(RRC, "RSRP of Target %d\n", + (int)*(measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]-> + measResult.rsrpResult)); + LOG_I(RRC, "RSRQ of Target %d\n", + (int)*(measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]-> + measResult.rsrqResult)); + } #ifdef Rel10 - LOG_I (RRC, "RSRP of Source %d\n", - measResults2->measResultPCell.rsrpResult); - LOG_I (RRC, "RSRQ of Source %d\n", - measResults2->measResultPCell.rsrqResult); + LOG_I(RRC, "RSRP of Source %d\n", measResults2->measResultPCell.rsrpResult); + LOG_I(RRC, "RSRQ of Source %d\n", measResults2->measResultPCell.rsrqResult); #else - LOG_I (RRC, "RSRP of Source %d\n", - measResults2->measResultServCell.rsrpResult); - LOG_I (RRC, "RSRQ of Source %d\n", - measResults2->measResultServCell.rsrqResult); + LOG_I(RRC, "RSRP of Source %d\n", measResults2->measResultServCell.rsrpResult); + LOG_I(RRC, "RSRQ of Source %d\n", measResults2->measResultServCell.rsrqResult); #endif - if(eNB_rrc_inst[Mod_id].handover_info[UE_index]->ho_prepare != 0xF0){ - rrc_eNB_generate_HandoverPreparationInformation(Mod_id, - frameP, - UE_index, - measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId); - }else{ - LOG_D(RRC,"[eNB %d] Frame %d: Ignoring MeasReport from UE %d as Handover is in progress... \n",Mod_id,frameP, UE_index); - } - //Look for IP address of the target eNB - //Send Handover Request -> target eNB - //Wait for Handover Acknowledgement <- target eNB - //Send Handover Command - - //x2delay(); - // handover_request_x2(UE_index,Mod_id,measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId); - - // uint8_t buffer[100]; - // int size=rrc_eNB_generate_Handover_Command_TeNB(0,0,buffer); - // - // send_check_message((char*)buffer,size); - //send_handover_command(); - -} - -/*------------------------------------------------------------------------------*/ -void rrc_eNB_generate_HandoverPreparationInformation (module_id_t Mod_id, frame_t frameP, uint8_t UE_index, PhysCellId_t targetPhyId) { - uint8_t UE_id_target; - uint8_t mod_id_target = get_adjacent_cell_mod_id(targetPhyId); - HANDOVER_INFO *handoverInfo = CALLOC(1,sizeof(*handoverInfo)); - /* - uint8_t buffer[100]; - uint8_t size; - struct PhysicalConfigDedicated **physicalConfigDedicated = &eNB_rrc_inst[Mod_id].physicalConfigDedicated[UE_index]; - RadioResourceConfigDedicated_t *radioResourceConfigDedicated = CALLOC(1,sizeof(RadioResourceConfigDedicated_t)); - */ - - handoverInfo->as_config.antennaInfoCommon.antennaPortsCount = 0; //Not used 0- but check value - handoverInfo->as_config.sourceDl_CarrierFreq = 36090; //Verify! - memcpy((void*) &handoverInfo->as_config.sourceMasterInformationBlock, - (void*) &eNB_rrc_inst[Mod_id].mib, - sizeof(MasterInformationBlock_t)); - memcpy((void*) &handoverInfo->as_config.sourceMeasConfig, - (void*) &eNB_rrc_inst[Mod_id].measConfig[UE_index], - sizeof(MeasConfig_t)); - //to be configured - memset((void *)&eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_config.sourceSecurityAlgorithmConfig, - 0, - sizeof(SecurityAlgorithmConfig_t)); - - memcpy((void *)&eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_config.sourceSystemInformationBlockType1, - (void *)&eNB_rrc_inst[Mod_id].SIB1, - sizeof(SystemInformationBlockType1_t)); - memcpy((void *)&eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_config.sourceSystemInformationBlockType2, - (void *)&eNB_rrc_inst[Mod_id].SIB23, - sizeof(SystemInformationBlockType2_t)); - - eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context.reestablishmentInfo = CALLOC(1,sizeof(ReestablishmentInfo_t)); - eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context.reestablishmentInfo->sourcePhysCellId = eNB_rrc_inst[Mod_id].physCellId; - eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context.reestablishmentInfo->targetCellShortMAC_I.buf = NULL; // Check values later - eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context.reestablishmentInfo->targetCellShortMAC_I.size = 0; - eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context.reestablishmentInfo->targetCellShortMAC_I.bits_unused = 0; - eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context.reestablishmentInfo->additionalReestabInfoList = NULL; - - eNB_rrc_inst[Mod_id].handover_info[UE_index]->ho_prepare = 0xFF;//0xF0; - eNB_rrc_inst[Mod_id].handover_info[UE_index]->ho_complete = 0; - - if (mod_id_target != 0xFF) { - //UE_id_target = rrc_find_free_ue_index(modid_target); - UE_id_target = rrc_eNB_get_next_free_UE_index(mod_id_target, eNB_rrc_inst[Mod_id].Info.UE_list[UE_index]); //this should return a new index - - if (UE_id_target!=0xFF) { - LOG_N(RRC,"[eNB %d] Frame %d : Emulate sending HandoverPreparationInformation msg from eNB source %d to eNB target %d: source UE_id %d target UE_id %d source_modId: %d target_modId: %d\n",Mod_id,frameP,eNB_rrc_inst[Mod_id].physCellId,targetPhyId,UE_index,UE_id_target,Mod_id,mod_id_target); - eNB_rrc_inst[mod_id_target].handover_info[UE_id_target] = CALLOC(1,sizeof(*(eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]))); - memcpy((void *)&eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->as_context, - (void *)&eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_context, - sizeof(AS_Context_t)); - memcpy((void *)&eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->as_config, - (void *)&eNB_rrc_inst[Mod_id].handover_info[UE_index]->as_config, - sizeof(AS_Config_t)); - - eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->ho_prepare = 0xFF; - eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->ho_complete = 0; - - eNB_rrc_inst[Mod_id].handover_info[UE_index]->modid_t = mod_id_target; - eNB_rrc_inst[Mod_id].handover_info[UE_index]->ueid_s = UE_index; - eNB_rrc_inst[Mod_id].handover_info[UE_index]->modid_s = Mod_id; - eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->modid_t = mod_id_target; - eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->modid_s = Mod_id; - eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->ueid_t = UE_id_target; + if (eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ho_prepare != 0xF0) { + rrc_eNB_generate_HandoverPreparationInformation(enb_mod_idP, + frameP, + ue_mod_idP, + measResults2->measResultNeighCells->choice. + measResultListEUTRA.list.array[0]->physCellId); + } else { + LOG_D(RRC, "[eNB %d] Frame %d: Ignoring MeasReport from UE %d as Handover is in progress... \n", enb_mod_idP, frameP, + ue_mod_idP); } - else - LOG_E(RRC,"\nError in obtaining free UE id in target eNB %l for handover \n", targetPhyId); - } - else - LOG_E(RRC,"\nError in obtaining Module ID of target eNB for handover \n"); -} + //Look for IP address of the target eNB + //Send Handover Request -> target eNB + //Wait for Handover Acknowledgement <- target eNB + //Send Handover Command -/*------------------------------------------------------------------------------*/ -void rrc_eNB_process_handoverPreparationInformation(module_id_t Mod_id,frame_t frameP, uint16_t UE_index) { + //x2delay(); + // handover_request_x2(ue_mod_idP,enb_mod_idP,measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId); - LOG_I(RRC,"[eNB %d] Frame %d : Logical Channel UL-DCCH, processing RRCHandoverPreparationInformation, sending RRCConnectionReconfiguration to UE %d \n",Mod_id,frameP,UE_index); - - - //eNB_rrc_inst[Mod_id].Info.UE_list[UE_index] - rrc_eNB_generate_RRCConnectionReconfiguration_handover(Mod_id,frameP,UE_index,NULL,0); + // uint8_t buffer[100]; + // int size=rrc_eNB_generate_Handover_Command_TeNB(0,0,buffer); + // + // send_check_message((char*)buffer,size); + //send_handover_command(); } /*------------------------------------------------------------------------------*/ -void check_handovers(module_id_t Mod_id, frame_t frameP) { - uint8_t i; - int result; +void rrc_eNB_generate_HandoverPreparationInformation( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + PhysCellId_t targetPhyId) { + uint8_t UE_id_target; + uint8_t mod_id_target = get_adjacent_cell_mod_id(targetPhyId); + HANDOVER_INFO *handoverInfo = CALLOC(1, sizeof(*handoverInfo)); + /* + uint8_t buffer[100]; + uint8_t size; + struct PhysicalConfigDedicated **physicalConfigDedicated = &eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP]; + RadioResourceConfigDedicated_t *radioResourceConfigDedicated = CALLOC(1,sizeof(RadioResourceConfigDedicated_t)); + */ - for (i=0;iho_prepare == 0xFF) { - LOG_D(RRC,"[eNB %d] Frame %d: Incoming handover detected for new UE_idx %d (source eNB %d->target eNB %d) \n", - Mod_id, frameP, i,Mod_id, eNB_rrc_inst[Mod_id].handover_info[i]->modid_t); - // source eNB generates rrcconnectionreconfiguration to prepare the HO - rrc_eNB_process_handoverPreparationInformation(Mod_id,frameP,i); - eNB_rrc_inst[Mod_id].handover_info[i]->ho_prepare = 0xF1; - } - - if(eNB_rrc_inst[Mod_id].handover_info[i]->ho_complete == 0xF1) { - LOG_D(RRC,"[eNB %d] Frame %d: handover Command received for new UE_idx %d current eNB %d target eNB: %d \n", - Mod_id, frameP, i,Mod_id,eNB_rrc_inst[Mod_id].handover_info[i]->modid_t); - //rrc_eNB_process_handoverPreparationInformation(Mod_id,frameP,i); - result = pdcp_data_req(Mod_id, i, frameP, 1, - DCCH, - rrc_eNB_mui++,0, - eNB_rrc_inst[Mod_id].handover_info[i]->size, - eNB_rrc_inst[Mod_id].handover_info[i]->buf,1); - AssertFatal (result == TRUE, "PDCP data request failed!\n"); - eNB_rrc_inst[Mod_id].handover_info[i]->ho_complete = 0xF2; - } + handoverInfo->as_config.antennaInfoCommon.antennaPortsCount = 0; //Not used 0- but check value + handoverInfo->as_config.sourceDl_CarrierFreq = 36090; //Verify! + memcpy((void *)&handoverInfo->as_config.sourceMasterInformationBlock, + (void *)&eNB_rrc_inst[enb_mod_idP].mib, sizeof(MasterInformationBlock_t)); + memcpy((void *)&handoverInfo->as_config.sourceMeasConfig, + (void *)&eNB_rrc_inst[enb_mod_idP].measConfig[ue_mod_idP], sizeof(MeasConfig_t)); + //to be configured + memset((void *)&eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_config.sourceSecurityAlgorithmConfig, + 0, sizeof(SecurityAlgorithmConfig_t)); + + memcpy((void *)&eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_config.sourceSystemInformationBlockType1, + (void *)&eNB_rrc_inst[enb_mod_idP].SIB1, sizeof(SystemInformationBlockType1_t)); + memcpy((void *)&eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_config.sourceSystemInformationBlockType2, + (void *)&eNB_rrc_inst[enb_mod_idP].SIB23, sizeof(SystemInformationBlockType2_t)); + + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context.reestablishmentInfo = + CALLOC(1, sizeof(ReestablishmentInfo_t)); + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context.reestablishmentInfo->sourcePhysCellId = + eNB_rrc_inst[enb_mod_idP].physCellId; + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context.reestablishmentInfo->targetCellShortMAC_I.buf = NULL; // Check values later + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context.reestablishmentInfo->targetCellShortMAC_I.size = 0; + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context.reestablishmentInfo->targetCellShortMAC_I.bits_unused = 0; + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context.reestablishmentInfo->additionalReestabInfoList = NULL; + + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ho_prepare = 0xFF; //0xF0; + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ho_complete = 0; + + if (mod_id_target != 0xFF) { + //UE_id_target = rrc_find_free_ue_index(modid_target); + UE_id_target = rrc_eNB_get_next_free_UE_index(mod_id_target, eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]); //this should return a new index + + if (UE_id_target != 0xFF) { + LOG_N(RRC, + "[eNB %d] Frame %d : Emulate sending HandoverPreparationInformation msg from eNB source %d to eNB target %d: source UE_id %d target UE_id %d source_modId: %d target_modId: %d\n", + enb_mod_idP, frameP, eNB_rrc_inst[enb_mod_idP].physCellId, targetPhyId, ue_mod_idP, UE_id_target, enb_mod_idP, + mod_id_target); + eNB_rrc_inst[mod_id_target].handover_info[UE_id_target] = + CALLOC(1, sizeof(*(eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]))); + memcpy((void *)&eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->as_context, + (void *)&eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_context, sizeof(AS_Context_t)); + memcpy((void *)&eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->as_config, + (void *)&eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->as_config, sizeof(AS_Config_t)); + + eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->ho_prepare = 0xFF; + eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->ho_complete = 0; + + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->modid_t = mod_id_target; + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ueid_s = ue_mod_idP; + eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->modid_s = enb_mod_idP; + eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->modid_t = mod_id_target; + eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->modid_s = enb_mod_idP; + eNB_rrc_inst[mod_id_target].handover_info[UE_id_target]->ueid_t = UE_id_target; + } else + LOG_E(RRC, "\nError in obtaining free UE id in target eNB %l for handover \n", targetPhyId); + } else + LOG_E(RRC, "\nError in obtaining Module ID of target eNB for handover \n"); +} + +/*------------------------------------------------------------------------------*/ +void rrc_eNB_process_handoverPreparationInformation( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP) { + + LOG_I(RRC, + "[eNB %d] Frame %d : Logical Channel UL-DCCH, processing RRCHandoverPreparationInformation, sending RRCConnectionReconfiguration to UE %d \n", + enb_mod_idP, frameP, ue_mod_idP); + + //eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] + rrc_eNB_generate_RRCConnectionReconfiguration_handover(enb_mod_idP, frameP, ue_mod_idP, NULL, 0); + +} + +/*------------------------------------------------------------------------------*/ +void check_handovers( + module_id_t enb_mod_idP, + frame_t frameP) { + uint8_t i; + int result; + + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (eNB_rrc_inst[enb_mod_idP].handover_info[i] != NULL) { + if (eNB_rrc_inst[enb_mod_idP].handover_info[i]->ho_prepare == 0xFF) { + LOG_D(RRC, + "[eNB %d] Frame %d: Incoming handover detected for new UE_idx %d (source eNB %d->target eNB %d) \n", + enb_mod_idP, frameP, i, enb_mod_idP, eNB_rrc_inst[enb_mod_idP].handover_info[i]->modid_t); + // source eNB generates rrcconnectionreconfiguration to prepare the HO + rrc_eNB_process_handoverPreparationInformation(enb_mod_idP, frameP, i); + eNB_rrc_inst[enb_mod_idP].handover_info[i]->ho_prepare = 0xF1; + } + + if (eNB_rrc_inst[enb_mod_idP].handover_info[i]->ho_complete == 0xF1) { + LOG_D(RRC, + "[eNB %d] Frame %d: handover Command received for new UE_idx %d current eNB %d target eNB: %d \n", + enb_mod_idP, frameP, i, enb_mod_idP, eNB_rrc_inst[enb_mod_idP].handover_info[i]->modid_t); + //rrc_eNB_process_handoverPreparationInformation(enb_mod_idP,frameP,i); + result = pdcp_data_req(enb_mod_idP, i, frameP, 1, + DCCH, + rrc_eNB_mui++, 0, + eNB_rrc_inst[enb_mod_idP].handover_info[i]->size, + eNB_rrc_inst[enb_mod_idP].handover_info[i]->buf, 1); + AssertFatal(result == TRUE, "PDCP data request failed!\n"); + eNB_rrc_inst[enb_mod_idP].handover_info[i]->ho_complete = 0xF2; + } + } } - } } /*------------------------------------------------------------------------------*/ // 5.3.5.4 RRCConnectionReconfiguration including the mobilityControlInfo to prepare the UE handover -void rrc_eNB_generate_RRCConnectionReconfiguration_handover (module_id_t Mod_id, frame_t frameP,uint16_t UE_index,uint8_t *nas_pdu,uint32_t nas_length) { +void rrc_eNB_generate_RRCConnectionReconfiguration_handover( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + uint8_t * nas_pdu, + uint32_t nas_length) { - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i; - uint8_t rv[2]; - uint16_t Idx; - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - eNB_RRC_INST *rrc_inst = &eNB_rrc_inst[Mod_id]; + uint8_t buffer[RRC_BUF_SIZE]; + uint16_t size; + int i; + uint8_t rv[2]; + uint16_t Idx; + // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE + eNB_RRC_INST *rrc_inst = &eNB_rrc_inst[enb_mod_idP]; - struct PhysicalConfigDedicated **physicalConfigDedicated = &rrc_inst->physicalConfigDedicated[UE_index]; + struct PhysicalConfigDedicated **physicalConfigDedicated = &rrc_inst->physicalConfigDedicated[ue_mod_idP]; - struct SRB_ToAddMod *SRB2_config; - struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config; - struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters *SRB2_ul_SpecificParameters; - LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL; - SRB_ToAddModList_t *SRB_configList = rrc_inst->SRB_configList[UE_index]; // not used in this context: may be removed - SRB_ToAddModList_t *SRB_configList2; + struct SRB_ToAddMod *SRB2_config; + struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config; + struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config; + struct LogicalChannelConfig__ul_SpecificParameters *SRB2_ul_SpecificParameters; + LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL; + SRB_ToAddModList_t *SRB_configList = rrc_inst->SRB_configList[ue_mod_idP]; // not used in this context: may be removed + SRB_ToAddModList_t *SRB_configList2; - struct DRB_ToAddMod *DRB_config; - struct RLC_Config *DRB_rlc_config; - struct PDCP_Config *DRB_pdcp_config; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM; - struct LogicalChannelConfig *DRB_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters *DRB_ul_SpecificParameters; - // DRB_ToAddModList_t **DRB_configList = &rrc_inst->DRB_configList[UE_index]; - DRB_ToAddModList_t *DRB_configList2; + struct DRB_ToAddMod *DRB_config; + struct RLC_Config *DRB_rlc_config; + struct PDCP_Config *DRB_pdcp_config; + struct PDCP_Config__rlc_UM *PDCP_rlc_UM; + struct LogicalChannelConfig *DRB_lchan_config; + struct LogicalChannelConfig__ul_SpecificParameters *DRB_ul_SpecificParameters; + // DRB_ToAddModList_t **DRB_configList = &rrc_inst->DRB_configList[ue_mod_idP]; + DRB_ToAddModList_t *DRB_configList2; - MAC_MainConfig_t *mac_MainConfig; - MeasObjectToAddModList_t *MeasObj_list; - MeasObjectToAddMod_t *MeasObj; - ReportConfigToAddModList_t *ReportConfig_list; - ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, - *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; - MeasIdToAddModList_t *MeasId_list; - MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; - QuantityConfig_t *quantityConfig; - MobilityControlInfo_t *mobilityInfo; - // HandoverCommand_t handoverCommand; - uint8_t sourceModId = get_adjacent_cell_mod_id(rrc_inst->handover_info[UE_index]->as_context.reestablishmentInfo->sourcePhysCellId); + MAC_MainConfig_t *mac_MainConfig; + MeasObjectToAddModList_t *MeasObj_list; + MeasObjectToAddMod_t *MeasObj; + ReportConfigToAddModList_t *ReportConfig_list; + ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, + *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; + MeasIdToAddModList_t *MeasId_list; + MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; + QuantityConfig_t *quantityConfig; + MobilityControlInfo_t *mobilityInfo; + // HandoverCommand_t handoverCommand; + uint8_t sourceModId = + get_adjacent_cell_mod_id(rrc_inst->handover_info[ue_mod_idP]->as_context.reestablishmentInfo->sourcePhysCellId); #if Rel10 - long *sr_ProhibitTimer_r9; + long *sr_ProhibitTimer_r9; #endif - long *logicalchannelgroup, *logicalchannelgroup_drb; - long *maxHARQ_Tx, *periodicBSR_Timer; + long *logicalchannelgroup, *logicalchannelgroup_drb; + long *maxHARQ_Tx, *periodicBSR_Timer; - // RSRP_Range_t *rsrp; - struct MeasConfig__speedStatePars *Sparams; - CellsToAddMod_t *CellToAdd; - CellsToAddModList_t *CellsToAddModList; - // srb 1: for HO - struct SRB_ToAddMod *SRB1_config; - struct SRB_ToAddMod__rlc_Config *SRB1_rlc_config; - struct SRB_ToAddMod__logicalChannelConfig *SRB1_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters *SRB1_ul_SpecificParameters; - // phy config dedicated - PhysicalConfigDedicated_t *physicalConfigDedicated2; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList; + // RSRP_Range_t *rsrp; + struct MeasConfig__speedStatePars *Sparams; + CellsToAddMod_t *CellToAdd; + CellsToAddModList_t *CellsToAddModList; + // srb 1: for HO + struct SRB_ToAddMod *SRB1_config; + struct SRB_ToAddMod__rlc_Config *SRB1_rlc_config; + struct SRB_ToAddMod__logicalChannelConfig *SRB1_lchan_config; + struct LogicalChannelConfig__ul_SpecificParameters *SRB1_ul_SpecificParameters; + // phy config dedicated + PhysicalConfigDedicated_t *physicalConfigDedicated2; + struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList; - - LOG_D(RRC,"[eNB %d] Frame %d: handover preparation: get the newSourceUEIdentity (C-RNTI): ", Mod_id, frameP); - for (i=0;i<2;i++) { - rv[i]=taus()&0xff; - LOG_D(RRC," %x.",rv[i]); - } - - LOG_D(RRC,"[eNB %d] Frame %d : handover reparation: add target eNB SRB1 and PHYConfigDedicated reconfiguration\n",Mod_id, frameP); - // 1st: reconfigure SRB - SRB_configList2 = CALLOC(1,sizeof(*SRB_configList)); - SRB1_config = CALLOC(1,sizeof(*SRB1_config)); - SRB1_config->srb_Identity = 1; - SRB1_rlc_config = CALLOC(1,sizeof(*SRB1_rlc_config)); - SRB1_config->rlc_Config = SRB1_rlc_config; - - SRB1_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB1_rlc_config->choice.explicitValue.present=RLC_Config_PR_am; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit=T_PollRetransmit_ms15; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU=PollPDU_p8; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte=PollByte_kB1000; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold=UL_AM_RLC__maxRetxThreshold_t16; - SRB1_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering=T_Reordering_ms50; - SRB1_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit=T_StatusProhibit_ms10; - - SRB1_lchan_config = CALLOC(1,sizeof(*SRB1_lchan_config)); - SRB1_config->logicalChannelConfig = SRB1_lchan_config; - - SRB1_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - SRB1_ul_SpecificParameters = CALLOC(1,sizeof(*SRB1_ul_SpecificParameters)); - - SRB1_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB1_ul_SpecificParameters; - - SRB1_ul_SpecificParameters->priority = 1; - - //assign_enum(&SRB1_ul_SpecificParameters->prioritisedBitRate,LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity); - SRB1_ul_SpecificParameters->prioritisedBitRate=LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - - //assign_enum(&SRB1_ul_SpecificParameters->bucketSizeDuration,LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50); - SRB1_ul_SpecificParameters->bucketSizeDuration=LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - logicalchannelgroup = CALLOC(1,sizeof(long)); - *logicalchannelgroup=0; - SRB1_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - - ASN_SEQUENCE_ADD(&SRB_configList2->list,SRB1_config); - - //2nd: now reconfigure phy config dedicated - physicalConfigDedicated2 = CALLOC(1,sizeof(*physicalConfigDedicated2)); - *physicalConfigDedicated = physicalConfigDedicated2; - - physicalConfigDedicated2->pdsch_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->pdsch_ConfigDedicated)); - physicalConfigDedicated2->pucch_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->pucch_ConfigDedicated)); - physicalConfigDedicated2->pusch_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->pusch_ConfigDedicated)); - physicalConfigDedicated2->uplinkPowerControlDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated)); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH)); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH = CALLOC(1,sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH)); - physicalConfigDedicated2->cqi_ReportConfig = NULL;//CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig)); - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = NULL;//CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated)); - physicalConfigDedicated2->antennaInfo = CALLOC(1,sizeof(*physicalConfigDedicated2->antennaInfo)); - physicalConfigDedicated2->schedulingRequestConfig = CALLOC(1,sizeof(*physicalConfigDedicated2->schedulingRequestConfig)); - // PDSCH - //assign_enum(&physicalConfigDedicated2->pdsch_ConfigDedicated->p_a, - // PDSCH_ConfigDedicated__p_a_dB0); - physicalConfigDedicated2->pdsch_ConfigDedicated->p_a= PDSCH_ConfigDedicated__p_a_dB0; - - // PUCCH - physicalConfigDedicated2->pucch_ConfigDedicated->ackNackRepetition.present=PUCCH_ConfigDedicated__ackNackRepetition_PR_release; - physicalConfigDedicated2->pucch_ConfigDedicated->ackNackRepetition.choice.release=0; - physicalConfigDedicated2->pucch_ConfigDedicated->tdd_AckNackFeedbackMode=NULL;//PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing; - - // Pusch_config_dedicated - physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_ACK_Index = 0; // 2.00 - physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_RI_Index = 0; // 1.25 - physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_CQI_Index = 8; // 2.25 - - // UplinkPowerControlDedicated - physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUSCH = 0; // 0 dB - //assign_enum(&physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled, - // UplinkPowerControlDedicated__deltaMCS_Enabled_en1); - physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled= UplinkPowerControlDedicated__deltaMCS_Enabled_en1; - physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // FALSE - physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUCCH = 0; // 0 dB - physicalConfigDedicated2->uplinkPowerControlDedicated->pSRS_Offset = 0; // 0 dB - physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = CALLOC(1,sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient)); - // assign_enum(physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient,FilterCoefficient_fc4); // fc4 dB - *physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient=FilterCoefficient_fc4; // fc4 dB - - // TPC-PDCCH-Config - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->present=TPC_PDCCH_Config_PR_setup; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_Index.present = TPC_Index_PR_indexOfFormat3; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_Index.choice.indexOfFormat3 = 1; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf=CALLOC(1,2); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.size=2; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf[0]=0x12; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf[1]=0x34+UE_index; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.bits_unused=0; - - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->present=TPC_PDCCH_Config_PR_setup; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_Index.present = TPC_Index_PR_indexOfFormat3; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_Index.choice.indexOfFormat3 = 1; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf=CALLOC(1,2); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.size=2; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf[0]=0x22; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf[1]=0x34+UE_index; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.bits_unused=0; - - // CQI ReportConfig - /* - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic)); - assign_enum(physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic, - CQI_ReportConfig__cqi_ReportModeAperiodic_rm30); // HLC CQI, no PMI - physicalConfigDedicated2->cqi_ReportConfig->nomPDSCH_RS_EPRE_Offset = 0; // 0 dB - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic)); - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->present = CQI_ReportPeriodic_PR_setup; - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex = 0; // n2_pucch - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_pmi_ConfigIndex = 0; // Icqi/pmi - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present = CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI; // subband CQI - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.choice.subbandCQI.k=4; - - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.ri_ConfigIndex=NULL; - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.simultaneousAckNackAndCQI=0; - */ - - //soundingRS-UL-ConfigDedicated - /* - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->present = SoundingRS_UL_ConfigDedicated_PR_setup; - assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth, - SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw0); - assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth, - SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw0); - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition=0; - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.duration=1; - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex=1; - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb=0; - assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift, - SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs0); - */ - - //AntennaInfoDedicated - physicalConfigDedicated2->antennaInfo = CALLOC(1,sizeof(*physicalConfigDedicated2->antennaInfo)); - physicalConfigDedicated2->antennaInfo->present = PhysicalConfigDedicated__antennaInfo_PR_explicitValue; - //assign_enum(&physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode, - // AntennaInfoDedicated__transmissionMode_tm2); - /* - switch (transmission_mode){ - case 1: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm1; - break; - case 2: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm2; - break; - case 4: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm4; - break; - case 5: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm5; - break; - case 6: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm6; - break; - } - */ - physicalConfigDedicated2->antennaInfo->choice.explicitValue.ue_TransmitAntennaSelection.present = AntennaInfoDedicated__ue_TransmitAntennaSelection_PR_release; - physicalConfigDedicated2->antennaInfo->choice.explicitValue.ue_TransmitAntennaSelection.choice.release = 0; - - // SchedulingRequestConfig - physicalConfigDedicated2->schedulingRequestConfig->present = SchedulingRequestConfig_PR_setup; - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = UE_index; - - if (mac_xface->lte_frame_parms->frame_type == 0){ // FDD - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 5+(UE_index%10); // Isr = 5 (every 10 subframes, offset=2+UE_id mod3) -} else { - switch (mac_xface->lte_frame_parms->tdd_config) { - case 1: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7+(UE_index&1)+((UE_index&3)>>1)*5; // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 7 for UE2, 8 for UE3 , 2 for UE4 etc..) - break; - case 3: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7+(UE_index%3); // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 3 for UE2, 2 for UE3 , etc..) - break; - case 4: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7+(UE_index&1); // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 3 for UE2, 2 for UE3 , etc..) - break; - default: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7; // Isr = 5 (every 10 subframes, offset=2 for all UE0 etc..) - break; + LOG_D(RRC, "[eNB %d] Frame %d: handover preparation: get the newSourceUEIdentity (C-RNTI): ", enb_mod_idP, frameP); + for (i = 0; i < 2; i++) { + rv[i] = taus() & 0xff; + LOG_D(RRC, " %x.", rv[i]); } - } - - // assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax, - //SchedulingRequestConfig__setup__dsr_TransMax_n4); - // assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4; - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4; - - LOG_D(RRC,"handover_config [MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %d) --->][MAC_eNB][MOD %02d][]\n", - frameP, Mod_id, UE_index, Mod_id); - rrc_mac_config_req (Mod_id, 1, UE_index, 0, - (RadioResourceConfigCommonSIB_t *) NULL, - eNB_rrc_inst[Mod_id].physicalConfigDedicated[UE_index], - (MeasObjectToAddMod_t **) NULL, - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index], - 1, - SRB1_logicalChannelConfig, - eNB_rrc_inst[Mod_id].measGapConfig[UE_index], - (TDD_Config_t *) NULL, - (MobilityControlInfo_t *)NULL, - (uint8_t *) NULL,(uint16_t *) NULL, NULL, NULL, NULL, - (MBSFN_SubframeConfigList_t *) NULL + + LOG_D(RRC, "[eNB %d] Frame %d : handover reparation: add target eNB SRB1 and PHYConfigDedicated reconfiguration\n", + enb_mod_idP, frameP); + // 1st: reconfigure SRB + SRB_configList2 = CALLOC(1, sizeof(*SRB_configList)); + SRB1_config = CALLOC(1, sizeof(*SRB1_config)); + SRB1_config->srb_Identity = 1; + SRB1_rlc_config = CALLOC(1, sizeof(*SRB1_rlc_config)); + SRB1_config->rlc_Config = SRB1_rlc_config; + + SRB1_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; + SRB1_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; + SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; + SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; + SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; + SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t16; + SRB1_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms50; + SRB1_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; + + SRB1_lchan_config = CALLOC(1, sizeof(*SRB1_lchan_config)); + SRB1_config->logicalChannelConfig = SRB1_lchan_config; + + SRB1_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; + SRB1_ul_SpecificParameters = CALLOC(1, sizeof(*SRB1_ul_SpecificParameters)); + + SRB1_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB1_ul_SpecificParameters; + + SRB1_ul_SpecificParameters->priority = 1; + + //assign_enum(&SRB1_ul_SpecificParameters->prioritisedBitRate,LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity); + SRB1_ul_SpecificParameters->prioritisedBitRate = + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; + + //assign_enum(&SRB1_ul_SpecificParameters->bucketSizeDuration,LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50); + SRB1_ul_SpecificParameters->bucketSizeDuration = + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; + + logicalchannelgroup = CALLOC(1, sizeof(long)); + *logicalchannelgroup = 0; + SRB1_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; + + ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB1_config); + + //2nd: now reconfigure phy config dedicated + physicalConfigDedicated2 = CALLOC(1, sizeof(*physicalConfigDedicated2)); + *physicalConfigDedicated = physicalConfigDedicated2; + + physicalConfigDedicated2->pdsch_ConfigDedicated = + CALLOC(1, sizeof(*physicalConfigDedicated2->pdsch_ConfigDedicated)); + physicalConfigDedicated2->pucch_ConfigDedicated = + CALLOC(1, sizeof(*physicalConfigDedicated2->pucch_ConfigDedicated)); + physicalConfigDedicated2->pusch_ConfigDedicated = + CALLOC(1, sizeof(*physicalConfigDedicated2->pusch_ConfigDedicated)); + physicalConfigDedicated2->uplinkPowerControlDedicated = + CALLOC(1, sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated)); + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH = + CALLOC(1, sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH)); + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH = + CALLOC(1, sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH)); + physicalConfigDedicated2->cqi_ReportConfig = NULL; //CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig)); + physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = NULL; //CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated)); + physicalConfigDedicated2->antennaInfo = CALLOC(1, sizeof(*physicalConfigDedicated2->antennaInfo)); + physicalConfigDedicated2->schedulingRequestConfig = + CALLOC(1, sizeof(*physicalConfigDedicated2->schedulingRequestConfig)); + // PDSCH + //assign_enum(&physicalConfigDedicated2->pdsch_ConfigDedicated->p_a, + // PDSCH_ConfigDedicated__p_a_dB0); + physicalConfigDedicated2->pdsch_ConfigDedicated->p_a = PDSCH_ConfigDedicated__p_a_dB0; + + // PUCCH + physicalConfigDedicated2->pucch_ConfigDedicated->ackNackRepetition.present = + PUCCH_ConfigDedicated__ackNackRepetition_PR_release; + physicalConfigDedicated2->pucch_ConfigDedicated->ackNackRepetition.choice.release = 0; + physicalConfigDedicated2->pucch_ConfigDedicated->tdd_AckNackFeedbackMode = NULL; //PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing; + + // Pusch_config_dedicated + physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_ACK_Index = 0; // 2.00 + physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_RI_Index = 0; // 1.25 + physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_CQI_Index = 8; // 2.25 + + // UplinkPowerControlDedicated + physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUSCH = 0; // 0 dB + //assign_enum(&physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled, + // UplinkPowerControlDedicated__deltaMCS_Enabled_en1); + physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled = + UplinkPowerControlDedicated__deltaMCS_Enabled_en1; + physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // FALSE + physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUCCH = 0; // 0 dB + physicalConfigDedicated2->uplinkPowerControlDedicated->pSRS_Offset = 0; // 0 dB + physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = + CALLOC(1, sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient)); + // assign_enum(physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient,FilterCoefficient_fc4); // fc4 dB + *physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = FilterCoefficient_fc4; // fc4 dB + + // TPC-PDCCH-Config + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->present = TPC_PDCCH_Config_PR_setup; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_Index.present = TPC_Index_PR_indexOfFormat3; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_Index.choice.indexOfFormat3 = 1; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf = CALLOC(1, 2); + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.size = 2; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf[0] = 0x12; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf[1] = 0x34 + ue_mod_idP; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.bits_unused = 0; + + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->present = TPC_PDCCH_Config_PR_setup; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_Index.present = TPC_Index_PR_indexOfFormat3; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_Index.choice.indexOfFormat3 = 1; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf = CALLOC(1, 2); + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.size = 2; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf[0] = 0x22; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf[1] = 0x34 + ue_mod_idP; + physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.bits_unused = 0; + + // CQI ReportConfig + /* + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic)); + assign_enum(physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic, + CQI_ReportConfig__cqi_ReportModeAperiodic_rm30); // HLC CQI, no PMI + physicalConfigDedicated2->cqi_ReportConfig->nomPDSCH_RS_EPRE_Offset = 0; // 0 dB + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic)); + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->present = CQI_ReportPeriodic_PR_setup; + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex = 0; // n2_pucch + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_pmi_ConfigIndex = 0; // Icqi/pmi + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present = CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI; // subband CQI + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.choice.subbandCQI.k=4; + + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.ri_ConfigIndex=NULL; + physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.simultaneousAckNackAndCQI=0; + */ + + //soundingRS-UL-ConfigDedicated + /* + physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->present = SoundingRS_UL_ConfigDedicated_PR_setup; + assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth, + SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw0); + assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth, + SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw0); + physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition=0; + physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.duration=1; + physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex=1; + physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb=0; + assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs0); + */ + + //AntennaInfoDedicated + physicalConfigDedicated2->antennaInfo = CALLOC(1, sizeof(*physicalConfigDedicated2->antennaInfo)); + physicalConfigDedicated2->antennaInfo->present = PhysicalConfigDedicated__antennaInfo_PR_explicitValue; + //assign_enum(&physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode, + // AntennaInfoDedicated__transmissionMode_tm2); + /* + switch (transmission_mode){ + case 1: + physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm1; + break; + case 2: + physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm2; + break; + case 4: + physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm4; + break; + case 5: + physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm5; + break; + case 6: + physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm6; + break; + } + */ + physicalConfigDedicated2->antennaInfo->choice.explicitValue.ue_TransmitAntennaSelection.present = + AntennaInfoDedicated__ue_TransmitAntennaSelection_PR_release; + physicalConfigDedicated2->antennaInfo->choice.explicitValue.ue_TransmitAntennaSelection.choice.release = 0; + + // SchedulingRequestConfig + physicalConfigDedicated2->schedulingRequestConfig->present = SchedulingRequestConfig_PR_setup; + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = ue_mod_idP; + + if (mac_xface->lte_frame_parms->frame_type == 0) { // FDD + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 5 + (ue_mod_idP % 10); // Isr = 5 (every 10 subframes, offset=2+UE_id mod3) + } else { + switch (mac_xface->lte_frame_parms->tdd_config) { + case 1: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_mod_idP & 1) + ((ue_mod_idP & 3) >> 1) * 5; // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 7 for UE2, 8 for UE3 , 2 for UE4 etc..) + break; + case 3: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_mod_idP % 3); // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 3 for UE2, 2 for UE3 , etc..) + break; + case 4: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_mod_idP & 1); // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 3 for UE2, 2 for UE3 , etc..) + break; + default: + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7; // Isr = 5 (every 10 subframes, offset=2 for all UE0 etc..) + break; + } + } + + // assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax, + //SchedulingRequestConfig__setup__dsr_TransMax_n4); + // assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4; + physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = + SchedulingRequestConfig__setup__dsr_TransMax_n4; + + LOG_D(RRC, + "handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %d) --->][MAC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, ue_mod_idP, enb_mod_idP); + rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, ue_mod_idP, 0, (RadioResourceConfigCommonSIB_t *) NULL, + eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP], (MeasObjectToAddMod_t **) NULL, + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP], 1, SRB1_logicalChannelConfig, + eNB_rrc_inst[enb_mod_idP].measGapConfig[ue_mod_idP], (TDD_Config_t *) NULL, + (MobilityControlInfo_t *) NULL, (uint8_t *) NULL, (uint16_t *) NULL, NULL, NULL, NULL, + (MBSFN_SubframeConfigList_t *) 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 - , - eNB_rrc_inst[Mod_id]. - num_active_cba_groups, - eNB_rrc_inst[Mod_id].cba_rnti[0] + , eNB_rrc_inst[enb_mod_idP].num_active_cba_groups, eNB_rrc_inst[enb_mod_idP].cba_rnti[0] #endif - ); - + ); - // Configure target eNB SRB2 - /// SRB2 - SRB2_config = CALLOC (1, sizeof (*SRB2_config)); - SRB_configList2 = CALLOC (1, sizeof (*SRB_configList2)); - memset (SRB_configList2, 0, sizeof (*SRB_configList2)); + // Configure target eNB SRB2 + /// SRB2 + SRB2_config = CALLOC(1, sizeof(*SRB2_config)); + SRB_configList2 = CALLOC(1, sizeof(*SRB_configList2)); + memset(SRB_configList2, 0, sizeof(*SRB_configList2)); - SRB2_config->srb_Identity = 2; - SRB2_rlc_config = CALLOC (1, sizeof (*SRB2_rlc_config)); - SRB2_config->rlc_Config = SRB2_rlc_config; + SRB2_config->srb_Identity = 2; + SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config)); + SRB2_config->rlc_Config = SRB2_rlc_config; - SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms50; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; + SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; + SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; + SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; + SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms50; + SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; - SRB2_lchan_config = CALLOC (1, sizeof (*SRB2_lchan_config)); - SRB2_config->logicalChannelConfig = SRB2_lchan_config; + SRB2_lchan_config = CALLOC(1, sizeof(*SRB2_lchan_config)); + SRB2_config->logicalChannelConfig = SRB2_lchan_config; - SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; + SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - SRB2_ul_SpecificParameters = CALLOC (1, sizeof (*SRB2_ul_SpecificParameters)); + SRB2_ul_SpecificParameters = CALLOC(1, sizeof(*SRB2_ul_SpecificParameters)); - SRB2_ul_SpecificParameters->priority = 1; - SRB2_ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - SRB2_ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; + SRB2_ul_SpecificParameters->priority = 1; + SRB2_ul_SpecificParameters->prioritisedBitRate = + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; + SRB2_ul_SpecificParameters->bucketSizeDuration = + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - // LCG for CCCH and DCCH is 0 as defined in 36331 - logicalchannelgroup = CALLOC (1, sizeof (long)); - *logicalchannelgroup = 0; + // LCG for CCCH and DCCH is 0 as defined in 36331 + logicalchannelgroup = CALLOC(1, sizeof(long)); + *logicalchannelgroup = 0; - SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; - ASN_SEQUENCE_ADD (&SRB_configList->list, SRB2_config); - ASN_SEQUENCE_ADD (&SRB_configList2->list, SRB2_config); + SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; + SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; + ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); + ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB2_config); - // Configure target eNB DRB - DRB_configList2 = CALLOC (1, sizeof (*DRB_configList2)); - /// DRB - DRB_config = CALLOC (1, sizeof (*DRB_config)); + // Configure target eNB DRB + DRB_configList2 = CALLOC(1, sizeof(*DRB_configList2)); + /// DRB + DRB_config = CALLOC(1, sizeof(*DRB_config)); - //DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 - // NN: this is the 1st DRB for this ue, so set it to 1 - DRB_config->drb_Identity = (DRB_Identity_t) 1; // (UE_index+1); //allowed values 1..32 - DRB_config->logicalChannelIdentity = CALLOC (1, sizeof (long)); - *(DRB_config->logicalChannelIdentity) = (long) 3; - DRB_rlc_config = CALLOC (1, sizeof (*DRB_rlc_config)); - DRB_config->rlc_Config = DRB_rlc_config; - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms5; + //DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 + // NN: this is the 1st DRB for this ue, so set it to 1 + DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32 + DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); + *(DRB_config->logicalChannelIdentity) = (long)3; + DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); + DRB_config->rlc_Config = DRB_rlc_config; + DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; + DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; + DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; + DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms5; - DRB_pdcp_config = CALLOC (1, sizeof (*DRB_pdcp_config)); - DRB_config->pdcp_Config = DRB_pdcp_config; - DRB_pdcp_config->discardTimer = NULL; - DRB_pdcp_config->rlc_AM = NULL; - PDCP_rlc_UM = CALLOC (1, sizeof (*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; + DRB_pdcp_config = CALLOC(1, sizeof(*DRB_pdcp_config)); + DRB_config->pdcp_Config = DRB_pdcp_config; + DRB_pdcp_config->discardTimer = NULL; + DRB_pdcp_config->rlc_AM = NULL; + PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); + DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; + PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; + DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - DRB_lchan_config = CALLOC (1, sizeof (*DRB_lchan_config)); - DRB_config->logicalChannelConfig = DRB_lchan_config; - DRB_ul_SpecificParameters = CALLOC (1, sizeof (*DRB_ul_SpecificParameters)); - DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; + DRB_lchan_config = CALLOC(1, sizeof(*DRB_lchan_config)); + DRB_config->logicalChannelConfig = DRB_lchan_config; + DRB_ul_SpecificParameters = CALLOC(1, sizeof(*DRB_ul_SpecificParameters)); + DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; + DRB_ul_SpecificParameters->priority = 2; // lower priority than srb1, srb2 + DRB_ul_SpecificParameters->prioritisedBitRate = + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; + DRB_ul_SpecificParameters->bucketSizeDuration = + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - DRB_ul_SpecificParameters->priority = 2; // lower priority than srb1, srb2 - DRB_ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - DRB_ul_SpecificParameters->bucketSizeDuration = LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; + // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) + logicalchannelgroup_drb = CALLOC(1, sizeof(long)); + *logicalchannelgroup_drb = 1; + DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; - // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) - logicalchannelgroup_drb = CALLOC (1, sizeof (long)); - *logicalchannelgroup_drb = 1; - DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; + ASN_SEQUENCE_ADD(&DRB_configList2->list, DRB_config); + mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig)); + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP] = mac_MainConfig; - ASN_SEQUENCE_ADD (&DRB_configList2->list, DRB_config); + mac_MainConfig->ul_SCH_Config = CALLOC(1, sizeof(*mac_MainConfig->ul_SCH_Config)); - mac_MainConfig = CALLOC (1, sizeof (*mac_MainConfig)); - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index] = mac_MainConfig; + maxHARQ_Tx = CALLOC(1, sizeof(long)); + *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; + mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; - mac_MainConfig->ul_SCH_Config = CALLOC (1, sizeof (*mac_MainConfig->ul_SCH_Config)); + periodicBSR_Timer = CALLOC(1, sizeof(long)); + *periodicBSR_Timer = MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf64; + mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; - maxHARQ_Tx = CALLOC (1, sizeof (long)); - *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; + mac_MainConfig->ul_SCH_Config->retxBSR_Timer = MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf320; - periodicBSR_Timer = CALLOC (1, sizeof (long)); - *periodicBSR_Timer = MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf64; - mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; + mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE - mac_MainConfig->ul_SCH_Config->retxBSR_Timer = MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf320; + mac_MainConfig->drx_Config = NULL; - mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE + mac_MainConfig->phr_Config = CALLOC(1, sizeof(*mac_MainConfig->phr_Config)); - mac_MainConfig->drx_Config = NULL; + mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; + mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes - mac_MainConfig->phr_Config = CALLOC (1, sizeof (*mac_MainConfig->phr_Config)); + mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; - mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB + mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB #ifdef Rel10 - sr_ProhibitTimer_r9 = CALLOC (1, sizeof (long)); - *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; - //sps_RA_ConfigList_rlola = NULL; + sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); + *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR + mac_MainConfig->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; + //sps_RA_ConfigList_rlola = NULL; #endif - // Measurement ID list - MeasId_list = CALLOC (1, sizeof (*MeasId_list)); - memset ((void *) MeasId_list, 0, sizeof (*MeasId_list)); + // Measurement ID list + MeasId_list = CALLOC(1, sizeof(*MeasId_list)); + memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); - MeasId0 = CALLOC (1, sizeof (*MeasId0)); - MeasId0->measId = 1; - MeasId0->measObjectId = 1; - MeasId0->reportConfigId = 1; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId0); + MeasId0 = CALLOC(1, sizeof(*MeasId0)); + MeasId0->measId = 1; + MeasId0->measObjectId = 1; + MeasId0->reportConfigId = 1; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId0); - MeasId1 = CALLOC (1, sizeof (*MeasId1)); - MeasId1->measId = 2; - MeasId1->measObjectId = 1; - MeasId1->reportConfigId = 2; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId1); + MeasId1 = CALLOC(1, sizeof(*MeasId1)); + MeasId1->measId = 2; + MeasId1->measObjectId = 1; + MeasId1->reportConfigId = 2; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId1); - MeasId2 = CALLOC (1, sizeof (*MeasId2)); - MeasId2->measId = 3; - MeasId2->measObjectId = 1; - MeasId2->reportConfigId = 3; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId2); + MeasId2 = CALLOC(1, sizeof(*MeasId2)); + MeasId2->measId = 3; + MeasId2->measObjectId = 1; + MeasId2->reportConfigId = 3; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId2); - MeasId3 = CALLOC (1, sizeof (*MeasId3)); - MeasId3->measId = 4; - MeasId3->measObjectId = 1; - MeasId3->reportConfigId = 4; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId3); + MeasId3 = CALLOC(1, sizeof(*MeasId3)); + MeasId3->measId = 4; + MeasId3->measObjectId = 1; + MeasId3->reportConfigId = 4; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId3); - MeasId4 = CALLOC (1, sizeof (*MeasId4)); - MeasId4->measId = 5; - MeasId4->measObjectId = 1; - MeasId4->reportConfigId = 5; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId4); + MeasId4 = CALLOC(1, sizeof(*MeasId4)); + MeasId4->measId = 5; + MeasId4->measObjectId = 1; + MeasId4->reportConfigId = 5; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId4); - MeasId5 = CALLOC (1, sizeof (*MeasId5)); - MeasId5->measId = 6; - MeasId5->measObjectId = 1; - MeasId5->reportConfigId = 6; - ASN_SEQUENCE_ADD (&MeasId_list->list, MeasId5); + MeasId5 = CALLOC(1, sizeof(*MeasId5)); + MeasId5->measId = 6; + MeasId5->measObjectId = 1; + MeasId5->reportConfigId = 6; + ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId5); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; + // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; - // Add one EUTRA Measurement Object - MeasObj_list = CALLOC (1, sizeof (*MeasObj_list)); - memset ((void *) MeasObj_list, 0, sizeof (*MeasObj_list)); + // Add one EUTRA Measurement Object + MeasObj_list = CALLOC(1, sizeof(*MeasObj_list)); + memset((void *)MeasObj_list, 0, sizeof(*MeasObj_list)); - // Configure MeasObject + // Configure MeasObject - MeasObj = CALLOC (1, sizeof (*MeasObj)); - memset ((void *) MeasObj, 0, sizeof (*MeasObj)); + MeasObj = CALLOC(1, sizeof(*MeasObj)); + memset((void *)MeasObj, 0, sizeof(*MeasObj)); - MeasObj->measObjectId = 1; - MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; - MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; - MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; - MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC (1, sizeof (uint8_t)); - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; - MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB + MeasObj->measObjectId = 1; + MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; + MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; + MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; + MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC(1, sizeof(uint8_t)); + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; + MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; + MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB - MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = (CellsToAddModList_t *) CALLOC (1, sizeof (*CellsToAddModList)); - CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; + MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = + (CellsToAddModList_t *) CALLOC(1, sizeof(*CellsToAddModList)); + CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; - // Add adjacent cell lists (6 per eNB) - for (i = 0; i < 6; i++) { - CellToAdd = (CellsToAddMod_t *) CALLOC (1, sizeof (*CellToAdd)); - CellToAdd->cellIndex = i + 1; - CellToAdd->physCellId = get_adjacent_cell_id (Mod_id, i); - CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; + // Add adjacent cell lists (6 per eNB) + for (i = 0; i < 6; i++) { + CellToAdd = (CellsToAddMod_t *) CALLOC(1, sizeof(*CellToAdd)); + CellToAdd->cellIndex = i + 1; + CellToAdd->physCellId = get_adjacent_cell_id(enb_mod_idP, i); + CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; - ASN_SEQUENCE_ADD (&CellsToAddModList->list, CellToAdd); - } + ASN_SEQUENCE_ADD(&CellsToAddModList->list, CellToAdd); + } - ASN_SEQUENCE_ADD (&MeasObj_list->list, MeasObj); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; + ASN_SEQUENCE_ADD(&MeasObj_list->list, MeasObj); + // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; - // Report Configurations for periodical, A1-A5 events - ReportConfig_list = CALLOC (1, sizeof (*ReportConfig_list)); + // Report Configurations for periodical, A1-A5 events + ReportConfig_list = CALLOC(1, sizeof(*ReportConfig_list)); - ReportConfig_per = CALLOC (1, sizeof (*ReportConfig_per)); + ReportConfig_per = CALLOC(1, sizeof(*ReportConfig_per)); - ReportConfig_A1 = CALLOC (1, sizeof (*ReportConfig_A1)); + ReportConfig_A1 = CALLOC(1, sizeof(*ReportConfig_A1)); - ReportConfig_A2 = CALLOC (1, sizeof (*ReportConfig_A2)); + ReportConfig_A2 = CALLOC(1, sizeof(*ReportConfig_A2)); - ReportConfig_A3 = CALLOC (1, sizeof (*ReportConfig_A3)); + ReportConfig_A3 = CALLOC(1, sizeof(*ReportConfig_A3)); - ReportConfig_A4 = CALLOC (1, sizeof (*ReportConfig_A4)); + ReportConfig_A4 = CALLOC(1, sizeof(*ReportConfig_A4)); - ReportConfig_A5 = CALLOC (1, sizeof (*ReportConfig_A5)); + ReportConfig_A5 = CALLOC(1, sizeof(*ReportConfig_A5)); - ReportConfig_per->reportConfigId = 1; - ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_periodical; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose =ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + ReportConfig_per->reportConfigId = 1; + ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_periodical; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = + ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - ASN_SEQUENCE_ADD (&ReportConfig_list->list, ReportConfig_per); + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_per); - ReportConfig_A1->reportConfigId = 2; - ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1.a1_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1.a1_Threshold.choice.threshold_RSRP = 10; + ReportConfig_A1->reportConfigId = 2; + ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. + a1_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. + a1_Threshold.choice.threshold_RSRP = 10; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - ASN_SEQUENCE_ADD (&ReportConfig_list->list, ReportConfig_A1); + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A1); - ReportConfig_A2->reportConfigId = 3; - ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2.a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2.a2_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A2); - - ReportConfig_A3->reportConfigId = 4; - ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present= ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = 10; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.reportOnLeave = 1; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A3); - - ReportConfig_A4->reportConfigId = 5; - ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present= ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4.a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4.a4_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A4); - - ReportConfig_A5->reportConfigId = 6; - ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold1.choice.threshold_RSRP = 10; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA5.a5_Threshold2.choice.threshold_RSRP = 10; - - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list,ReportConfig_A5); - - Sparams = CALLOC(1,sizeof(*Sparams)); - Sparams->present=MeasConfig__speedStatePars_PR_setup; - Sparams->choice.setup.timeToTrigger_SF.sf_High=SpeedStateScaleFactors__sf_Medium_oDot75; - Sparams->choice.setup.timeToTrigger_SF.sf_Medium=SpeedStateScaleFactors__sf_High_oDot5; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh=10; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium=5; - Sparams->choice.setup.mobilityStateParameters.t_Evaluation=MobilityStateParameters__t_Evaluation_s60; - Sparams->choice.setup.mobilityStateParameters.t_HystNormal=MobilityStateParameters__t_HystNormal_s120; - - quantityConfig = CALLOC(1,sizeof(*quantityConfig)); - memset((void *)quantityConfig,0,sizeof(*quantityConfig)); - quantityConfig->quantityConfigEUTRA = CALLOC(1,sizeof(*quantityConfig->quantityConfigEUTRA)); - memset((void *)quantityConfig->quantityConfigEUTRA,0,sizeof(*quantityConfig->quantityConfigEUTRA)); - quantityConfig->quantityConfigCDMA2000 = NULL; - quantityConfig->quantityConfigGERAN = NULL; - quantityConfig->quantityConfigUTRA = NULL; - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = CALLOC(1,sizeof(*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP)); - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = CALLOC(1,sizeof(*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ)); - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; + ReportConfig_A2->reportConfigId = 3; + ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2. + a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2. + a2_Threshold.choice.threshold_RSRP = 10; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - /* mobilityinfo */ + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A2); - mobilityInfo = CALLOC(1,sizeof(*mobilityInfo)); - memset((void *)mobilityInfo,0,sizeof(*mobilityInfo)); - mobilityInfo->targetPhysCellId = (PhysCellId_t) two_tier_hexagonal_cellIds[rrc_inst->handover_info[UE_index]->modid_t]; - LOG_D(RRC,"[eNB %d] Frame %d: handover preparation: targetPhysCellId: %d mod_id: %d UE_index: %d \n", - Mod_id,frameP, mobilityInfo->targetPhysCellId,Mod_id,UE_index); + ReportConfig_A3->reportConfigId = 4; + ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = + 10; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA3.reportOnLeave = 1; - mobilityInfo->additionalSpectrumEmission = CALLOC(1,sizeof(*mobilityInfo->additionalSpectrumEmission)); - *mobilityInfo->additionalSpectrumEmission = 1; //Check this value! - - mobilityInfo->t304 = MobilityControlInfo__t304_ms50; // need to configure an appropriate value here - - // New UE Identity (C-RNTI) to identify an UE uniquely in a cell - mobilityInfo->newUE_Identity.size = 2; - mobilityInfo->newUE_Identity.bits_unused = 0; - mobilityInfo->newUE_Identity.buf = rv; - mobilityInfo->newUE_Identity.buf[0] = rv[0]; - mobilityInfo->newUE_Identity.buf[1] = rv[1]; - - //memset((void *)&mobilityInfo->radioResourceConfigCommon,(void *)&rrc_inst->sib2->radioResourceConfigCommon,sizeof(RadioResourceConfigCommon_t)); - //memset((void *)&mobilityInfo->radioResourceConfigCommon,0,sizeof(RadioResourceConfigCommon_t)); + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - // Configuring radioResourceConfigCommon - mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon = CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.rach_ConfigCommon, - sizeof(RACH_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo = CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, - sizeof(PRACH_ConfigInfo_t)); - - mobilityInfo->radioResourceConfigCommon.prach_Config.rootSequenceIndex = rrc_inst->sib2->radioResourceConfigCommon.prach_Config.rootSequenceIndex; - mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon = CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.pdsch_ConfigCommon, - sizeof(PDSCH_ConfigCommon_t)); - memcpy((void *)&mobilityInfo->radioResourceConfigCommon.pusch_ConfigCommon, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.pusch_ConfigCommon, - sizeof(PUSCH_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.phich_Config = NULL; - mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon = CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.pucch_ConfigCommon, - sizeof(PUCCH_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon = CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, - sizeof(SoundingRS_UL_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon = CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon, - (void *)&rrc_inst->sib2->radioResourceConfigCommon.uplinkPowerControlCommon, - sizeof(UplinkPowerControlCommon_t)); - mobilityInfo->radioResourceConfigCommon.antennaInfoCommon = NULL; - mobilityInfo->radioResourceConfigCommon.p_Max = NULL; // CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.p_Max)); - //memcpy((void *)mobilityInfo->radioResourceConfigCommon.p_Max,(void *)rrc_inst->sib1->p_Max,sizeof(P_Max_t)); - mobilityInfo->radioResourceConfigCommon.tdd_Config = NULL; //CALLOC(1,sizeof(TDD_Config_t)); - //memcpy((void *)mobilityInfo->radioResourceConfigCommon.tdd_Config,(void *)rrc_inst->sib1->tdd_Config,sizeof(TDD_Config_t)); - mobilityInfo->radioResourceConfigCommon.ul_CyclicPrefixLength = rrc_inst->sib2->radioResourceConfigCommon.ul_CyclicPrefixLength; - //End of configuration of radioResourceConfigCommon + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A3); - mobilityInfo->carrierFreq = CALLOC(1,sizeof(*mobilityInfo->carrierFreq)); //CALLOC(1,sizeof(CarrierFreqEUTRA_t)); 36090 - mobilityInfo->carrierFreq->dl_CarrierFreq = 36090; - mobilityInfo->carrierFreq->ul_CarrierFreq = NULL; - - mobilityInfo->carrierBandwidth = CALLOC(1,sizeof(*mobilityInfo->carrierBandwidth)); //CALLOC(1,sizeof(struct CarrierBandwidthEUTRA)); AllowedMeasBandwidth_mbw25 - mobilityInfo->carrierBandwidth->dl_Bandwidth = CarrierBandwidthEUTRA__dl_Bandwidth_n25; - mobilityInfo->carrierBandwidth->ul_Bandwidth = NULL; - mobilityInfo->rach_ConfigDedicated = NULL; - + ReportConfig_A4->reportConfigId = 5; + ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4. + a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4. + a4_Threshold.choice.threshold_RSRP = 10; - // store the srb and drb list for ho management, mainly in case of failure - - memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.srb_ToAddModList, - (void *)SRB_configList2, - sizeof(SRB_ToAddModList_t)); - memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.drb_ToAddModList, - (void *)DRB_configList2, - sizeof(DRB_ToAddModList_t)); - rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; - memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.mac_MainConfig, - (void *)mac_MainConfig, - sizeof(MAC_MainConfig_t)); - memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.physicalConfigDedicated, - (void *)rrc_inst->physicalConfigDedicated[UE_index], - sizeof(PhysicalConfigDedicated_t)); - /* memcpy((void *)rrc_inst->handover_info[UE_index]->as_config.sourceRadioResourceConfig.sps_Config, - (void *)rrc_inst->sps_Config[UE_index], - sizeof(SPS_Config_t)); - */ - LOG_I(RRC,"[eNB %d] Frame %d: adding new UE\n"); - //Idx = (UE_index * NB_RB_MAX) + DCCH; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A4); + + ReportConfig_A5->reportConfigId = 6; + ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = + ReportConfigEUTRA__triggerType_PR_event; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold1.choice.threshold_RSRP = 10; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. + eventA5.a5_Threshold2.choice.threshold_RSRP = 10; + + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; + ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; + + ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5); + + Sparams = CALLOC(1, sizeof(*Sparams)); + Sparams->present = MeasConfig__speedStatePars_PR_setup; + Sparams->choice.setup.timeToTrigger_SF.sf_High = SpeedStateScaleFactors__sf_Medium_oDot75; + Sparams->choice.setup.timeToTrigger_SF.sf_Medium = SpeedStateScaleFactors__sf_High_oDot5; + Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh = 10; + Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium = 5; + Sparams->choice.setup.mobilityStateParameters.t_Evaluation = MobilityStateParameters__t_Evaluation_s60; + Sparams->choice.setup.mobilityStateParameters.t_HystNormal = MobilityStateParameters__t_HystNormal_s120; + + quantityConfig = CALLOC(1, sizeof(*quantityConfig)); + memset((void *)quantityConfig, 0, sizeof(*quantityConfig)); + quantityConfig->quantityConfigEUTRA = CALLOC(1, sizeof(*quantityConfig->quantityConfigEUTRA)); + memset((void *)quantityConfig->quantityConfigEUTRA, 0, sizeof(*quantityConfig->quantityConfigEUTRA)); + quantityConfig->quantityConfigCDMA2000 = NULL; + quantityConfig->quantityConfigGERAN = NULL; + quantityConfig->quantityConfigUTRA = NULL; + quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = + CALLOC(1, sizeof(*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP)); + quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = + CALLOC(1, sizeof(*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ)); + *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; + *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; + + /* mobilityinfo */ + + mobilityInfo = CALLOC(1, sizeof(*mobilityInfo)); + memset((void *)mobilityInfo, 0, sizeof(*mobilityInfo)); + mobilityInfo->targetPhysCellId = + (PhysCellId_t) two_tier_hexagonal_cellIds[rrc_inst->handover_info[ue_mod_idP]->modid_t]; + LOG_D(RRC, "[eNB %d] Frame %d: handover preparation: targetPhysCellId: %d mod_id: %d ue_mod_idP: %d \n", enb_mod_idP, + frameP, mobilityInfo->targetPhysCellId, enb_mod_idP, ue_mod_idP); + + mobilityInfo->additionalSpectrumEmission = CALLOC(1, sizeof(*mobilityInfo->additionalSpectrumEmission)); + *mobilityInfo->additionalSpectrumEmission = 1; //Check this value! + + mobilityInfo->t304 = MobilityControlInfo__t304_ms50; // need to configure an appropriate value here + + // New UE Identity (C-RNTI) to identify an UE uniquely in a cell + mobilityInfo->newUE_Identity.size = 2; + mobilityInfo->newUE_Identity.bits_unused = 0; + mobilityInfo->newUE_Identity.buf = rv; + mobilityInfo->newUE_Identity.buf[0] = rv[0]; + mobilityInfo->newUE_Identity.buf[1] = rv[1]; + + //memset((void *)&mobilityInfo->radioResourceConfigCommon,(void *)&rrc_inst->sib2->radioResourceConfigCommon,sizeof(RadioResourceConfigCommon_t)); + //memset((void *)&mobilityInfo->radioResourceConfigCommon,0,sizeof(RadioResourceConfigCommon_t)); + + // Configuring radioResourceConfigCommon + mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon = + CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon)); + memcpy((void *)mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.rach_ConfigCommon, sizeof(RACH_ConfigCommon_t)); + mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo = + CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo)); + memcpy((void *)mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, + sizeof(PRACH_ConfigInfo_t)); + + mobilityInfo->radioResourceConfigCommon.prach_Config.rootSequenceIndex = + rrc_inst->sib2->radioResourceConfigCommon.prach_Config.rootSequenceIndex; + mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon = + CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon)); + memcpy((void *)mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.pdsch_ConfigCommon, sizeof(PDSCH_ConfigCommon_t)); + memcpy((void *)&mobilityInfo->radioResourceConfigCommon.pusch_ConfigCommon, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.pusch_ConfigCommon, sizeof(PUSCH_ConfigCommon_t)); + mobilityInfo->radioResourceConfigCommon.phich_Config = NULL; + mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon = + CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon)); + memcpy((void *)mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.pucch_ConfigCommon, sizeof(PUCCH_ConfigCommon_t)); + mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon = + CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon)); + memcpy((void *)mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, + sizeof(SoundingRS_UL_ConfigCommon_t)); + mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon = + CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon)); + memcpy((void *)mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon, + (void *)&rrc_inst->sib2->radioResourceConfigCommon.uplinkPowerControlCommon, + sizeof(UplinkPowerControlCommon_t)); + mobilityInfo->radioResourceConfigCommon.antennaInfoCommon = NULL; + mobilityInfo->radioResourceConfigCommon.p_Max = NULL; // CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.p_Max)); + //memcpy((void *)mobilityInfo->radioResourceConfigCommon.p_Max,(void *)rrc_inst->sib1->p_Max,sizeof(P_Max_t)); + mobilityInfo->radioResourceConfigCommon.tdd_Config = NULL; //CALLOC(1,sizeof(TDD_Config_t)); + //memcpy((void *)mobilityInfo->radioResourceConfigCommon.tdd_Config,(void *)rrc_inst->sib1->tdd_Config,sizeof(TDD_Config_t)); + mobilityInfo->radioResourceConfigCommon.ul_CyclicPrefixLength = + rrc_inst->sib2->radioResourceConfigCommon.ul_CyclicPrefixLength; + //End of configuration of radioResourceConfigCommon + + mobilityInfo->carrierFreq = CALLOC(1, sizeof(*mobilityInfo->carrierFreq)); //CALLOC(1,sizeof(CarrierFreqEUTRA_t)); 36090 + mobilityInfo->carrierFreq->dl_CarrierFreq = 36090; + mobilityInfo->carrierFreq->ul_CarrierFreq = NULL; + + mobilityInfo->carrierBandwidth = CALLOC(1, sizeof(*mobilityInfo->carrierBandwidth)); //CALLOC(1,sizeof(struct CarrierBandwidthEUTRA)); AllowedMeasBandwidth_mbw25 + mobilityInfo->carrierBandwidth->dl_Bandwidth = CarrierBandwidthEUTRA__dl_Bandwidth_n25; + mobilityInfo->carrierBandwidth->ul_Bandwidth = NULL; + mobilityInfo->rach_ConfigDedicated = NULL; + + // store the srb and drb list for ho management, mainly in case of failure + + memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList, + (void *)SRB_configList2, sizeof(SRB_ToAddModList_t)); + memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList, + (void *)DRB_configList2, sizeof(DRB_ToAddModList_t)); + rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; + memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.mac_MainConfig, + (void *)mac_MainConfig, sizeof(MAC_MainConfig_t)); + memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.physicalConfigDedicated, + (void *)rrc_inst->physicalConfigDedicated[ue_mod_idP], sizeof(PhysicalConfigDedicated_t)); + /* memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.sps_Config, + (void *)rrc_inst->sps_Config[ue_mod_idP], + sizeof(SPS_Config_t)); + */ + LOG_I(RRC, "[eNB %d] Frame %d: adding new UE\n"); + //Idx = (ue_mod_idP * NB_RB_MAX) + DCCH; Idx = DCCH; // SRB1 - eNB_rrc_inst[Mod_id].Srb1[UE_index].Active = 1; - eNB_rrc_inst[Mod_id].Srb1[UE_index].Srb_info.Srb_id = Idx; - memcpy (&eNB_rrc_inst[Mod_id].Srb1[UE_index].Srb_info.Lchan_desc[0], - &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - memcpy (&eNB_rrc_inst[Mod_id].Srb1[UE_index].Srb_info.Lchan_desc[1], - &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - + eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_idP].Active = 1; + eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_idP].Srb_info.Srb_id = Idx; + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_idP].Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_idP].Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); + // SRB2 - eNB_rrc_inst[Mod_id].Srb2[UE_index].Active = 1; - eNB_rrc_inst[Mod_id].Srb2[UE_index].Srb_info.Srb_id = Idx; - memcpy (&eNB_rrc_inst[Mod_id].Srb2[UE_index].Srb_info.Lchan_desc[0], - &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - memcpy (&eNB_rrc_inst[Mod_id].Srb2[UE_index].Srb_info.Lchan_desc[1], - &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - - LOG_I (RRC,"[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %d\n",Mod_id, Idx, UE_index); - - // rrc_pdcp_config_req (Mod_id, frameP, 1, CONFIG_ACTION_ADD, idx, UNDEF_SECURITY_MODE); - // rrc_rlc_config_req(Mod_id,frameP,1,CONFIG_ACTION_ADD,Idx,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - - rrc_pdcp_config_asn1_req (Mod_id, UE_index, frameP, 1, - eNB_rrc_inst[Mod_id].SRB_configList[UE_index], - (DRB_ToAddModList_t *) NULL, - (DRB_ToReleaseList_t *) NULL, - 0xff, - NULL, - NULL, - NULL -#ifdef Rel10 - , (PMCH_InfoList_r9_t *) NULL -#endif - ); - - rrc_rlc_config_asn1_req (Mod_id, UE_index,frameP, 1, - eNB_rrc_inst[Mod_id].SRB_configList[UE_index], - (DRB_ToAddModList_t *) NULL, - (DRB_ToReleaseList_t *) NULL + eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_idP].Active = 1; + eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_idP].Srb_info.Srb_id = Idx; + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_idP].Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_idP].Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); + + LOG_I(RRC, "[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %d\n", enb_mod_idP, Idx, ue_mod_idP); + + // rrc_pdcp_config_req (enb_mod_idP, frameP, 1, CONFIG_ACTION_ADD, idx, UNDEF_SECURITY_MODE); + // rrc_rlc_config_req(enb_mod_idP,frameP,1,CONFIG_ACTION_ADD,Idx,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + + rrc_pdcp_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, 1, + eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP], + (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL, 0xff, NULL, NULL, NULL #ifdef Rel10 , (PMCH_InfoList_r9_t *) NULL #endif - ); - + ); + + rrc_rlc_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, 1, + eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP], + (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL +#ifdef Rel10 + , (PMCH_InfoList_r9_t *) NULL +#endif + ); + /* Initialize NAS list */ dedicatedInfoNASList = NULL; - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; - memset (buffer, 0, RRC_BUF_SIZE); + // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; + memset(buffer, 0, RRC_BUF_SIZE); - size = do_RRCConnectionReconfiguration (Mod_id, buffer, UE_index, rrc_eNB_get_next_transaction_identifier(Mod_id), //Transaction_id, - SRB_configList2, DRB_configList2, NULL, // DRB2_list, - NULL, //*sps_Config, - physicalConfigDedicated[UE_index], MeasObj_list, ReportConfig_list, - NULL, //quantityConfig, - MeasId_list, mac_MainConfig, NULL, mobilityInfo,Sparams, - NULL, NULL, dedicatedInfoNASList); + size = do_RRCConnectionReconfiguration(enb_mod_idP, buffer, ue_mod_idP, rrc_eNB_get_next_transaction_identifier(enb_mod_idP), //Transaction_id, + SRB_configList2, DRB_configList2, NULL, // DRB2_list, + NULL, //*sps_Config, + physicalConfigDedicated[ue_mod_idP], MeasObj_list, ReportConfig_list, NULL, //quantityConfig, + MeasId_list, mac_MainConfig, NULL, mobilityInfo, Sparams, + NULL, NULL, dedicatedInfoNASList); - LOG_I (RRC,"[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration for handover (bytes %d, UE id %d)\n", - Mod_id, frameP, size, UE_index); - // to be updated if needed - /*if (eNB_rrc_inst[Mod_id].SRB1_config[UE_index]->logicalChannelConfig) { - if (eNB_rrc_inst[Mod_id].SRB1_config[UE_index]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { - SRB1_logicalChannelConfig = &eNB_rrc_inst[Mod_id].SRB1_config[UE_index]->logicalChannelConfig->choice.explicitValue; - } - else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - } - else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - */ + LOG_I(RRC, + "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration for handover (bytes %d, UE id %d)\n", + enb_mod_idP, frameP, size, ue_mod_idP); + // to be updated if needed + /*if (eNB_rrc_inst[enb_mod_idP].SRB1_config[ue_mod_idP]->logicalChannelConfig) { + if (eNB_rrc_inst[enb_mod_idP].SRB1_config[ue_mod_idP]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { + SRB1_logicalChannelConfig = &eNB_rrc_inst[enb_mod_idP].SRB1_config[ue_mod_idP]->logicalChannelConfig->choice.explicitValue; + } + else { + SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; + } + } + else { + SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; + } + */ - LOG_D (RRC,"[MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration_handover to UE %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", - frameP, Mod_id, size, UE_index, rrc_eNB_mui, Mod_id, - DCCH); - - //rrc_rlc_data_req(Mod_id,frameP, 1,(UE_index*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); - //pdcp_data_req (Mod_id, frameP, 1, (UE_index * NB_RB_MAX) + DCCH,rrc_eNB_mui++, 0, size, (char *) buffer, 1); - rrc_mac_config_req (Mod_id, 1, UE_index, 0, - (RadioResourceConfigCommonSIB_t *) NULL, - eNB_rrc_inst[Mod_id].physicalConfigDedicated[UE_index], - (MeasObjectToAddMod_t **) NULL, - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index], - 1, - SRB1_logicalChannelConfig, - eNB_rrc_inst[Mod_id].measGapConfig[UE_index], - (TDD_Config_t *) NULL, - (MobilityControlInfo_t *)mobilityInfo, - (uint8_t *) NULL,(uint16_t *) NULL, NULL, NULL, NULL, - (MBSFN_SubframeConfigList_t *) NULL + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration_handover to UE %d MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", + frameP, enb_mod_idP, size, ue_mod_idP, rrc_eNB_mui, enb_mod_idP, DCCH); + + //rrc_rlc_data_req(enb_mod_idP,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); + //pdcp_data_req (enb_mod_idP, frameP, 1, (ue_mod_idP * NB_RB_MAX) + DCCH,rrc_eNB_mui++, 0, size, (char *) buffer, 1); + rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, ue_mod_idP, 0, + (RadioResourceConfigCommonSIB_t *) NULL, + eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP], + (MeasObjectToAddMod_t **) NULL, + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP], + 1, + SRB1_logicalChannelConfig, + eNB_rrc_inst[enb_mod_idP].measGapConfig[ue_mod_idP], + (TDD_Config_t *) NULL, + (MobilityControlInfo_t *) mobilityInfo, + (uint8_t *) NULL, (uint16_t *) NULL, NULL, NULL, NULL, (MBSFN_SubframeConfigList_t *) 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 - ); - + ); - /* - handoverCommand.criticalExtensions.present = HandoverCommand__criticalExtensions_PR_c1; - handoverCommand.criticalExtensions.choice.c1.present = HandoverCommand__criticalExtensions__c1_PR_handoverCommand_r8; - handoverCommand.criticalExtensions.choice.c1.choice.handoverCommand_r8.handoverCommandMessage.buf = buffer; - handoverCommand.criticalExtensions.choice.c1.choice.handoverCommand_r8.handoverCommandMessage.size = size; - */ - - if (sourceModId != 0xFF) { - memcpy(eNB_rrc_inst[sourceModId].handover_info[eNB_rrc_inst[Mod_id].handover_info[UE_index]->ueid_s]->buf, - (void *)buffer, - size); - eNB_rrc_inst[sourceModId].handover_info[eNB_rrc_inst[Mod_id].handover_info[UE_index]->ueid_s]->size = size; - eNB_rrc_inst[sourceModId].handover_info[eNB_rrc_inst[Mod_id].handover_info[UE_index]->ueid_s]->ho_complete = 0xF1; - //eNB_rrc_inst[Mod_id].handover_info[UE_index]->ho_complete = 0xFF; - LOG_D(RRC,"[eNB %d] Frame %d: setting handover complete to 0xF1 for (%d,%d) and to 0xFF for (%d,%d)\n", - Mod_id, frameP, - sourceModId,eNB_rrc_inst[Mod_id].handover_info[UE_index]->ueid_s, - Mod_id, UE_index); - } - else - LOG_W(RRC,"[eNB %d] Frame %d: rrc_eNB_generate_RRCConnectionReconfiguration_handover: Could not find source eNB mod_id.\n", - Mod_id, frameP); + /* + handoverCommand.criticalExtensions.present = HandoverCommand__criticalExtensions_PR_c1; + handoverCommand.criticalExtensions.choice.c1.present = HandoverCommand__criticalExtensions__c1_PR_handoverCommand_r8; + handoverCommand.criticalExtensions.choice.c1.choice.handoverCommand_r8.handoverCommandMessage.buf = buffer; + handoverCommand.criticalExtensions.choice.c1.choice.handoverCommand_r8.handoverCommandMessage.size = size; + */ + if (sourceModId != 0xFF) { + memcpy(eNB_rrc_inst[sourceModId].handover_info[eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ueid_s]->buf, + (void *)buffer, size); + eNB_rrc_inst[sourceModId].handover_info[eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ueid_s]->size = size; + eNB_rrc_inst[sourceModId].handover_info[eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ueid_s]->ho_complete = + 0xF1; + //eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ho_complete = 0xFF; + LOG_D(RRC, "[eNB %d] Frame %d: setting handover complete to 0xF1 for (%d,%d) and to 0xFF for (%d,%d)\n", + enb_mod_idP, frameP, sourceModId, eNB_rrc_inst[enb_mod_idP].handover_info[ue_mod_idP]->ueid_s, enb_mod_idP, ue_mod_idP); + } else + LOG_W(RRC, + "[eNB %d] Frame %d: rrc_eNB_generate_RRCConnectionReconfiguration_handover: Could not find source eNB mod_id.\n", + enb_mod_idP, frameP); } /* - void ue_rrc_process_rrcConnectionReconfiguration(uint8_t Mod_id,frame_t frameP, + void ue_rrc_process_rrcConnectionReconfiguration(uint8_t enb_mod_idP,frame_t frameP, RRCConnectionReconfiguration_t *rrcConnectionReconfiguration, uint8_t CH_index) { @@ -2141,10 +2166,9 @@ void rrc_eNB_generate_RRCConnectionReconfiguration_handover (module_id_t Mod_id, if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present == RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) { if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated) { - rrc_ue_process_radioResourceConfigDedicated(Mod_id,frameP,CH_index, + rrc_ue_process_radioResourceConfigDedicated(enb_mod_idP,frameP,CH_index, rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated); - } // check other fields for @@ -2153,236 +2177,202 @@ void rrc_eNB_generate_RRCConnectionReconfiguration_handover (module_id_t Mod_id, */ /*------------------------------------------------------------------------------*/ -void rrc_eNB_process_RRCConnectionReconfigurationComplete (module_id_t Mod_id, frame_t frameP, - uint8_t UE_index, - RRCConnectionReconfigurationComplete_r8_IEs_t *rrcConnectionReconfigurationComplete) -{ - int i; +void rrc_eNB_process_RRCConnectionReconfigurationComplete( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP, + RRCConnectionReconfigurationComplete_r8_IEs_t * rrcConnectionReconfigurationComplete) { + int i; #ifdef NAS_NETLINK - int oip_ifup = 0; - int dest_ip_offset = 0; + int oip_ifup = 0; + int dest_ip_offset = 0; #endif - uint8_t *kRRCenc = NULL; - uint8_t *kRRCint = NULL; - uint8_t *kUPenc = NULL; + uint8_t *kRRCenc = NULL; + uint8_t *kRRCint = NULL; + uint8_t *kUPenc = NULL; - DRB_ToAddModList_t *DRB_configList = eNB_rrc_inst[Mod_id].DRB_configList[UE_index]; - SRB_ToAddModList_t *SRB_configList = eNB_rrc_inst[Mod_id].SRB_configList[UE_index]; + DRB_ToAddModList_t *DRB_configList = eNB_rrc_inst[enb_mod_idP].DRB_configList[ue_mod_idP]; + SRB_ToAddModList_t *SRB_configList = eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP]; #if defined(ENABLE_SECURITY) - /* Derive the keys from kenb */ - if (DRB_configList != NULL) { - derive_key_up_enc(eNB_rrc_inst[Mod_id].ciphering_algorithm[UE_index], - eNB_rrc_inst[Mod_id].kenb[UE_index], &kUPenc); - } + /* Derive the keys from kenb */ + if (DRB_configList != NULL) { + derive_key_up_enc(eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[ue_mod_idP], + eNB_rrc_inst[enb_mod_idP].kenb[ue_mod_idP], &kUPenc); + } - derive_key_rrc_enc(eNB_rrc_inst[Mod_id].ciphering_algorithm[UE_index], - eNB_rrc_inst[Mod_id].kenb[UE_index], &kRRCenc); - derive_key_rrc_int(eNB_rrc_inst[Mod_id].integrity_algorithm[UE_index], - eNB_rrc_inst[Mod_id].kenb[UE_index], &kRRCint); + derive_key_rrc_enc(eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[ue_mod_idP], + eNB_rrc_inst[enb_mod_idP].kenb[ue_mod_idP], &kRRCenc); + derive_key_rrc_int(eNB_rrc_inst[enb_mod_idP].integrity_algorithm[ue_mod_idP], + eNB_rrc_inst[enb_mod_idP].kenb[ue_mod_idP], &kRRCint); #endif #ifdef ENABLE_RAL - { - MessageDef *message_ral_p = NULL; - rrc_ral_connection_reconfiguration_ind_t connection_reconfiguration_ind; - int i; - - message_ral_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_RAL_CONNECTION_RECONFIGURATION_IND); - memset(&connection_reconfiguration_ind, 0, sizeof(rrc_ral_connection_reconfiguration_ind_t)); - connection_reconfiguration_ind.ue_id = Mod_id; - if (DRB_configList != NULL) { - connection_reconfiguration_ind.num_drb = DRB_configList->list.count; - - for (i=0; (ilist.count) && (i < maxDRB); i++) { - connection_reconfiguration_ind.drb_id[i] = DRB_configList->list.array[i]->drb_Identity; - } - } else { - connection_reconfiguration_ind.num_drb = 0; - } - if (SRB_configList != NULL) { - connection_reconfiguration_ind.num_srb = SRB_configList->list.count; - } else { - connection_reconfiguration_ind.num_srb = 0; - } - memcpy (&message_ral_p->ittiMsg, (void *) &connection_reconfiguration_ind, sizeof(rrc_ral_connection_reconfiguration_ind_t)); - //#warning "Mod_id ? for instance ? => YES" - LOG_I(RRC, "Sending RRC_RAL_CONNECTION_RECONFIGURATION_IND to RAL\n"); - itti_send_msg_to_task (TASK_RAL_ENB, Mod_id, message_ral_p); - } - #endif + { + MessageDef *message_ral_p = NULL; + rrc_ral_connection_reconfiguration_ind_t connection_reconfiguration_ind; + int i; - // Refresh SRBs/DRBs - rrc_pdcp_config_asn1_req (Mod_id, UE_index, frameP, 1, - SRB_configList, - DRB_configList, (DRB_ToReleaseList_t *) NULL, - eNB_rrc_inst[Mod_id].ciphering_algorithm[UE_index] | - (eNB_rrc_inst[Mod_id].integrity_algorithm[UE_index] << 4), - kRRCenc, - kRRCint, - kUPenc + message_ral_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_RAL_CONNECTION_RECONFIGURATION_IND); + memset(&connection_reconfiguration_ind, 0, sizeof(rrc_ral_connection_reconfiguration_ind_t)); + connection_reconfiguration_ind.ue_id = ue_mod_idP; + if (DRB_configList != NULL) { + connection_reconfiguration_ind.num_drb = DRB_configList->list.count; + + for (i = 0; (i < DRB_configList->list.count) && (i < maxDRB); i++) { + connection_reconfiguration_ind.drb_id[i] = DRB_configList->list.array[i]->drb_Identity; + } + } else { + connection_reconfiguration_ind.num_drb = 0; + } + if (SRB_configList != NULL) { + connection_reconfiguration_ind.num_srb = SRB_configList->list.count; + } else { + connection_reconfiguration_ind.num_srb = 0; + } + memcpy(&message_ral_p->ittiMsg, (void *)&connection_reconfiguration_ind, + sizeof(rrc_ral_connection_reconfiguration_ind_t)); + LOG_I(RRC, "Sending RRC_RAL_CONNECTION_RECONFIGURATION_IND to RAL\n"); + itti_send_msg_to_task(TASK_RAL_ENB, enb_mod_idP, message_ral_p); + } +#endif + + // Refresh SRBs/DRBs + rrc_pdcp_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, 1, + SRB_configList, + DRB_configList, (DRB_ToReleaseList_t *) NULL, + eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[ue_mod_idP] | + (eNB_rrc_inst[enb_mod_idP].integrity_algorithm[ue_mod_idP] << 4), kRRCenc, kRRCint, kUPenc +#ifdef Rel10 + , (PMCH_InfoList_r9_t *) NULL +#endif + ); + // Refresh SRBs/DRBs + rrc_rlc_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, 1, SRB_configList, DRB_configList, (DRB_ToReleaseList_t *) NULL #ifdef Rel10 , (PMCH_InfoList_r9_t *) NULL #endif - ); - // Refresh SRBs/DRBs - rrc_rlc_config_asn1_req (Mod_id, UE_index, frameP, 1, - SRB_configList, - DRB_configList, (DRB_ToReleaseList_t *) NULL -#ifdef Rel10 - , (PMCH_InfoList_r9_t *) NULL -#endif - ); + ); + // Loop through DRBs and establish if necessary - // Loop through DRBs and establish if necessary + if (DRB_configList != NULL) { + for (i = 0; i < DRB_configList->list.count; i++) { // num max DRB (11-3-8) + if (DRB_configList->list.array[i]) { + LOG_I(RRC, + "[eNB %d] Frame %d : Logical Channel UL-DCCH, Received RRCConnectionReconfigurationComplete from UE %d, reconfiguring DRB %d/LCID %d\n", + enb_mod_idP, frameP, ue_mod_idP, + (int)DRB_configList->list.array[i]->drb_Identity, + (ue_mod_idP * NB_RB_MAX) + (int)*DRB_configList->list.array[i]->logicalChannelIdentity); + if (eNB_rrc_inst[enb_mod_idP].DRB_active[ue_mod_idP][i] == 0) { + /* + rrc_pdcp_config_req (enb_mod_idP, frameP, 1, CONFIG_ACTION_ADD, + (ue_mod_idP * NB_RB_MAX) + *DRB_configList->list.array[i]->logicalChannelIdentity,UNDEF_SECURITY_MODE); + rrc_rlc_config_req(enb_mod_idP,frameP,1,CONFIG_ACTION_ADD, + (ue_mod_idP * NB_RB_MAX) + (int)*eNB_rrc_inst[enb_mod_idP].DRB_config[ue_mod_idP][i]->logicalChannelIdentity, + RADIO_ACCESS_BEARER,Rlc_info_um); + */ + eNB_rrc_inst[enb_mod_idP].DRB_active[ue_mod_idP][i] = 1; - if (DRB_configList != NULL) - { - for (i = 0; i < DRB_configList->list.count; i++) - { // num max DRB (11-3-8) - if (DRB_configList->list.array[i]) - { - LOG_I (RRC, - "[eNB %d] Frame %d : Logical Channel UL-DCCH, Received RRCConnectionReconfigurationComplete from UE %d, reconfiguring DRB %d/LCID %d\n", - Mod_id, frameP, UE_index, - (int) DRB_configList->list.array[i]->drb_Identity, - (UE_index * NB_RB_MAX) + - (int) *DRB_configList->list.array[i]-> - logicalChannelIdentity); - if (eNB_rrc_inst[Mod_id].DRB_active[UE_index][i] == 0) - { - /* - rrc_pdcp_config_req (Mod_id, frameP, 1, CONFIG_ACTION_ADD, - (UE_index * NB_RB_MAX) + *DRB_configList->list.array[i]->logicalChannelIdentity,UNDEF_SECURITY_MODE); - rrc_rlc_config_req(Mod_id,frameP,1,CONFIG_ACTION_ADD, - (UE_index * NB_RB_MAX) + (int)*eNB_rrc_inst[Mod_id].DRB_config[UE_index][i]->logicalChannelIdentity, - RADIO_ACCESS_BEARER,Rlc_info_um); - */ - eNB_rrc_inst[Mod_id].DRB_active[UE_index][i] = 1; - - LOG_D (RRC, - "[eNB %d] Frame %d: Establish RLC UM Bidirectional, DRB %d Active\n", - Mod_id, frameP, - (int) DRB_configList->list.array[i]->drb_Identity); + LOG_D(RRC, + "[eNB %d] Frame %d: Establish RLC UM Bidirectional, DRB %d Active\n", + enb_mod_idP, frameP, (int)DRB_configList->list.array[i]->drb_Identity); #ifdef NAS_NETLINK - // can mean also IPV6 since ether -> ipv6 autoconf -#if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) - LOG_I (OIP, - "[eNB %d] trying to bring up the OAI interface oai%d\n", - Mod_id, Mod_id); - oip_ifup = nas_config (Mod_id, // interface index - Mod_id + 1, // thrid octet - Mod_id + 1); // fourth octet + // can mean also IPV6 since ether -> ipv6 autoconf +# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) + LOG_I(OIP, "[eNB %d] trying to bring up the OAI interface oai%d\n", enb_mod_idP, enb_mod_idP); + oip_ifup = nas_config(enb_mod_idP, // interface index + enb_mod_idP + 1, // thrid octet + enb_mod_idP + 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; - dest_ip_offset = NB_eNB_INST; -#else - dest_ip_offset = 8; -#endif - LOG_I (OIP, - "[eNB %d] Config the oai%d to send/receive pkt on DRB %d to/from the protocol stack\n", - Mod_id, Mod_id, - (UE_index * NB_RB_MAX) + - *DRB_configList->list.array[i]-> - logicalChannelIdentity); - rb_conf_ipv4 (0, //add - UE_index, //cx - Mod_id, //inst - (UE_index * NB_RB_MAX) + *DRB_configList->list.array[i]->logicalChannelIdentity, 0, //dscp - ipv4_address (Mod_id + 1, Mod_id + 1), //saddr - ipv4_address (Mod_id + 1, dest_ip_offset + UE_index + 1)); //daddr + if (oip_ifup == 0) { // interface is up --> send a config the DRB +# ifdef OAI_EMU + oai_emulation.info.oai_ifup[enb_mod_idP] = 1; + dest_ip_offset = NB_eNB_INST; +# else + dest_ip_offset = 8; +# endif + LOG_I(OIP, + "[eNB %d] Config the oai%d to send/receive pkt on DRB %d to/from the protocol stack\n", + enb_mod_idP, enb_mod_idP, + (ue_mod_idP * NB_RB_MAX) + *DRB_configList->list.array[i]->logicalChannelIdentity); + rb_conf_ipv4(0, //add + ue_mod_idP, //cx + enb_mod_idP, //inst + (ue_mod_idP * NB_RB_MAX) + *DRB_configList->list.array[i]->logicalChannelIdentity, 0, //dscp + ipv4_address(enb_mod_idP + 1, enb_mod_idP + 1), //saddr + ipv4_address(enb_mod_idP + 1, dest_ip_offset + ue_mod_idP + 1)); //daddr - LOG_D (RRC, "[eNB %d] State = Attached (UE %d)\n", - Mod_id, UE_index); + LOG_D(RRC, "[eNB %d] State = Attached (UE %d)\n", enb_mod_idP, ue_mod_idP); } -#else -#ifdef OAI_EMU - oai_emulation.info.oai_ifup[Mod_id] = 1; -#endif -#endif +# else +# ifdef OAI_EMU + oai_emulation.info.oai_ifup[enb_mod_idP] = 1; +# endif +# endif #endif - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (DRB UE %d) --->][MAC_eNB][MOD %02d][]\n", - frameP, Mod_id, UE_index, Mod_id); - if (DRB_configList->list.array[i]->logicalChannelIdentity) - DRB2LCHAN[i] = - (uint8_t) * - DRB_configList->list.array[i]->logicalChannelIdentity; - rrc_mac_config_req (Mod_id, 1, UE_index, 0, - (RadioResourceConfigCommonSIB_t *) NULL, - eNB_rrc_inst[Mod_id].physicalConfigDedicated[UE_index], - (MeasObjectToAddMod_t **) NULL, - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index], - DRB2LCHAN[i], - DRB_configList->list.array[i]->logicalChannelConfig, - eNB_rrc_inst[Mod_id].measGapConfig[UE_index], - (TDD_Config_t *) NULL, - NULL, - (uint8_t *) NULL, - (uint16_t *) NULL, NULL, NULL, NULL, - (MBSFN_SubframeConfigList_t *) NULL + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (DRB UE %d) --->][MAC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, ue_mod_idP, enb_mod_idP); + if (DRB_configList->list.array[i]->logicalChannelIdentity) + DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity; + rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, ue_mod_idP, 0, + (RadioResourceConfigCommonSIB_t *) NULL, + eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP], + (MeasObjectToAddMod_t **) NULL, + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP], + DRB2LCHAN[i], + DRB_configList->list.array[i]->logicalChannelConfig, + eNB_rrc_inst[enb_mod_idP].measGapConfig[ue_mod_idP], + (TDD_Config_t *) NULL, + NULL, + (uint8_t *) NULL, + (uint16_t *) NULL, NULL, NULL, NULL, (MBSFN_SubframeConfigList_t *) 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 - , - eNB_rrc_inst[Mod_id]. - num_active_cba_groups, - eNB_rrc_inst[Mod_id].cba_rnti[0] + , eNB_rrc_inst[enb_mod_idP].num_active_cba_groups, eNB_rrc_inst[enb_mod_idP].cba_rnti[0] #endif - ); + ); - } - else - { // remove LCHAN from MAC/PHY + } else { // remove LCHAN from MAC/PHY - if (eNB_rrc_inst[Mod_id].DRB_active[UE_index][i] == 1) - { - // DRB has just been removed so remove RLC + PDCP for DRB - /* rrc_pdcp_config_req (Mod_id, frameP, 1, CONFIG_ACTION_REMOVE, - (UE_index * NB_RB_MAX) + DRB2LCHAN[i],UNDEF_SECURITY_MODE); - */ - rrc_rlc_config_req (Mod_id, UE_index, frameP, 1, CONFIG_ACTION_REMOVE, - DRB2LCHAN[i], - RADIO_ACCESS_BEARER, - Rlc_info_um); + if (eNB_rrc_inst[enb_mod_idP].DRB_active[ue_mod_idP][i] == 1) { + // DRB has just been removed so remove RLC + PDCP for DRB + /* rrc_pdcp_config_req (enb_mod_idP, frameP, 1, CONFIG_ACTION_REMOVE, + (ue_mod_idP * NB_RB_MAX) + DRB2LCHAN[i],UNDEF_SECURITY_MODE); + */ + rrc_rlc_config_req(enb_mod_idP, ue_mod_idP, frameP, 1, CONFIG_ACTION_REMOVE, + DRB2LCHAN[i], RADIO_ACCESS_BEARER, Rlc_info_um); } - eNB_rrc_inst[Mod_id].DRB_active[UE_index][i] = 0; - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (DRB UE %d) --->][MAC_eNB][MOD %02d][]\n", - frameP, Mod_id, UE_index, Mod_id); + eNB_rrc_inst[enb_mod_idP].DRB_active[ue_mod_idP][i] = 0; + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (DRB UE %d) --->][MAC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, ue_mod_idP, enb_mod_idP); - rrc_mac_config_req (Mod_id, 1, UE_index, 0, - (RadioResourceConfigCommonSIB_t *) NULL, - eNB_rrc_inst[Mod_id].physicalConfigDedicated[UE_index], - (MeasObjectToAddMod_t **) NULL, - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index], - DRB2LCHAN[i], - (LogicalChannelConfig_t *) NULL, - (MeasGapConfig_t *) NULL, - (TDD_Config_t *) NULL, - NULL, - (uint8_t *) NULL, - (uint16_t *) NULL, NULL, NULL, NULL, NULL + rrc_mac_config_req(enb_mod_idP, + ENB_FLAG_YES, + ue_mod_idP, + 0, + (RadioResourceConfigCommonSIB_t *) NULL, + eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP], + (MeasObjectToAddMod_t **) NULL, + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP], + DRB2LCHAN[i], + (LogicalChannelConfig_t *) NULL, + (MeasGapConfig_t *) NULL, + (TDD_Config_t *) NULL, + NULL, (uint8_t *) NULL, (uint16_t *) 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 - ); + ); } } } @@ -2390,814 +2380,746 @@ void rrc_eNB_process_RRCConnectionReconfigurationComplete (module_id_t Mod_id, f } /*------------------------------------------------------------------------------*/ -void rrc_eNB_generate_RRCConnectionSetup (module_id_t Mod_id, frame_t frameP, uint16_t UE_index) { +void rrc_eNB_generate_RRCConnectionSetup( + module_id_t enb_mod_idP, + frame_t frameP, + module_id_t ue_mod_idP) { - LogicalChannelConfig_t *SRB1_logicalChannelConfig; //,*SRB2_logicalChannelConfig; - SRB_ToAddModList_t **SRB_configList; - SRB_ToAddMod_t *SRB1_config; - int cnt; + LogicalChannelConfig_t *SRB1_logicalChannelConfig; //,*SRB2_logicalChannelConfig; + SRB_ToAddModList_t **SRB_configList; + SRB_ToAddMod_t *SRB1_config; + int cnt; - AssertFatal(UE_index < NUMBER_OF_UE_MAX, "UE index invalid (%d/%d) for eNB %d!", UE_index, NUMBER_OF_UE_MAX, Mod_id); + AssertFatal(ue_mod_idP < NUMBER_OF_UE_MAX, "UE index invalid (%d/%d) for eNB %d!", ue_mod_idP, NUMBER_OF_UE_MAX, + enb_mod_idP); - SRB_configList = &eNB_rrc_inst[Mod_id].SRB_configList[UE_index]; + SRB_configList = &eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_idP]; - eNB_rrc_inst[Mod_id].Srb0.Tx_buffer.payload_size = - do_RRCConnectionSetup (Mod_id, - (uint8_t *) eNB_rrc_inst[Mod_id].Srb0.Tx_buffer.Payload, - mac_xface->get_transmission_mode (Mod_id, - find_UE_RNTI - (Mod_id, - UE_index)), - UE_index, - rrc_eNB_get_next_transaction_identifier(Mod_id), - mac_xface->lte_frame_parms, - SRB_configList, - &eNB_rrc_inst[Mod_id]. - physicalConfigDedicated[UE_index]); + eNB_rrc_inst[enb_mod_idP].Srb0.Tx_buffer.payload_size = + do_RRCConnectionSetup(enb_mod_idP, + (uint8_t *) eNB_rrc_inst[enb_mod_idP].Srb0.Tx_buffer.Payload, + mac_xface->get_transmission_mode(enb_mod_idP, + find_UE_RNTI + (enb_mod_idP, + ue_mod_idP)), + ue_mod_idP, + rrc_eNB_get_next_transaction_identifier(enb_mod_idP), + mac_xface->lte_frame_parms, + SRB_configList, &eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP]); - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE + // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - if (*SRB_configList != NULL) - { - for (cnt = 0; cnt < (*SRB_configList)->list.count; cnt++) - { - if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) - { - SRB1_config = (*SRB_configList)->list.array[cnt]; - if (SRB1_config->logicalChannelConfig) - { - if (SRB1_config->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) - { - SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue; + if (*SRB_configList != NULL) { + for (cnt = 0; cnt < (*SRB_configList)->list.count; cnt++) { + if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) { + SRB1_config = (*SRB_configList)->list.array[cnt]; + if (SRB1_config->logicalChannelConfig) { + if (SRB1_config->logicalChannelConfig->present == + SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { + SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue; + } else { + SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; } - else - { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - } - else - { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; + } else { + SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; } - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %d) --->][MAC_eNB][MOD %02d][]\n", - frameP, Mod_id, UE_index, Mod_id); - rrc_mac_config_req (Mod_id, 1, UE_index, 0, - (RadioResourceConfigCommonSIB_t *) NULL, - eNB_rrc_inst[Mod_id].physicalConfigDedicated[UE_index], - (MeasObjectToAddMod_t **) NULL, - eNB_rrc_inst[Mod_id].mac_MainConfig[UE_index], - 1, - SRB1_logicalChannelConfig, - eNB_rrc_inst[Mod_id].measGapConfig[UE_index], - (TDD_Config_t *) NULL, - NULL, - (uint8_t *) NULL, - (uint16_t *) NULL, NULL, NULL, NULL, - (MBSFN_SubframeConfigList_t *) NULL + LOG_D(RRC, + "[FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %d) --->][MAC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, ue_mod_idP, enb_mod_idP); + rrc_mac_config_req(enb_mod_idP, ENB_FLAG_YES, ue_mod_idP, 0, + (RadioResourceConfigCommonSIB_t *) NULL, + eNB_rrc_inst[enb_mod_idP].physicalConfigDedicated[ue_mod_idP], + (MeasObjectToAddMod_t **) NULL, + eNB_rrc_inst[enb_mod_idP].mac_MainConfig[ue_mod_idP], + 1, + SRB1_logicalChannelConfig, + eNB_rrc_inst[enb_mod_idP].measGapConfig[ue_mod_idP], + (TDD_Config_t *) NULL, + NULL, + (uint8_t *) NULL, + (uint16_t *) NULL, NULL, NULL, NULL, (MBSFN_SubframeConfigList_t *) 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 - ); - break; + ); + break; } } } - LOG_I (RRC, - "[eNB %d][RAPROC] Frame %d : Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d, UE %d)\n", - Mod_id, frameP, eNB_rrc_inst[Mod_id].Srb0.Tx_buffer.payload_size, - UE_index); + LOG_I(RRC, + "[eNB %d][RAPROC] Frame %d : Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d, UE %d)\n", + enb_mod_idP, frameP, eNB_rrc_inst[enb_mod_idP].Srb0.Tx_buffer.payload_size, ue_mod_idP); } /*------------------------------------------------------------------------------*/ #if defined(ENABLE_ITTI) -char openair_rrc_lite_eNB_init (module_id_t Mod_id) -{ +char openair_rrc_lite_eNB_init( + module_id_t enb_mod_idP) { /* Dummy function, initialization will be done through ITTI messaging */ return 0; } -char openair_rrc_lite_eNB_configuration (uint8_t Mod_id, RrcConfigurationReq *configuration) +char openair_rrc_lite_eNB_configuration( + uint8_t enb_mod_idP, + RrcConfigurationReq * configuration) #else -char openair_rrc_lite_eNB_init (module_id_t Mod_id) +char openair_rrc_lite_eNB_init( + module_id_t enb_mod_idP) #endif { /*-----------------------------------------------------------------------------*/ - unsigned char j; - LOG_I (RRC, "[eNB %d] Init (UE State = RRC_IDLE)...\n", Mod_id); - LOG_D (RRC, "[MSC_NEW][FRAME 00000][RRC_eNB][MOD %02d][]\n", Mod_id); - LOG_D (RRC, "[MSC_NEW][FRAME 00000][IP][MOD %02d][]\n", Mod_id); + module_id_t j; + LOG_I(RRC, "[eNB %d] Init (UE State = RRC_IDLE)...\n", enb_mod_idP); - AssertFatal(eNB_rrc_inst != NULL, "eNB_rrc_inst not initialized!"); + AssertFatal(eNB_rrc_inst != NULL, "eNB_rrc_inst not initialized!"); + AssertFatal(NUMBER_OF_UE_MAX < (module_id_t)0xFFFFFFFFFFFFFFFF, " variable overflow"); - for (j = 0; j < NUMBER_OF_UE_MAX; j++) - eNB_rrc_inst[Mod_id].Info.UE[j].Status = RRC_IDLE; //CH_READY; + for (j = 0; j < NUMBER_OF_UE_MAX; j++) + eNB_rrc_inst[enb_mod_idP].Info.UE[j].Status = RRC_IDLE; //CH_READY; #if defined(ENABLE_USE_MME) - /* Connect eNB to MME */ - if (EPC_MODE_ENABLED <= 0) + /* Connect eNB to MME */ + if (EPC_MODE_ENABLED <= 0) #endif { - /* Init security parameters */ - for (j = 0; j < NUMBER_OF_UE_MAX; j++) { - eNB_rrc_inst[Mod_id].ciphering_algorithm[j] = SecurityAlgorithmConfig__cipheringAlgorithm_eea2; - eNB_rrc_inst[Mod_id].integrity_algorithm[j] = SecurityAlgorithmConfig__integrityProtAlgorithm_eia2; - rrc_lite_eNB_init_security(Mod_id, j); - } + /* Init security parameters */ + for (j = 0; j < NUMBER_OF_UE_MAX; j++) { + eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[j] = SecurityAlgorithmConfig__cipheringAlgorithm_eea2; + eNB_rrc_inst[enb_mod_idP].integrity_algorithm[j] = SecurityAlgorithmConfig__integrityProtAlgorithm_eia2; + rrc_lite_eNB_init_security(enb_mod_idP, j); + } } - eNB_rrc_inst[Mod_id].Info.Nb_ue = 0; + eNB_rrc_inst[enb_mod_idP].Info.Nb_ue = 0; - eNB_rrc_inst[Mod_id].Srb0.Active = 0; + eNB_rrc_inst[enb_mod_idP].Srb0.Active = 0; - for (j = 0; j < (NUMBER_OF_UE_MAX + 1); j++) - { - eNB_rrc_inst[Mod_id].Srb2[j].Active = 0; + for (j = 0; j < (NUMBER_OF_UE_MAX + 1); j++) { + eNB_rrc_inst[enb_mod_idP].Srb2[j].Active = 0; } + /// System Information INIT - /// System Information INIT - - - LOG_I (RRC, "[eNB %d] Checking release \n", Mod_id); + LOG_I(RRC, "[eNB %d] Checking release \n", enb_mod_idP); #ifdef Rel10 - // This has to come from some top-level configuration - LOG_I (RRC, "[eNB %d] Rel10 RRC detected, MBMS flag %d\n", Mod_id, eNB_rrc_inst[Mod_id].MBMS_flag); + // This has to come from some top-level configuration + LOG_I(RRC, "[eNB %d] Rel10 RRC detected, MBMS flag %d\n", enb_mod_idP, eNB_rrc_inst[enb_mod_idP].MBMS_flag); #else - LOG_I (RRC, "[eNB %d] Rel8 RRC\n", Mod_id); + LOG_I(RRC, "[eNB %d] Rel8 RRC\n", enb_mod_idP); #endif #ifdef CBA - for (j = 0; j < NUM_MAX_CBA_GROUP; j++) - eNB_rrc_inst[Mod_id].cba_rnti[j] = CBA_OFFSET + j; + for (j = 0; j < NUM_MAX_CBA_GROUP; j++) + eNB_rrc_inst[enb_mod_idP].cba_rnti[j] = CBA_OFFSET + j; - if (eNB_rrc_inst[Mod_id].num_active_cba_groups > NUM_MAX_CBA_GROUP) - eNB_rrc_inst[Mod_id].num_active_cba_groups = NUM_MAX_CBA_GROUP; + if (eNB_rrc_inst[enb_mod_idP].num_active_cba_groups > NUM_MAX_CBA_GROUP) + eNB_rrc_inst[enb_mod_idP].num_active_cba_groups = NUM_MAX_CBA_GROUP; - LOG_D (RRC, "[eNB %d] Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n", - Mod_id, eNB_rrc_inst[Mod_id].cba_rnti[0], - eNB_rrc_inst[Mod_id].cba_rnti[1], eNB_rrc_inst[Mod_id].cba_rnti[2], - eNB_rrc_inst[Mod_id].cba_rnti[3], - eNB_rrc_inst[Mod_id].num_active_cba_groups); + LOG_D(RRC, "[eNB %d] Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n", + enb_mod_idP, eNB_rrc_inst[enb_mod_idP].cba_rnti[0], + eNB_rrc_inst[enb_mod_idP].cba_rnti[1], eNB_rrc_inst[enb_mod_idP].cba_rnti[2], + eNB_rrc_inst[enb_mod_idP].cba_rnti[3], eNB_rrc_inst[enb_mod_idP].num_active_cba_groups); #endif - init_SI (Mod_id + init_SI(enb_mod_idP #if defined(ENABLE_ITTI) - , configuration + , configuration #endif - ); + ); #ifdef Rel10 - switch (eNB_rrc_inst[Mod_id].MBMS_flag) { - case 1: - case 2: - case 3: - LOG_I(RRC,"[eNB %d] Configuring 1 MBSFN sync area\n", Mod_id); - eNB_rrc_inst[Mod_id].num_mbsfn_sync_area=1; - break; - case 4: - LOG_I(RRC,"[eNB %d] Configuring 2 MBSFN sync area\n", Mod_id); - eNB_rrc_inst[Mod_id].num_mbsfn_sync_area=2; - break; - default: - eNB_rrc_inst[Mod_id].num_mbsfn_sync_area=0; - break; - } - // if we are here the eNB_rrc_inst[Mod_id].MBMS_flag > 0, - /// MCCH INIT - if (eNB_rrc_inst[Mod_id].MBMS_flag > 0 ) { - init_MCCH (Mod_id); - /// MTCH data bearer init - init_MBMS (Mod_id, 0); - } - + switch (eNB_rrc_inst[enb_mod_idP].MBMS_flag) { + case 1: + case 2: + case 3: + LOG_I(RRC, "[eNB %d] Configuring 1 MBSFN sync area\n", enb_mod_idP); + eNB_rrc_inst[enb_mod_idP].num_mbsfn_sync_area = 1; + break; + case 4: + LOG_I(RRC, "[eNB %d] Configuring 2 MBSFN sync area\n", enb_mod_idP); + eNB_rrc_inst[enb_mod_idP].num_mbsfn_sync_area = 2; + break; + default: + eNB_rrc_inst[enb_mod_idP].num_mbsfn_sync_area = 0; + break; + } + // if we are here the eNB_rrc_inst[enb_mod_idP].MBMS_flag > 0, + /// MCCH INIT + if (eNB_rrc_inst[enb_mod_idP].MBMS_flag > 0) { + init_MCCH(enb_mod_idP); + /// MTCH data bearer init + init_MBMS(enb_mod_idP, 0); + } #endif #ifdef NO_RRM //init ch SRB0, SRB1 & BDTCH - openair_rrc_on (Mod_id, 1); + openair_rrc_on(enb_mod_idP, 1); #else - eNB_rrc_inst[Mod_id].Last_scan_req = 0; - send_msg (&S_rrc, - msg_rrc_phy_synch_to_MR_ind (Mod_id, - eNB_rrc_inst[Mod_id].Mac_id)); + eNB_rrc_inst[enb_mod_idP].Last_scan_req = 0; + send_msg(&S_rrc, msg_rrc_phy_synch_to_MR_ind(enb_mod_idP, eNB_rrc_inst[enb_mod_idP].Mac_id)); #endif - return 0; + return 0; } /*------------------------------------------------------------------------------*/ -int rrc_eNB_decode_ccch (module_id_t Mod_id, frame_t frameP, SRB_INFO * Srb_info) -{ +int rrc_eNB_decode_ccch( + module_id_t enb_mod_idP, + frame_t frameP, + SRB_INFO * Srb_info) { /*------------------------------------------------------------------------------*/ - uint16_t Idx, UE_index; - asn_dec_rval_t dec_rval; - UL_CCCH_Message_t *ul_ccch_msg = NULL; - RRCConnectionRequest_r8_IEs_t *rrcConnectionRequest; - int i, rval; + module_id_t Idx, ue_mod_id; + asn_dec_rval_t dec_rval; + UL_CCCH_Message_t *ul_ccch_msg = NULL; + RRCConnectionRequest_r8_IEs_t *rrcConnectionRequest; + int i, rval; + //memset(ul_ccch_msg,0,sizeof(UL_CCCH_Message_t)); - //memset(ul_ccch_msg,0,sizeof(UL_CCCH_Message_t)); - - LOG_T (RRC, "[eNB %d] Frame %d: Decoding UL CCCH %x.%x.%x.%x.%x.%x (%p)\n", - Mod_id, frameP, ((uint8_t *) Srb_info->Rx_buffer.Payload)[0], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[1], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[2], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[3], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[4], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[5], - (uint8_t *) Srb_info->Rx_buffer.Payload); - dec_rval = - uper_decode (NULL, &asn_DEF_UL_CCCH_Message, (void **) &ul_ccch_msg, - (uint8_t *) Srb_info->Rx_buffer.Payload, 100, 0, 0); + LOG_T(RRC, "[eNB %d] Frame %d: Decoding UL CCCH %x.%x.%x.%x.%x.%x (%p)\n", + enb_mod_idP, frameP, ((uint8_t *) Srb_info->Rx_buffer.Payload)[0], + ((uint8_t *) Srb_info->Rx_buffer.Payload)[1], + ((uint8_t *) Srb_info->Rx_buffer.Payload)[2], + ((uint8_t *) Srb_info->Rx_buffer.Payload)[3], + ((uint8_t *) Srb_info->Rx_buffer.Payload)[4], + ((uint8_t *) Srb_info->Rx_buffer.Payload)[5], (uint8_t *) Srb_info->Rx_buffer.Payload); + dec_rval = + uper_decode(NULL, &asn_DEF_UL_CCCH_Message, (void **)&ul_ccch_msg, + (uint8_t *) Srb_info->Rx_buffer.Payload, 100, 0, 0); #if defined(ENABLE_ITTI) -# if defined(DISABLE_ITTI_XER_PRINT) - { - MessageDef *message_p; - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_UL_CCCH_MESSAGE); - memcpy (&message_p->ittiMsg, (void *) ul_ccch_msg, sizeof(RrcUlCcchMessage)); - - itti_send_msg_to_task (TASK_UNKNOWN, Mod_id, message_p); - } -# else - { - char message_string[10000]; - size_t message_string_size; - - if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_CCCH_Message, (void *)ul_ccch_msg)) > 0) +# if defined(DISABLE_ITTI_XER_PRINT) { - MessageDef *msg_p; + MessageDef *message_p; - msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_UL_CCCH, message_string_size + sizeof (IttiMsgText)); - msg_p->ittiMsg.rrc_ul_ccch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_ul_ccch.text, message_string, message_string_size); + message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_CCCH_MESSAGE); + memcpy(&message_p->ittiMsg, (void *)ul_ccch_msg, sizeof(RrcUlCcchMessage)); - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, enb_mod_idP, message_p); } - } -# endif +# else + { + char message_string[10000]; + size_t message_string_size; + + if ((message_string_size = + xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_CCCH_Message, (void *)ul_ccch_msg)) > 0) { + MessageDef *msg_p; + + msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_CCCH, message_string_size + sizeof(IttiMsgText)); + msg_p->ittiMsg.rrc_ul_ccch.size = message_string_size; + memcpy(&msg_p->ittiMsg.rrc_ul_ccch.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, enb_mod_idP, msg_p); + } + } +# endif #endif -for (i = 0; i < 8; i++) - LOG_T (RRC, "%x.", ((uint8_t *) & ul_ccch_msg)[i]); - if (dec_rval.consumed == 0) - { - LOG_E (RRC, "[eNB %d] FATAL Error in receiving CCCH\n", Mod_id); - return -1; + for (i = 0; i < 8; i++) + LOG_T(RRC, "%x.", ((uint8_t *) & ul_ccch_msg)[i]); + if (dec_rval.consumed == 0) { + LOG_E(RRC, "[eNB %d] FATAL Error in receiving CCCH\n", enb_mod_idP); + return -1; } - if (ul_ccch_msg->message.present == UL_CCCH_MessageType_PR_c1) - { + if (ul_ccch_msg->message.present == UL_CCCH_MessageType_PR_c1) { - switch (ul_ccch_msg->message.choice.c1.present) - { + switch (ul_ccch_msg->message.choice.c1.present) { - case UL_CCCH_MessageType__c1_PR_NOTHING: - LOG_I (RRC, "[eNB %d] Frame %d : Received PR_NOTHING on UL-CCCH-Message\n", - Mod_id, frameP); - break; + case UL_CCCH_MessageType__c1_PR_NOTHING: + LOG_I(RRC, "[eNB %d] Frame %d : Received PR_NOTHING on UL-CCCH-Message\n", enb_mod_idP, frameP); + break; - case UL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentRequest: - LOG_D (RRC, "[MSC_MSG][FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, Mod_id); - LOG_I (RRC, "[eNB %d] Frame %d : RRCConnectionReestablishmentRequest not supported yet\n", - Mod_id, frameP); - break; + case UL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentRequest: + LOG_D(RRC, + "[FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, enb_mod_idP); + LOG_I(RRC, "[eNB %d] Frame %d : RRCConnectionReestablishmentRequest not supported yet\n", enb_mod_idP, + frameP); + break; - case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest: - LOG_D (RRC, "[MSC_MSG][FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, Mod_id); + case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest: + LOG_D(RRC, + "[FRAME %05d][MAC_eNB][MOD %02d][][--- MAC_DATA_IND (rrcConnectionRequest on SRB0) -->][RRC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, enb_mod_idP); - rrcConnectionRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.choice.rrcConnectionRequest_r8; - { - uint64_t random_value = 0; + rrcConnectionRequest = + &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions. + choice.rrcConnectionRequest_r8; + { + uint64_t random_value = 0; - memcpy(((uint8_t*)&random_value) + 3, rrcConnectionRequest->ue_Identity.choice.randomValue.buf, rrcConnectionRequest->ue_Identity.choice.randomValue.size); - UE_index = rrc_eNB_get_next_free_UE_index (Mod_id, random_value); - } + memcpy(((uint8_t *) & random_value) + 3, rrcConnectionRequest->ue_Identity.choice.randomValue.buf, + rrcConnectionRequest->ue_Identity.choice.randomValue.size); + ue_mod_id = rrc_eNB_get_next_free_UE_index(enb_mod_idP, random_value); + } - if (UE_index != UE_INDEX_INVALID) - { + if (ue_mod_id != UE_MODULE_INVALID) { #if defined(ENABLE_ITTI) - /* Check s-TMSI presence in message */ - eNB_rrc_inst[Mod_id].Info.UE[UE_index].Initialue_identity_s_TMSI.presence = - (rrcConnectionRequest->ue_Identity.present == InitialUE_Identity_PR_s_TMSI); - if (eNB_rrc_inst[Mod_id].Info.UE[UE_index].Initialue_identity_s_TMSI.presence) { - /* Save s-TMSI */ - S_TMSI_t s_TMSI = rrcConnectionRequest->ue_Identity.choice.s_TMSI; + /* Check s-TMSI presence in message */ + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_id].Initialue_identity_s_TMSI.presence = + (rrcConnectionRequest->ue_Identity.present == InitialUE_Identity_PR_s_TMSI); + if (eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_id].Initialue_identity_s_TMSI.presence) { + /* Save s-TMSI */ + S_TMSI_t s_TMSI = rrcConnectionRequest->ue_Identity.choice.s_TMSI; - eNB_rrc_inst[Mod_id].Info.UE[UE_index].Initialue_identity_s_TMSI.mme_code = BIT_STRING_to_uint8 (&s_TMSI.mmec); - eNB_rrc_inst[Mod_id].Info.UE[UE_index].Initialue_identity_s_TMSI.m_tmsi = BIT_STRING_to_uint32 (&s_TMSI.m_TMSI); - } - eNB_rrc_inst[Mod_id].Info.UE[UE_index].establishment_cause = rrcConnectionRequest->establishmentCause; + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_id].Initialue_identity_s_TMSI.mme_code = + BIT_STRING_to_uint8(&s_TMSI.mmec); + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_id].Initialue_identity_s_TMSI.m_tmsi = + BIT_STRING_to_uint32(&s_TMSI.m_TMSI); + } + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_id].establishment_cause = + rrcConnectionRequest->establishmentCause; #endif - // memcpy(&Rrc_xface->UE_id[Mod_id][UE_index],(uint8_t *)rrcConnectionRequest->ue_Identity.choice.randomValue.buf,5); - memcpy (&eNB_rrc_inst[Mod_id].Info.UE_list[UE_index], - (uint8_t *) rrcConnectionRequest->ue_Identity.choice.randomValue.buf, 5); + // memcpy(&Rrc_xface->UE_id[enb_mod_idP][ue_mod_idP],(uint8_t *)rrcConnectionRequest->ue_Identity.choice.randomValue.buf,5); + memcpy(&eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_id], + (uint8_t *) rrcConnectionRequest->ue_Identity.choice.randomValue.buf, 5); - LOG_I (RRC, "[eNB %d] Frame %d : Accept new connection from UE %d (0x%" PRIx64 ")\n", - Mod_id, frameP, UE_index, - eNB_rrc_inst[Mod_id].Info.UE_list[UE_index]); + LOG_I(RRC, "[eNB %d] Frame %d : Accept new connection from UE %d (0x%" PRIx64 ")\n", + enb_mod_idP, frameP, ue_mod_id, eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_id]); - //CONFIG SRB2 (DCCHs, ONE per User) //meas && lchan Cfg - //eNB_rrc_inst[Mod_id].Info.Dtch_bd_config[UE_index].Status=NEED_RADIO_CONFIG; - //eNB_rrc_inst[Mod_id].Info.Dtch_bd_config[UE_index].Next_eNBeck_frame=Rrc_xface->Frame_index+1; - eNB_rrc_inst[Mod_id].Info.Nb_ue++; + //CONFIG SRB2 (DCCHs, ONE per User) //meas && lchan Cfg + //eNB_rrc_inst[enb_mod_idP].Info.Dtch_bd_config[ue_mod_idP].Status=NEED_RADIO_CONFIG; + //eNB_rrc_inst[enb_mod_idP].Info.Dtch_bd_config[ue_mod_idP].Next_eNBeck_frame=Rrc_xface->Frame_index+1; + eNB_rrc_inst[ue_mod_id].Info.Nb_ue++; #ifndef NO_RRM - send_msg (&S_rrc, msg_rrc_MR_attach_ind (Mod_id, Mac_id)); + send_msg(&S_rrc, msg_rrc_MR_attach_ind(enb_mod_idP, Mac_id)); #else - //LG COMMENT Idx = (UE_index * NB_RB_MAX) + DCCH; - Idx = DCCH; - // SRB1 - eNB_rrc_inst[Mod_id].Srb1[UE_index].Active = 1; - eNB_rrc_inst[Mod_id].Srb1[UE_index].Srb_info.Srb_id = Idx; - memcpy (&eNB_rrc_inst[Mod_id].Srb1[UE_index].Srb_info. - Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - memcpy (&eNB_rrc_inst[Mod_id].Srb1[UE_index].Srb_info. - Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); + //LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH; + Idx = DCCH; + // SRB1 + eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_id].Active = 1; + eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_id].Srb_info.Srb_id = Idx; + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_id].Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, + LCHAN_DESC_SIZE); + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb1[ue_mod_id].Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, + LCHAN_DESC_SIZE); - // SRB2 - eNB_rrc_inst[Mod_id].Srb2[UE_index].Active = 1; - eNB_rrc_inst[Mod_id].Srb2[UE_index].Srb_info.Srb_id = Idx; - memcpy (&eNB_rrc_inst[Mod_id].Srb2[UE_index].Srb_info. - Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - memcpy (&eNB_rrc_inst[Mod_id].Srb2[UE_index].Srb_info. - Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); + // SRB2 + eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_id].Active = 1; + eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_id].Srb_info.Srb_id = Idx; + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_id].Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, + LCHAN_DESC_SIZE); + memcpy(&eNB_rrc_inst[enb_mod_idP].Srb2[ue_mod_id].Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, + LCHAN_DESC_SIZE); - rrc_eNB_generate_RRCConnectionSetup (Mod_id, frameP, UE_index); - //LOG_D(RRC, "[MSC_NBOX][FRAME %05d][RRC_eNB][MOD %02d][][Tx RRCConnectionSetup][RRC_eNB][MOD %02d][]\n", - // frameP, Mod_id, Mod_id); + rrc_eNB_generate_RRCConnectionSetup(enb_mod_idP, frameP, ue_mod_id); + //LOG_D(RRC, "[MSC_NBOX][FRAME %05d][RRC_eNB][MOD %02d][][Tx RRCConnectionSetup][RRC_eNB][MOD %02d][]\n", + // frameP, enb_mod_idP, enb_mod_idP); - //LOG_D(RRC,"[eNB %d] RLC AM allocation index@0 is %d\n",Mod_id,rlc[Mod_id].m_rlc_am_array[0].allocation); - //LOG_D(RRC,"[eNB %d] RLC AM allocation index@1 is %d\n",Mod_id,rlc[Mod_id].m_rlc_am_array[1].allocation); - LOG_I (RRC,"[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %d\n",Mod_id, Idx, UE_index); + //LOG_D(RRC,"[eNB %d] RLC AM allocation index@0 is %d\n",enb_mod_idP,rlc[enb_mod_idP].m_rlc_am_array[0].allocation); + //LOG_D(RRC,"[eNB %d] RLC AM allocation index@1 is %d\n",enb_mod_idP,rlc[enb_mod_idP].m_rlc_am_array[1].allocation); + LOG_I(RRC, "[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %d\n", enb_mod_idP, Idx, ue_mod_id); - // rrc_pdcp_config_req (Mod_id, frameP, 1, CONFIG_ACTION_ADD, idx, UNDEF_SECURITY_MODE); + // rrc_pdcp_config_req (enb_mod_idP, frameP, 1, CONFIG_ACTION_ADD, idx, UNDEF_SECURITY_MODE); - // rrc_rlc_config_req(Mod_id,frameP,1,CONFIG_ACTION_ADD,Idx,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + // rrc_rlc_config_req(enb_mod_idP,frameP,1,CONFIG_ACTION_ADD,Idx,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - rrc_pdcp_config_asn1_req (Mod_id, UE_index, frameP, 1, - eNB_rrc_inst[Mod_id]. - SRB_configList[UE_index], - (DRB_ToAddModList_t *) NULL, - (DRB_ToReleaseList_t *) NULL, - 0xff, - NULL, - NULL, - NULL -#ifdef Rel10 - , (PMCH_InfoList_r9_t *) NULL -#endif - ); + rrc_pdcp_config_asn1_req(enb_mod_idP, ue_mod_id, frameP, 1, + eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_id], + (DRB_ToAddModList_t *) NULL, + (DRB_ToReleaseList_t *) NULL, 0xff, NULL, NULL, NULL +# ifdef Rel10 + , (PMCH_InfoList_r9_t *) NULL +# endif + ); - rrc_rlc_config_asn1_req (Mod_id, UE_index, frameP, 1, - eNB_rrc_inst[Mod_id]. - SRB_configList[UE_index], - (DRB_ToAddModList_t *) NULL, - (DRB_ToReleaseList_t *) NULL -#ifdef Rel10 - , (PMCH_InfoList_r9_t *) NULL -#endif - ); - //LOG_D(RRC,"[eNB %d] RLC AM allocation index@0 is %d\n",Mod_id,rlc[Mod_id].m_rlc_am_array[0].allocation); - //LOG_D(RRC,"[eNB %d] RLC AM allocation index@1 is %d\n",Mod_id,rlc[Mod_id].m_rlc_am_array[1].allocation); + rrc_rlc_config_asn1_req(enb_mod_idP, ue_mod_id, frameP, 1, + eNB_rrc_inst[enb_mod_idP].SRB_configList[ue_mod_id], + (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL +# ifdef Rel10 + , (PMCH_InfoList_r9_t *) NULL +# endif + ); + //LOG_D(RRC,"[eNB %d] RLC AM allocation index@0 is %d\n",enb_mod_idP,rlc[enb_mod_idP].m_rlc_am_array[0].allocation); + //LOG_D(RRC,"[eNB %d] RLC AM allocation index@1 is %d\n",enb_mod_idP,rlc[enb_mod_idP].m_rlc_am_array[1].allocation); - /* + /* - LOG_D(RRC,"[eNB %d] CALLING RLC CONFIG SRB2 (rbid %d) for UE %d\n", - Mod_id,Idx+1,UE_index); - Mac_rlc_xface->rrc_rlc_config_req(Mod_id,CONFIG_ACTION_ADD,Idx+1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - LOG_D(RRC,"[eNB %d] RLC AM allocation index@0 is %d\n",Mod_id,rlc[Mod_id].m_rlc_am_array[0].allocation); - LOG_D(RRC,"[eNB %d] RLC AM allocation index@1 is %d\n",rlc[Mod_id].m_rlc_am_array[1].allocation); - */ + LOG_D(RRC,"[eNB %d] CALLING RLC CONFIG SRB2 (rbid %d) for UE %d\n", + enb_mod_idP,Idx+1,ue_mod_idP); + Mac_rlc_xface->rrc_rlc_config_req(enb_mod_idP,CONFIG_ACTION_ADD,Idx+1,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); + LOG_D(RRC,"[eNB %d] RLC AM allocation index@0 is %d\n",enb_mod_idP,rlc[enb_mod_idP].m_rlc_am_array[0].allocation); + LOG_D(RRC,"[eNB %d] RLC AM allocation index@1 is %d\n",rlc[enb_mod_idP].m_rlc_am_array[1].allocation); + */ #endif //NO_RRM - } - else - { - LOG_E (RRC, "can't add UE, max user count reached!\n"); - } - break; + } else { + LOG_E(RRC, "can't add UE, max user count reached!\n"); + } + break; - default: - LOG_E (RRC, "[eNB %d] Frame %d : Unknown message\n", Mod_id, frameP); - rval = -1; - break; + default: + LOG_E(RRC, "[eNB %d] Frame %d : Unknown message\n", enb_mod_idP, frameP); + rval = -1; + break; } - rval = 0; + rval = 0; + } else { + LOG_E(RRC, "[eNB %d] Frame %d : Unknown error \n", enb_mod_idP, frameP); + rval = -1; } - else - { - LOG_E (RRC, "[eNB %d] Frame %d : Unknown error \n", Mod_id, frameP); - rval = -1; - } - return rval; + return rval; } /*------------------------------------------------------------------------------*/ -int rrc_eNB_decode_dcch (module_id_t Mod_id, frame_t frameP, uint8_t Srb_id, uint8_t UE_index, - uint8_t * Rx_sdu, sdu_size_t sdu_size) -{ +int rrc_eNB_decode_dcch( + module_id_t enb_mod_idP, + frame_t frameP, + uint8_t Srb_id, + module_id_t ue_mod_idP, + uint8_t *Rx_sdu, + sdu_size_t sdu_sizeP) { /*------------------------------------------------------------------------------*/ - asn_dec_rval_t dec_rval; - //UL_DCCH_Message_t uldcchmsg; - UL_DCCH_Message_t *ul_dcch_msg = NULL; //&uldcchmsg; - UE_EUTRA_Capability_t *UE_EUTRA_Capability = NULL; + asn_dec_rval_t dec_rval; + //UL_DCCH_Message_t uldcchmsg; + UL_DCCH_Message_t *ul_dcch_msg = NULL; //&uldcchmsg; + UE_EUTRA_Capability_t *UE_EUTRA_Capability = NULL; - if ((Srb_id != 1) && (Srb_id != 2)) - { - LOG_E (RRC, "[eNB %d] Frame %d: Received message on SRB%d, should not have ...\n", - Mod_id, frameP, Srb_id); + if ((Srb_id != 1) && (Srb_id != 2)) { + LOG_E(RRC, "[eNB %d] Frame %d: Received message on SRB%d, should not have ...\n", enb_mod_idP, frameP, Srb_id); } + //memset(ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); - //memset(ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); - - LOG_D (RRC, "[eNB %d] Frame %d: Decoding UL-DCCH Message\n", Mod_id, frameP); - dec_rval = uper_decode (NULL, - &asn_DEF_UL_DCCH_Message, - (void **) &ul_dcch_msg, Rx_sdu, sdu_size, 0, 0); + LOG_D(RRC, "[eNB %d] Frame %d: Decoding UL-DCCH Message\n", enb_mod_idP, frameP); + dec_rval = uper_decode(NULL, &asn_DEF_UL_DCCH_Message, (void **)&ul_dcch_msg, Rx_sdu, sdu_sizeP, 0, 0); #if defined(ENABLE_ITTI) -# if defined(DISABLE_ITTI_XER_PRINT) - { - MessageDef *message_p; - - message_p = itti_alloc_new_message (TASK_RRC_ENB, RRC_UL_DCCH_MESSAGE); - memcpy (&message_p->ittiMsg, (void *) ul_dcch_msg, sizeof(RrcUlDcchMessage)); - - itti_send_msg_to_task (TASK_UNKNOWN, Mod_id, message_p); - } -# else - { - char message_string[10000]; - size_t message_string_size; - - if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg)) >= 0) +# if defined(DISABLE_ITTI_XER_PRINT) { - MessageDef *msg_p; + MessageDef *message_p; - msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_UL_DCCH, message_string_size + sizeof (IttiMsgText)); - msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size); + message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_DCCH_MESSAGE); + memcpy(&message_p->ittiMsg, (void *)ul_dcch_msg, sizeof(RrcUlDcchMessage)); - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p); + itti_send_msg_to_task(TASK_UNKNOWN, enb_mod_idP, message_p); } - } -# endif +# else + { + char message_string[10000]; + size_t message_string_size; + + if ((message_string_size = + xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg)) >= 0) { + MessageDef *msg_p; + + msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_DCCH, message_string_size + sizeof(IttiMsgText)); + msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size; + memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size); + + itti_send_msg_to_task(TASK_UNKNOWN, enb_mod_idP, msg_p); + } + } +# endif #endif - { - int i; - - for (i = 0; i < sdu_size; i++) - LOG_T (RRC, "%x.", Rx_sdu[i]); - LOG_T (RRC, "\n"); - } - - if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { - LOG_E (RRC, "[UE %d] Frame %d : Failed to decode UL-DCCH (%d bytes)\n", - Mod_id, frameP, dec_rval.consumed); - return -1; + int i; + + for (i = 0; i < sdu_sizeP; i++) + LOG_T(RRC, "%x.", Rx_sdu[i]); + LOG_T(RRC, "\n"); } - if (ul_dcch_msg->message.present == UL_DCCH_MessageType_PR_c1) - { + if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { + LOG_E(RRC, "[UE %d] Frame %d : Failed to decode UL-DCCH (%d bytes)\n", enb_mod_idP, frameP, dec_rval.consumed); + return -1; + } - switch (ul_dcch_msg->message.choice.c1.present) - { - case UL_DCCH_MessageType__c1_PR_NOTHING: /* No components present */ - break; + if (ul_dcch_msg->message.present == UL_DCCH_MessageType_PR_c1) { - case UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000: - break; + switch (ul_dcch_msg->message.choice.c1.present) { + case UL_DCCH_MessageType__c1_PR_NOTHING: /* No components present */ + break; - case UL_DCCH_MessageType__c1_PR_measurementReport: - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND " - "%d bytes (measurementReport) --->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, DCCH, sdu_size, Mod_id); - rrc_eNB_process_MeasurementReport (Mod_id, frameP, UE_index, - &ul_dcch_msg->message.choice.c1. - choice.measurementReport. - criticalExtensions.choice.c1. - choice.measurementReport_r8. - measResults); - break; + case UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000: + break; - case UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " - "(RRCConnectionReconfigurationComplete) --->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, DCCH, sdu_size, Mod_id); - if (ul_dcch_msg->message.choice.c1.choice. - rrcConnectionReconfigurationComplete.criticalExtensions. - present == - RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) - { - rrc_eNB_process_RRCConnectionReconfigurationComplete (Mod_id, - frameP, - UE_index, - &ul_dcch_msg-> - message. - choice.c1. - choice. - rrcConnectionReconfigurationComplete. - criticalExtensions. - choice. - rrcConnectionReconfigurationComplete_r8); - eNB_rrc_inst[Mod_id].Info.UE[UE_index].Status = RRC_RECONFIGURED; - LOG_I (RRC, "[eNB %d] UE %d State = RRC_RECONFIGURED \n", - Mod_id, UE_index); - } + case UL_DCCH_MessageType__c1_PR_measurementReport: + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND " + "%d bytes (measurementReport) --->][RRC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); + rrc_eNB_process_MeasurementReport(enb_mod_idP, frameP, ue_mod_idP, + &ul_dcch_msg->message.choice.c1.choice.measurementReport. + criticalExtensions.choice.c1.choice.measurementReport_r8.measResults); + break; -#if defined(ENABLE_USE_MME) -# if defined(ENABLE_ITTI) - if (EPC_MODE_ENABLED == 1) - { - rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP (Mod_id, UE_index); - } -# endif -#endif - break; - - case UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete: - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " - "(rrcConnectionReestablishmentComplete) --->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, DCCH, sdu_size, Mod_id); - break; - - case UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete: - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " - "(RRCConnectionSetupComplete) --->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, DCCH, sdu_size, Mod_id); - - if (ul_dcch_msg->message.choice.c1.choice. - rrcConnectionSetupComplete.criticalExtensions.present == - RRCConnectionSetupComplete__criticalExtensions_PR_c1) - { - if (ul_dcch_msg->message.choice.c1.choice. - rrcConnectionSetupComplete.criticalExtensions.choice.c1. - present == - RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8) + case UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " + "(RRCConnectionReconfigurationComplete) --->][RRC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); + if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.criticalExtensions. + present == + RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) { - rrc_eNB_process_RRCConnectionSetupComplete (Mod_id, frameP, - UE_index, - &ul_dcch_msg-> - message.choice. - c1.choice. - rrcConnectionSetupComplete. - criticalExtensions. - choice.c1. - choice. - rrcConnectionSetupComplete_r8); - eNB_rrc_inst[Mod_id].Info.UE[UE_index].Status = RRC_CONNECTED; - LOG_I (RRC, "[eNB %d] UE %d State = RRC_CONNECTED \n", - Mod_id, UE_index); - LOG_D (RRC, - "[MSC_NBOX][FRAME %05d][RRC_eNB][MOD %02d][][Rx RRCConnectionSetupComplete\n" - "Now CONNECTED with UE %d][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, UE_index, Mod_id); + rrc_eNB_process_RRCConnectionReconfigurationComplete(enb_mod_idP, frameP, ue_mod_idP, + &ul_dcch_msg->message.choice.c1.choice. + rrcConnectionReconfigurationComplete. + criticalExtensions.choice. + rrcConnectionReconfigurationComplete_r8); + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_RECONFIGURED; + LOG_I(RRC, "[eNB %d] UE %d State = RRC_RECONFIGURED \n", enb_mod_idP, ue_mod_idP); } - } - break; - - case UL_DCCH_MessageType__c1_PR_securityModeComplete: - LOG_I (RRC, - "[eNB %d] Frame %d received securityModeComplete on UL-DCCH %d from UE %d\n", - Mod_id, frameP, DCCH, UE_index); - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " - "(securityModeComplete) --->][RRC_eNB][MOD %02d][]\n", frameP, - Mod_id, DCCH, sdu_size, Mod_id); -#ifdef XER_PRINT - xer_fprint (stdout, &asn_DEF_UL_DCCH_Message, (void *) ul_dcch_msg); +#if defined(ENABLE_USE_MME) +# if defined(ENABLE_ITTI) + if (EPC_MODE_ENABLED == 1) { + rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(enb_mod_idP, ue_mod_idP); + } +# endif #endif - // confirm with PDCP about the security mode for DCCH - //rrc_pdcp_config_req (Mod_id, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (UE_index * NB_RB_MAX) + DCCH, 0x77); - // continue the procedure - rrc_eNB_generate_UECapabilityEnquiry (Mod_id, frameP, UE_index); - break; + break; - case UL_DCCH_MessageType__c1_PR_securityModeFailure: - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " - "(securityModeFailure) --->][RRC_eNB][MOD %02d][]\n", frameP, - Mod_id, DCCH, sdu_size, Mod_id); + case UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete: + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " + "(rrcConnectionReestablishmentComplete) --->][RRC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); + break; + + case UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete: + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " + "(RRCConnectionSetupComplete) --->][RRC_eNB][MOD %02d][]\n", + frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); + + if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionSetupComplete.criticalExtensions.present == + RRCConnectionSetupComplete__criticalExtensions_PR_c1) { + if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionSetupComplete.criticalExtensions.choice.c1. + present == + RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8) { + rrc_eNB_process_RRCConnectionSetupComplete(enb_mod_idP, frameP, ue_mod_idP, + &ul_dcch_msg->message.choice.c1.choice. + rrcConnectionSetupComplete.criticalExtensions.choice. + c1.choice.rrcConnectionSetupComplete_r8); + eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_CONNECTED; + LOG_I(RRC, "[eNB %d] UE %d State = RRC_CONNECTED \n", enb_mod_idP, ue_mod_idP); + LOG_D(RRC, + "[MSC_NBOX][FRAME %05d][RRC_eNB][MOD %02d][][Rx RRCConnectionSetupComplete\n" + "Now CONNECTED with UE %d][RRC_eNB][MOD %02d][]\n", frameP, enb_mod_idP, ue_mod_idP, enb_mod_idP); + } + } + break; + + case UL_DCCH_MessageType__c1_PR_securityModeComplete: + LOG_I(RRC, + "[eNB %d] Frame %d received securityModeComplete on UL-DCCH %d from UE %d\n", + enb_mod_idP, frameP, DCCH, ue_mod_idP); + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " + "(securityModeComplete) --->][RRC_eNB][MOD %02d][]\n", frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); #ifdef XER_PRINT - xer_fprint (stdout, &asn_DEF_UL_DCCH_Message, (void *) ul_dcch_msg); + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); #endif - // cancel the security mode in PDCP + // confirm with PDCP about the security mode for DCCH + //rrc_pdcp_config_req (enb_mod_idP, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (ue_mod_idP * NB_RB_MAX) + DCCH, 0x77); + // continue the procedure + rrc_eNB_generate_UECapabilityEnquiry(enb_mod_idP, frameP, ue_mod_idP); + break; - // followup with the remaining procedure - rrc_eNB_generate_UECapabilityEnquiry (Mod_id, frameP, UE_index); - break; - - case UL_DCCH_MessageType__c1_PR_ueCapabilityInformation: - LOG_I (RRC, - "[eNB %d] Frame %d received ueCapabilityInformation on UL-DCCH %d from UE %d\n", - Mod_id, frameP, DCCH, UE_index); - LOG_D (RRC, - "[MSC_MSG][FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " - "(UECapabilityInformation) --->][RRC_eNB][MOD %02d][]\n", - frameP, Mod_id, DCCH, sdu_size, Mod_id); + case UL_DCCH_MessageType__c1_PR_securityModeFailure: + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " + "(securityModeFailure) --->][RRC_eNB][MOD %02d][]\n", frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); #ifdef XER_PRINT - xer_fprint (stdout, &asn_DEF_UL_DCCH_Message, (void *) ul_dcch_msg); + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); #endif - dec_rval = uper_decode (NULL, - &asn_DEF_UE_EUTRA_Capability, - (void **) &UE_EUTRA_Capability, - ul_dcch_msg->message.choice.c1.choice. - ueCapabilityInformation.criticalExtensions. - choice.c1.choice.ueCapabilityInformation_r8. - ue_CapabilityRAT_ContainerList.list. - array[0]->ueCapabilityRAT_Container.buf, - ul_dcch_msg->message.choice.c1.choice. - ueCapabilityInformation.criticalExtensions. - choice.c1.choice.ueCapabilityInformation_r8. - ue_CapabilityRAT_ContainerList.list. - array[0]->ueCapabilityRAT_Container.size, 0, - 0); + // cancel the security mode in PDCP + + // followup with the remaining procedure + rrc_eNB_generate_UECapabilityEnquiry(enb_mod_idP, frameP, ue_mod_idP); + break; + + case UL_DCCH_MessageType__c1_PR_ueCapabilityInformation: + LOG_I(RRC, + "[eNB %d] Frame %d received ueCapabilityInformation on UL-DCCH %d from UE %d\n", + enb_mod_idP, frameP, DCCH, ue_mod_idP); + LOG_D(RRC, + "[FRAME %05d][RLC][MOD %02d][RB %02d][--- RLC_DATA_IND %d bytes " + "(UECapabilityInformation) --->][RRC_eNB][MOD %02d][]\n", frameP, enb_mod_idP, DCCH, sdu_sizeP, enb_mod_idP); #ifdef XER_PRINT - xer_fprint (stdout, &asn_DEF_UE_EUTRA_Capability, - (void *) UE_EUTRA_Capability); + xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); +#endif + dec_rval = uper_decode(NULL, + &asn_DEF_UE_EUTRA_Capability, + (void **)&UE_EUTRA_Capability, + ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions. + choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list. + array[0]->ueCapabilityRAT_Container.buf, + ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions. + choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list. + array[0]->ueCapabilityRAT_Container.size, 0, 0); +#ifdef XER_PRINT + xer_fprint(stdout, &asn_DEF_UE_EUTRA_Capability, (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); - } + if (EPC_MODE_ENABLED == 1) { + rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(enb_mod_idP, ue_mod_idP, ul_dcch_msg); + } #endif - rrc_eNB_generate_defaultRRCConnectionReconfiguration (Mod_id, frameP, - UE_index, - eNB_rrc_inst[Mod_id].HO_flag); - break; + rrc_eNB_generate_defaultRRCConnectionReconfiguration(enb_mod_idP, frameP, + ue_mod_idP, eNB_rrc_inst[enb_mod_idP].HO_flag); + break; - case UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer: - break; + case UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer: + break; - case UL_DCCH_MessageType__c1_PR_ulInformationTransfer: + case UL_DCCH_MessageType__c1_PR_ulInformationTransfer: #if defined(ENABLE_USE_MME) - if (EPC_MODE_ENABLED == 1) - { - rrc_eNB_send_S1AP_UPLINK_NAS(Mod_id, UE_index, ul_dcch_msg); - } + if (EPC_MODE_ENABLED == 1) { + rrc_eNB_send_S1AP_UPLINK_NAS(enb_mod_idP, ue_mod_idP, ul_dcch_msg); + } #endif - break; + break; - case UL_DCCH_MessageType__c1_PR_counterCheckResponse: - break; + case UL_DCCH_MessageType__c1_PR_counterCheckResponse: + break; #ifdef Rel10 - case UL_DCCH_MessageType__c1_PR_ueInformationResponse_r9: - break; + case UL_DCCH_MessageType__c1_PR_ueInformationResponse_r9: + break; - case UL_DCCH_MessageType__c1_PR_proximityIndication_r9: - break; + case UL_DCCH_MessageType__c1_PR_proximityIndication_r9: + break; - case UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10: - break; + case UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10: + break; - case UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10: - break; + case UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10: + break; - case UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10: - break; + case UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10: + break; #endif - default: - LOG_E (RRC, "[UE %d] Frame %d : Unknown message\n", Mod_id, frameP); - return -1; + default: + LOG_E(RRC, "[UE %d] Frame %d : Unknown message\n", enb_mod_idP, frameP); + return -1; } - return 0; - } - else - { - LOG_E (RRC, "[UE %d] Frame %d : Unknown error\n", Mod_id, frameP); - return -1; + return 0; + } else { + LOG_E(RRC, "[UE %d] Frame %d : Unknown error\n", enb_mod_idP, frameP); + return -1; } } #if defined(ENABLE_ITTI) /*------------------------------------------------------------------------------*/ -void *rrc_enb_task(void *args_p) { - MessageDef *msg_p; - const char *msg_name; - instance_t instance; - int result; - SRB_INFO *srb_info_p; +void *rrc_enb_task( + void *args_p) { + MessageDef *msg_p; + const char *msg_name_p; + instance_t instance; + int result; + SRB_INFO *srb_info_p; - itti_mark_task_ready (TASK_RRC_ENB); + itti_mark_task_ready(TASK_RRC_ENB); - while(1) { - // Wait for a message - itti_receive_msg (TASK_RRC_ENB, &msg_p); + while (1) { + // Wait for a message + itti_receive_msg(TASK_RRC_ENB, &msg_p); - msg_name = ITTI_MSG_NAME (msg_p); - instance = ITTI_MSG_INSTANCE (msg_p); + msg_name_p = ITTI_MSG_NAME(msg_p); + instance = ITTI_MSG_INSTANCE(msg_p); - switch (ITTI_MSG_ID(msg_p)) { - case TERMINATE_MESSAGE: - itti_exit_task (); - break; + switch (ITTI_MSG_ID(msg_p)) { + case TERMINATE_MESSAGE: + itti_exit_task(); + break; - case MESSAGE_TEST: - LOG_I(RRC, "[eNB %d] Received %s\n", instance, msg_name); - break; + case MESSAGE_TEST: + LOG_I(RRC, "[eNB %d] Received %s\n", instance, msg_name_p); + break; - /* Messages from MAC */ - case RRC_MAC_CCCH_DATA_IND: - LOG_I(RRC, "[eNB %d] Received %s: frameP %d,\n", instance, msg_name, - RRC_MAC_CCCH_DATA_IND (msg_p).frame); + /* Messages from MAC */ + case RRC_MAC_CCCH_DATA_IND: + LOG_I(RRC, "[eNB %d] Received %s: frameP %d,\n", instance, msg_name_p, + RRC_MAC_CCCH_DATA_IND(msg_p).frame); - srb_info_p = &eNB_rrc_inst[instance].Srb0; + srb_info_p = &eNB_rrc_inst[instance].Srb0; - memcpy (srb_info_p->Rx_buffer.Payload, RRC_MAC_CCCH_DATA_IND (msg_p).sdu, - RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size); - srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND (msg_p).sdu_size; - rrc_eNB_decode_ccch (instance, RRC_MAC_CCCH_DATA_IND (msg_p).frame, srb_info_p); - break; + memcpy(srb_info_p->Rx_buffer.Payload, RRC_MAC_CCCH_DATA_IND(msg_p).sdu, + RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); + srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size; + rrc_eNB_decode_ccch(instance, RRC_MAC_CCCH_DATA_IND(msg_p).frame, srb_info_p); + break; - /* Messages from PDCP */ - case RRC_DCCH_DATA_IND: - LOG_I(RRC, "[eNB %d][UE %d] Received %s: frameP %d, DCCH %d\n", instance, RRC_DCCH_DATA_IND (msg_p).ue_index, msg_name, - RRC_DCCH_DATA_IND (msg_p).frame, RRC_DCCH_DATA_IND (msg_p).dcch_index); + /* Messages from PDCP */ + case RRC_DCCH_DATA_IND: + LOG_I(RRC, "[eNB %d][UE %d] Received %s: frameP %d, DCCH %d\n", instance, + RRC_DCCH_DATA_IND(msg_p).ue_index, msg_name_p, RRC_DCCH_DATA_IND(msg_p).frame, + RRC_DCCH_DATA_IND(msg_p).dcch_index); - rrc_eNB_decode_dcch (instance, RRC_DCCH_DATA_IND (msg_p).frame, RRC_DCCH_DATA_IND (msg_p).dcch_index, - RRC_DCCH_DATA_IND (msg_p).ue_index, RRC_DCCH_DATA_IND (msg_p).sdu_p, - RRC_DCCH_DATA_IND (msg_p).sdu_size); + rrc_eNB_decode_dcch(instance, RRC_DCCH_DATA_IND(msg_p).frame, RRC_DCCH_DATA_IND(msg_p).dcch_index, + RRC_DCCH_DATA_IND(msg_p).ue_index, RRC_DCCH_DATA_IND(msg_p).sdu_p, + RRC_DCCH_DATA_IND(msg_p).sdu_size); - // Message buffer has been processed, free it now. - result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), RRC_DCCH_DATA_IND (msg_p).sdu_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - break; + // Message buffer has been processed, free it now. + result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), RRC_DCCH_DATA_IND(msg_p).sdu_p); + AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + break; -#if defined(ENABLE_USE_MME) - /* Messages from S1AP */ - case S1AP_DOWNLINK_NAS: - rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name, instance, &rrc_eNB_mui); - break; +# if defined(ENABLE_USE_MME) + /* Messages from S1AP */ + case S1AP_DOWNLINK_NAS: + rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_eNB_mui); + break; - case S1AP_INITIAL_CONTEXT_SETUP_REQ: - rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p, msg_name, instance); - break; + case S1AP_INITIAL_CONTEXT_SETUP_REQ: + rrc_eNB_process_S1AP_INITIAL_CONTEXT_SETUP_REQ(msg_p, msg_name_p, instance); + break; - case S1AP_UE_CTXT_MODIFICATION_REQ: - rrc_eNB_process_S1AP_UE_CTXT_MODIFICATION_REQ(msg_p, msg_name, instance); - break; + case S1AP_UE_CTXT_MODIFICATION_REQ: + rrc_eNB_process_S1AP_UE_CTXT_MODIFICATION_REQ(msg_p, msg_name_p, instance); + break; - case S1AP_PAGING_IND: - LOG_E(RRC, "[eNB %d] Received not yet implemented message %s\n", instance, msg_name); - break; + case S1AP_PAGING_IND: + LOG_E(RRC, "[eNB %d] Received not yet implemented message %s\n", instance, msg_name_p); + break; - case S1AP_UE_CONTEXT_RELEASE_REQ: - rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_REQ(msg_p, msg_name, instance); - break; -#endif + case S1AP_UE_CONTEXT_RELEASE_REQ: + rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_REQ(msg_p, msg_name_p, instance); + break; +# endif - /* Messages from eNB app */ - case RRC_CONFIGURATION_REQ: - LOG_I(RRC, "[eNB %d] Received %s\n", instance, msg_name); - openair_rrc_lite_eNB_configuration(instance, &RRC_CONFIGURATION_REQ (msg_p)); - break; + /* Messages from eNB app */ + case RRC_CONFIGURATION_REQ: + LOG_I(RRC, "[eNB %d] Received %s\n", instance, msg_name_p); + openair_rrc_lite_eNB_configuration(instance, &RRC_CONFIGURATION_REQ(msg_p)); + break; -#ifdef ENABLE_RAL - case RRC_RAL_CONFIGURE_THRESHOLD_REQ: - rrc_enb_ral_handle_configure_threshold_request(instance, msg_p); - break; -#endif +# ifdef ENABLE_RAL + case RRC_RAL_CONFIGURE_THRESHOLD_REQ: + rrc_enb_ral_handle_configure_threshold_request(instance, msg_p); + break; +# endif + default: + LOG_E(RRC, "[eNB %d] Received unexpected message %s\n", instance, msg_name_p); + break; + } - default: - LOG_E(RRC, "[eNB %d] Received unexpected message %s\n", instance, msg_name); - break; + result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p); + AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + msg_p = NULL; } - - result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - msg_p = NULL; - } } #endif #ifndef USER_MODE -EXPORT_SYMBOL (Rlc_info_am_config); +EXPORT_SYMBOL(Rlc_info_am_config); #endif