Commit b45a340b authored by Robert Schmidt's avatar Robert Schmidt

RAN API: no set_RC_vars(), check use RC directly, give error messages

parent cdbf65f5
...@@ -342,12 +342,6 @@ void *eNB_app_task(void *args_p) ...@@ -342,12 +342,6 @@ void *eNB_app_task(void *args_p)
enb_app_start_phy_rrc(enb_id_start, enb_id_end); enb_app_start_phy_rrc(enb_id_start, enb_id_end);
#ifdef FLEXRAN_AGENT_SB_IF
for (uint32_t enb_i = 0; enb_i <1; enb_i ++){ // To be handled for all of current eNB
flexran_set_RC_vars(enb_i, RAN_LTE_OAI);
}
#endif
# if defined(ENABLE_USE_MME) # if defined(ENABLE_USE_MME)
/* Try to register each eNB */ /* Try to register each eNB */
registered_enb = 0; registered_enb = 0;
......
...@@ -28,48 +28,35 @@ ...@@ -28,48 +28,35 @@
#include "flexran_agent_ran_api.h" #include "flexran_agent_ran_api.h"
/* static inline int phy_is_present(mid_t mod_id, uint8_t cc_id)
* generic info from RAN {
*/ return RC.eNB && RC.eNB[mod_id] && RC.eNB[mod_id][cc_id];
}
PHY_VARS_eNB *phy[NUM_MAX_ENB][MAX_NUM_CCs] = { NULL }; static inline int mac_is_present(mid_t mod_id)
eNB_MAC_INST *mac[NUM_MAX_ENB] = { NULL }; {
eNB_RRC_INST *rrc[NUM_MAX_ENB] = { NULL }; return RC.mac && RC.mac[mod_id];
UE_list_t *UE_list[NUM_MAX_ENB] = { NULL }; }
void flexran_set_RC_vars(mid_t mod_id, ran_name_t ran) static inline int rrc_is_present(mid_t mod_id)
{ {
int i; return RC.rrc && RC.rrc[mod_id];
if (ran == RAN_LTE_OAI) {
if (RC.eNB && mod_id < RC.nb_RU && RC.eNB[mod_id] && RC.nb_CC)
for (i = 0; i < *RC.nb_CC; i++)
phy[mod_id][i] = RC.eNB[mod_id][i];
if (RC.mac && mod_id < RC.nb_macrlc_inst && RC.mac[mod_id]) {
mac[mod_id] = RC.mac[mod_id];
UE_list[mod_id] = &RC.mac[mod_id]->UE_list;
}
if (RC.rrc && mod_id < RC.nb_macrlc_inst && RC.rrc[mod_id])
rrc[mod_id] = RC.rrc[mod_id];
}
else {
LOG_E(FLEXRAN_AGENT, "unknown RAN name %d when setting RAN API variables\n", ran);
}
} }
uint32_t flexran_get_current_time_ms(mid_t mod_id, int subframe_flag) uint32_t flexran_get_current_time_ms(mid_t mod_id, int subframe_flag)
{ {
if (!mac[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
if (subframe_flag == 1) if (subframe_flag == 1)
return mac[mod_id]->frame*10 + mac[mod_id]->subframe; return RC.mac[mod_id]->frame*10 + RC.mac[mod_id]->subframe;
else else
return mac[mod_id]->frame*10; return RC.mac[mod_id]->frame*10;
} }
frame_t flexran_get_current_frame(mid_t mod_id) frame_t flexran_get_current_frame(mid_t mod_id)
{ {
if (!mac[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
// #warning "SFN will not be in [0-1023] when oaisim is used" // #warning "SFN will not be in [0-1023] when oaisim is used"
return mac[mod_id]->frame; return RC.mac[mod_id]->frame;
} }
frame_t flexran_get_current_system_frame_num(mid_t mod_id) frame_t flexran_get_current_system_frame_num(mid_t mod_id)
...@@ -79,8 +66,8 @@ frame_t flexran_get_current_system_frame_num(mid_t mod_id) ...@@ -79,8 +66,8 @@ frame_t flexran_get_current_system_frame_num(mid_t mod_id)
sub_frame_t flexran_get_current_subframe(mid_t mod_id) sub_frame_t flexran_get_current_subframe(mid_t mod_id)
{ {
if (!mac[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return mac[mod_id]->subframe; return RC.mac[mod_id]->subframe;
} }
/* Why uint16_t, frame_t and sub_frame_t are defined as uint32_t? */ /* Why uint16_t, frame_t and sub_frame_t are defined as uint32_t? */
...@@ -121,8 +108,8 @@ uint16_t flexran_get_future_sfn_sf(mid_t mod_id, int ahead_of_time) ...@@ -121,8 +108,8 @@ uint16_t flexran_get_future_sfn_sf(mid_t mod_id, int ahead_of_time)
int flexran_get_num_ues(mid_t mod_id) int flexran_get_num_ues(mid_t mod_id)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->num_UEs; return RC.mac[mod_id]->UE_list.num_UEs;
} }
rnti_t flexran_get_ue_crnti(mid_t mod_id, mid_t ue_id) rnti_t flexran_get_ue_crnti(mid_t mod_id, mid_t ue_id)
...@@ -132,20 +119,20 @@ rnti_t flexran_get_ue_crnti(mid_t mod_id, mid_t ue_id) ...@@ -132,20 +119,20 @@ rnti_t flexran_get_ue_crnti(mid_t mod_id, mid_t ue_id)
uint8_t flexran_get_ue_bsr(mid_t mod_id, mid_t ue_id, lcid_t lcid) uint8_t flexran_get_ue_bsr(mid_t mod_id, mid_t ue_id, lcid_t lcid)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->UE_template[UE_PCCID(mod_id, ue_id)][ue_id].bsr_info[lcid]; return RC.mac[mod_id]->UE_list.UE_template[UE_PCCID(mod_id, ue_id)][ue_id].bsr_info[lcid];
} }
int8_t flexran_get_ue_phr(mid_t mod_id, mid_t ue_id) int8_t flexran_get_ue_phr(mid_t mod_id, mid_t ue_id)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->UE_template[UE_PCCID(mod_id, ue_id)][ue_id].phr_info; return RC.mac[mod_id]->UE_list.UE_template[UE_PCCID(mod_id, ue_id)][ue_id].phr_info;
} }
uint8_t flexran_get_ue_wcqi(mid_t mod_id, mid_t ue_id) uint8_t flexran_get_ue_wcqi(mid_t mod_id, mid_t ue_id)
{ {
if (!phy[mod_id][0]) return 0; if (!phy_is_present(mod_id, 0)) return 0;
return phy[mod_id][0]->UE_stats[ue_id].DL_cqi[0]; return RC.eNB[mod_id][0]->UE_stats[ue_id].DL_cqi[0];
} }
rlc_buffer_occupancy_t flexran_get_tx_queue_size(mid_t mod_id, mid_t ue_id, logical_chan_id_t channel_id) rlc_buffer_occupancy_t flexran_get_tx_queue_size(mid_t mod_id, mid_t ue_id, logical_chan_id_t channel_id)
...@@ -177,9 +164,9 @@ frame_t flexran_get_hol_delay(mid_t mod_id, mid_t ue_id, logical_chan_id_t chann ...@@ -177,9 +164,9 @@ frame_t flexran_get_hol_delay(mid_t mod_id, mid_t ue_id, logical_chan_id_t chann
int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id) int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
int32_t tau = phy[mod_id][cc_id]->UE_stats[ue_id].timing_advance_update; int32_t tau = RC.eNB[mod_id][cc_id]->UE_stats[ue_id].timing_advance_update;
switch (flexran_get_N_RB_DL(mod_id, cc_id)) { switch (flexran_get_N_RB_DL(mod_id, cc_id)) {
case 6: case 6:
return tau; return tau;
...@@ -203,8 +190,8 @@ int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id) ...@@ -203,8 +190,8 @@ int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
uint8_t flexran_get_ue_wpmi(mid_t mod_id, mid_t ue_id, uint8_t cc_id) uint8_t flexran_get_ue_wpmi(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->UE_sched_ctrl[ue_id].periodic_wideband_pmi[cc_id]; return RC.mac[mod_id]->UE_list.UE_sched_ctrl[ue_id].periodic_wideband_pmi[cc_id];
} }
/* TODO needs to be revised */ /* TODO needs to be revised */
...@@ -235,7 +222,7 @@ void flexran_update_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id) ...@@ -235,7 +222,7 @@ void flexran_update_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
int flexran_get_MAC_CE_bitmap_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id) int flexran_get_MAC_CE_bitmap_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
#warning "Implement flexran_get_MAC_CE_bitmap_TA() in RAN API" #warning "Implement flexran_get_MAC_CE_bitmap_TA() in RAN API"
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
/* UE_stats can not be null, they are an array in RC /* UE_stats can not be null, they are an array in RC
LTE_eNB_UE_stats *eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti); LTE_eNB_UE_stats *eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti);
...@@ -254,25 +241,25 @@ int flexran_get_MAC_CE_bitmap_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id) ...@@ -254,25 +241,25 @@ int flexran_get_MAC_CE_bitmap_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
int flexran_get_active_CC(mid_t mod_id, mid_t ue_id) int flexran_get_active_CC(mid_t mod_id, mid_t ue_id)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->numactiveCCs[ue_id]; return RC.mac[mod_id]->UE_list.numactiveCCs[ue_id];
} }
uint8_t flexran_get_current_RI(mid_t mod_id, mid_t ue_id, uint8_t cc_id) uint8_t flexran_get_current_RI(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->UE_stats[ue_id].rank; return RC.eNB[mod_id][cc_id]->UE_stats[ue_id].rank;
} }
int flexran_get_tpc(mid_t mod_id, mid_t ue_id, uint8_t cc_id) int flexran_get_tpc(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
/* before: tested that UL_rssi != NULL and set parameter ([0]), but it is a /* before: tested that UL_rssi != NULL and set parameter ([0]), but it is a
* static array -> target_rx_power is useless in old ifs?! */ * static array -> target_rx_power is useless in old ifs?! */
int pCCid = UE_PCCID(mod_id,ue_id); int pCCid = UE_PCCID(mod_id,ue_id);
int32_t target_rx_power = phy[mod_id][pCCid]->frame_parms.ul_power_control_config_common.p0_NominalPUSCH; int32_t target_rx_power = RC.eNB[mod_id][pCCid]->frame_parms.ul_power_control_config_common.p0_NominalPUSCH;
int32_t normalized_rx_power = phy[mod_id][cc_id]->UE_stats[ue_id].UL_rssi[0]; int32_t normalized_rx_power = RC.eNB[mod_id][cc_id]->UE_stats[ue_id].UL_rssi[0];
int tpc; int tpc;
if (normalized_rx_power > target_rx_power + 1) if (normalized_rx_power > target_rx_power + 1)
...@@ -334,26 +321,26 @@ int flexran_get_harq(mid_t mod_id, ...@@ -334,26 +321,26 @@ int flexran_get_harq(mid_t mod_id,
int32_t flexran_get_p0_pucch_dbm(mid_t mod_id, mid_t ue_id, uint8_t cc_id) int32_t flexran_get_p0_pucch_dbm(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->UE_stats[ue_id].Po_PUCCH_dBm; return RC.eNB[mod_id][cc_id]->UE_stats[ue_id].Po_PUCCH_dBm;
} }
int8_t flexran_get_p0_nominal_pucch(mid_t mod_id, uint8_t cc_id) int8_t flexran_get_p0_nominal_pucch(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.ul_power_control_config_common.p0_NominalPUCCH; return RC.eNB[mod_id][cc_id]->frame_parms.ul_power_control_config_common.p0_NominalPUCCH;
} }
int32_t flexran_get_p0_pucch_status(mid_t mod_id, mid_t ue_id, uint8_t cc_id) int32_t flexran_get_p0_pucch_status(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->UE_stats[ue_id].Po_PUCCH_update; return RC.eNB[mod_id][cc_id]->UE_stats[ue_id].Po_PUCCH_update;
} }
int flexran_update_p0_pucch(mid_t mod_id, mid_t ue_id, uint8_t cc_id) int flexran_update_p0_pucch(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
phy[mod_id][cc_id]->UE_stats[ue_id].Po_PUCCH_update = 0; RC.eNB[mod_id][cc_id]->UE_stats[ue_id].Po_PUCCH_update = 0;
return 0; return 0;
} }
...@@ -365,46 +352,46 @@ int flexran_update_p0_pucch(mid_t mod_id, mid_t ue_id, uint8_t cc_id) ...@@ -365,46 +352,46 @@ int flexran_update_p0_pucch(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
*/ */
uint8_t flexran_get_threequarter_fs(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_threequarter_fs(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.threequarter_fs; return RC.eNB[mod_id][cc_id]->frame_parms.threequarter_fs;
} }
uint8_t flexran_get_hopping_offset(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_hopping_offset(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pusch_config_common.pusch_HoppingOffset; return RC.eNB[mod_id][cc_id]->frame_parms.pusch_config_common.pusch_HoppingOffset;
} }
PUSCH_HOPPING_t flexran_get_hopping_mode(mid_t mod_id, uint8_t cc_id) PUSCH_HOPPING_t flexran_get_hopping_mode(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pusch_config_common.hoppingMode; return RC.eNB[mod_id][cc_id]->frame_parms.pusch_config_common.hoppingMode;
} }
uint8_t flexran_get_n_SB(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_n_SB(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pusch_config_common.n_SB; return RC.eNB[mod_id][cc_id]->frame_parms.pusch_config_common.n_SB;
} }
uint8_t flexran_get_enable64QAM(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_enable64QAM(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pusch_config_common.enable64QAM; return RC.eNB[mod_id][cc_id]->frame_parms.pusch_config_common.enable64QAM;
} }
PHICH_DURATION_t flexran_get_phich_duration(mid_t mod_id, uint8_t cc_id) PHICH_DURATION_t flexran_get_phich_duration(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.phich_config_common.phich_duration; return RC.eNB[mod_id][cc_id]->frame_parms.phich_config_common.phich_duration;
} }
int flexran_get_phich_resource(mid_t mod_id, uint8_t cc_id) int flexran_get_phich_resource(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
/* TODO why don't we return phich_resource? */ /* TODO why don't we return phich_resource? */
switch (phy[mod_id][cc_id]->frame_parms.phich_config_common.phich_resource) { switch (RC.eNB[mod_id][cc_id]->frame_parms.phich_config_common.phich_resource) {
case oneSixth: case oneSixth:
return 0; return 0;
case half: case half:
...@@ -420,122 +407,122 @@ int flexran_get_phich_resource(mid_t mod_id, uint8_t cc_id) ...@@ -420,122 +407,122 @@ int flexran_get_phich_resource(mid_t mod_id, uint8_t cc_id)
uint16_t flexran_get_n1pucch_an(mid_t mod_id, uint8_t cc_id) uint16_t flexran_get_n1pucch_an(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pucch_config_common.n1PUCCH_AN; return RC.eNB[mod_id][cc_id]->frame_parms.pucch_config_common.n1PUCCH_AN;
} }
uint8_t flexran_get_nRB_CQI(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_nRB_CQI(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pucch_config_common.nRB_CQI; return RC.eNB[mod_id][cc_id]->frame_parms.pucch_config_common.nRB_CQI;
} }
uint8_t flexran_get_deltaPUCCH_Shift(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_deltaPUCCH_Shift(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pucch_config_common.deltaPUCCH_Shift; return RC.eNB[mod_id][cc_id]->frame_parms.pucch_config_common.deltaPUCCH_Shift;
} }
uint8_t flexran_get_prach_ConfigIndex(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_prach_ConfigIndex(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex; return RC.eNB[mod_id][cc_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
} }
uint8_t flexran_get_prach_FreqOffset(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_prach_FreqOffset(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset; return RC.eNB[mod_id][cc_id]->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset;
} }
uint8_t flexran_get_maxHARQ_Msg3Tx(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_maxHARQ_Msg3Tx(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.maxHARQ_Msg3Tx; return RC.eNB[mod_id][cc_id]->frame_parms.maxHARQ_Msg3Tx;
} }
lte_prefix_type_t flexran_get_ul_cyclic_prefix_length(mid_t mod_id, uint8_t cc_id) lte_prefix_type_t flexran_get_ul_cyclic_prefix_length(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.Ncp_UL; return RC.eNB[mod_id][cc_id]->frame_parms.Ncp_UL;
} }
lte_prefix_type_t flexran_get_dl_cyclic_prefix_length(mid_t mod_id, uint8_t cc_id) lte_prefix_type_t flexran_get_dl_cyclic_prefix_length(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.Ncp; return RC.eNB[mod_id][cc_id]->frame_parms.Ncp;
} }
uint16_t flexran_get_cell_id(mid_t mod_id, uint8_t cc_id) uint16_t flexran_get_cell_id(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.Nid_cell; return RC.eNB[mod_id][cc_id]->frame_parms.Nid_cell;
} }
uint8_t flexran_get_srs_BandwidthConfig(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_srs_BandwidthConfig(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.soundingrs_ul_config_common.srs_BandwidthConfig; return RC.eNB[mod_id][cc_id]->frame_parms.soundingrs_ul_config_common.srs_BandwidthConfig;
} }
uint8_t flexran_get_srs_SubframeConfig(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_srs_SubframeConfig(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.soundingrs_ul_config_common.srs_SubframeConfig; return RC.eNB[mod_id][cc_id]->frame_parms.soundingrs_ul_config_common.srs_SubframeConfig;
} }
uint8_t flexran_get_srs_MaxUpPts(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_srs_MaxUpPts(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.soundingrs_ul_config_common.srs_MaxUpPts; return RC.eNB[mod_id][cc_id]->frame_parms.soundingrs_ul_config_common.srs_MaxUpPts;
} }
uint8_t flexran_get_N_RB_DL(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_N_RB_DL(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.N_RB_DL; return RC.eNB[mod_id][cc_id]->frame_parms.N_RB_DL;
} }
uint8_t flexran_get_N_RB_UL(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_N_RB_UL(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.N_RB_UL; return RC.eNB[mod_id][cc_id]->frame_parms.N_RB_UL;
} }
uint8_t flexran_get_N_RBG(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_N_RBG(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.N_RBG; return RC.eNB[mod_id][cc_id]->frame_parms.N_RBG;
} }
uint8_t flexran_get_subframe_assignment(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_subframe_assignment(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.tdd_config; return RC.eNB[mod_id][cc_id]->frame_parms.tdd_config;
} }
uint8_t flexran_get_special_subframe_assignment(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_special_subframe_assignment(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.tdd_config_S; return RC.eNB[mod_id][cc_id]->frame_parms.tdd_config_S;
} }
long flexran_get_ra_ResponseWindowSize(mid_t mod_id, uint8_t cc_id) long flexran_get_ra_ResponseWindowSize(mid_t mod_id, uint8_t cc_id)
{ {
if (!rrc[mod_id]) return 0; if (!rrc_is_present(mod_id)) return 0;
return rrc[mod_id]->configuration.rach_raResponseWindowSize[cc_id]; return RC.rrc[mod_id]->configuration.rach_raResponseWindowSize[cc_id];
} }
long flexran_get_mac_ContentionResolutionTimer(mid_t mod_id, uint8_t cc_id) long flexran_get_mac_ContentionResolutionTimer(mid_t mod_id, uint8_t cc_id)
{ {
if (!rrc[mod_id]) return 0; if (!rrc_is_present(mod_id)) return 0;
return rrc[mod_id]->configuration.rach_macContentionResolutionTimer[cc_id]; return RC.rrc[mod_id]->configuration.rach_macContentionResolutionTimer[cc_id];
} }
Protocol__FlexDuplexMode flexran_get_duplex_mode(mid_t mod_id, uint8_t cc_id) Protocol__FlexDuplexMode flexran_get_duplex_mode(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
switch (phy[mod_id][cc_id]->frame_parms.frame_type) { switch (RC.eNB[mod_id][cc_id]->frame_parms.frame_type) {
case TDD: case TDD:
return PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD; return PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD;
case FDD: case FDD:
...@@ -547,21 +534,21 @@ Protocol__FlexDuplexMode flexran_get_duplex_mode(mid_t mod_id, uint8_t cc_id) ...@@ -547,21 +534,21 @@ Protocol__FlexDuplexMode flexran_get_duplex_mode(mid_t mod_id, uint8_t cc_id)
long flexran_get_si_window_length(mid_t mod_id, uint8_t cc_id) long flexran_get_si_window_length(mid_t mod_id, uint8_t cc_id)
{ {
if (!rrc[mod_id] || !rrc[mod_id]->carrier[cc_id].sib1) return 0; if (!rrc_is_present(mod_id) || !RC.rrc[mod_id]->carrier[cc_id].sib1) return 0;
return rrc[mod_id]->carrier[cc_id].sib1->si_WindowLength; return RC.rrc[mod_id]->carrier[cc_id].sib1->si_WindowLength;
} }
uint8_t flexran_get_sib1_length(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_sib1_length(mid_t mod_id, uint8_t cc_id)
{ {
if (!rrc[mod_id]) return 0; if (!rrc_is_present(mod_id)) return 0;
return rrc[mod_id]->carrier[cc_id].sizeof_SIB1; return RC.rrc[mod_id]->carrier[cc_id].sizeof_SIB1;
} }
uint8_t flexran_get_num_pdcch_symb(mid_t mod_id, uint8_t cc_id) { uint8_t flexran_get_num_pdcch_symb(mid_t mod_id, uint8_t cc_id) {
/* TODO: This should return the number of PDCCH symbols initially used by the /* TODO: This should return the number of PDCCH symbols initially used by the
* cell cc_id -> is the correction right? */ * cell cc_id -> is the correction right? */
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->pdcch_vars[0].num_pdcch_symbols; return RC.eNB[mod_id][cc_id]->pdcch_vars[0].num_pdcch_symbols;
//(PHY_vars_UE_g[mod_id][cc_id]->lte_ue_pdcch_vars[mod_id]->num_pdcch_symbols); //(PHY_vars_UE_g[mod_id][cc_id]->lte_ue_pdcch_vars[mod_id]->num_pdcch_symbols);
} }
...@@ -576,10 +563,10 @@ uint8_t flexran_get_num_pdcch_symb(mid_t mod_id, uint8_t cc_id) { ...@@ -576,10 +563,10 @@ uint8_t flexran_get_num_pdcch_symb(mid_t mod_id, uint8_t cc_id) {
TimeAlignmentTimer_t flexran_get_time_alignment_timer(mid_t mod_id, mid_t ue_id) TimeAlignmentTimer_t flexran_get_time_alignment_timer(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.mac_MainConfig) return -1; if (!ue_context_p->ue_context.mac_MainConfig) return -1;
...@@ -588,10 +575,10 @@ TimeAlignmentTimer_t flexran_get_time_alignment_timer(mid_t mod_id, mid_t ue_id) ...@@ -588,10 +575,10 @@ TimeAlignmentTimer_t flexran_get_time_alignment_timer(mid_t mod_id, mid_t ue_id)
Protocol__FlexMeasGapConfigPattern flexran_get_meas_gap_config(mid_t mod_id, mid_t ue_id) Protocol__FlexMeasGapConfigPattern flexran_get_meas_gap_config(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measGapConfig) return -1; if (!ue_context_p->ue_context.measGapConfig) return -1;
...@@ -609,10 +596,10 @@ Protocol__FlexMeasGapConfigPattern flexran_get_meas_gap_config(mid_t mod_id, mid ...@@ -609,10 +596,10 @@ Protocol__FlexMeasGapConfigPattern flexran_get_meas_gap_config(mid_t mod_id, mid
long flexran_get_meas_gap_config_offset(mid_t mod_id, mid_t ue_id) long flexran_get_meas_gap_config_offset(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measGapConfig) return -1; if (!ue_context_p->ue_context.measGapConfig) return -1;
...@@ -631,9 +618,9 @@ long flexran_get_meas_gap_config_offset(mid_t mod_id, mid_t ue_id) ...@@ -631,9 +618,9 @@ long flexran_get_meas_gap_config_offset(mid_t mod_id, mid_t ue_id)
/* TODO return type is unsigned, so we cannot return -1 in case of error! */ /* TODO return type is unsigned, so we cannot return -1 in case of error! */
uint8_t flexran_get_rrc_status(mid_t mod_id, rnti_t rnti) uint8_t flexran_get_rrc_status(mid_t mod_id, rnti_t rnti)
{ {
if (!rrc[mod_id]) return 0; if (!rrc_is_present(mod_id)) return 0;
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return RRC_INACTIVE; if (!ue_context_p) return RRC_INACTIVE;
return ue_context_p->ue_context.Status; return ue_context_p->ue_context.Status;
...@@ -641,14 +628,14 @@ uint8_t flexran_get_rrc_status(mid_t mod_id, rnti_t rnti) ...@@ -641,14 +628,14 @@ uint8_t flexran_get_rrc_status(mid_t mod_id, rnti_t rnti)
uint64_t flexran_get_ue_aggregated_max_bitrate_dl(mid_t mod_id, mid_t ue_id) uint64_t flexran_get_ue_aggregated_max_bitrate_dl(mid_t mod_id, mid_t ue_id)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->UE_sched_ctrl[ue_id].ue_AggregatedMaximumBitrateDL; return RC.mac[mod_id]->UE_list.UE_sched_ctrl[ue_id].ue_AggregatedMaximumBitrateDL;
} }
uint64_t flexran_get_ue_aggregated_max_bitrate_ul(mid_t mod_id, mid_t ue_id) uint64_t flexran_get_ue_aggregated_max_bitrate_ul(mid_t mod_id, mid_t ue_id)
{ {
if (!UE_list[mod_id]) return 0; if (!mac_is_present(mod_id)) return 0;
return UE_list[mod_id]->UE_sched_ctrl[ue_id].ue_AggregatedMaximumBitrateUL; return RC.mac[mod_id]->UE_list.UE_sched_ctrl[ue_id].ue_AggregatedMaximumBitrateUL;
} }
int flexran_get_half_duplex(mid_t ue_id) int flexran_get_half_duplex(mid_t ue_id)
...@@ -704,10 +691,10 @@ int flexran_get_res_alloc_type1(mid_t ue_id) ...@@ -704,10 +691,10 @@ int flexran_get_res_alloc_type1(mid_t ue_id)
long flexran_get_ue_transmission_mode(mid_t mod_id, mid_t ue_id) long flexran_get_ue_transmission_mode(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -717,10 +704,10 @@ long flexran_get_ue_transmission_mode(mid_t mod_id, mid_t ue_id) ...@@ -717,10 +704,10 @@ long flexran_get_ue_transmission_mode(mid_t mod_id, mid_t ue_id)
BOOLEAN_t flexran_get_tti_bundling(mid_t mod_id, mid_t ue_id) BOOLEAN_t flexran_get_tti_bundling(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.mac_MainConfig) return -1; if (!ue_context_p->ue_context.mac_MainConfig) return -1;
if (!ue_context_p->ue_context.mac_MainConfig->ul_SCH_Config) return -1; if (!ue_context_p->ue_context.mac_MainConfig->ul_SCH_Config) return -1;
...@@ -729,10 +716,10 @@ BOOLEAN_t flexran_get_tti_bundling(mid_t mod_id, mid_t ue_id) ...@@ -729,10 +716,10 @@ BOOLEAN_t flexran_get_tti_bundling(mid_t mod_id, mid_t ue_id)
long flexran_get_maxHARQ_TX(mid_t mod_id, mid_t ue_id) long flexran_get_maxHARQ_TX(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.mac_MainConfig) return -1; if (!ue_context_p->ue_context.mac_MainConfig) return -1;
...@@ -742,10 +729,10 @@ long flexran_get_maxHARQ_TX(mid_t mod_id, mid_t ue_id) ...@@ -742,10 +729,10 @@ long flexran_get_maxHARQ_TX(mid_t mod_id, mid_t ue_id)
long flexran_get_beta_offset_ack_index(mid_t mod_id, mid_t ue_id) long flexran_get_beta_offset_ack_index(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -755,10 +742,10 @@ long flexran_get_beta_offset_ack_index(mid_t mod_id, mid_t ue_id) ...@@ -755,10 +742,10 @@ long flexran_get_beta_offset_ack_index(mid_t mod_id, mid_t ue_id)
long flexran_get_beta_offset_ri_index(mid_t mod_id, mid_t ue_id) long flexran_get_beta_offset_ri_index(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -768,10 +755,10 @@ long flexran_get_beta_offset_ri_index(mid_t mod_id, mid_t ue_id) ...@@ -768,10 +755,10 @@ long flexran_get_beta_offset_ri_index(mid_t mod_id, mid_t ue_id)
long flexran_get_beta_offset_cqi_index(mid_t mod_id, mid_t ue_id) long flexran_get_beta_offset_cqi_index(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -781,10 +768,10 @@ long flexran_get_beta_offset_cqi_index(mid_t mod_id, mid_t ue_id) ...@@ -781,10 +768,10 @@ long flexran_get_beta_offset_cqi_index(mid_t mod_id, mid_t ue_id)
BOOLEAN_t flexran_get_simultaneous_ack_nack_cqi(mid_t mod_id, mid_t ue_id) BOOLEAN_t flexran_get_simultaneous_ack_nack_cqi(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -795,17 +782,17 @@ BOOLEAN_t flexran_get_simultaneous_ack_nack_cqi(mid_t mod_id, mid_t ue_id) ...@@ -795,17 +782,17 @@ BOOLEAN_t flexran_get_simultaneous_ack_nack_cqi(mid_t mod_id, mid_t ue_id)
BOOLEAN_t flexran_get_ack_nack_simultaneous_trans(mid_t mod_id, mid_t ue_id, uint8_t cc_id) BOOLEAN_t flexran_get_ack_nack_simultaneous_trans(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
if (!rrc[mod_id]->carrier[cc_id].sib2) return -1; if (!RC.rrc[mod_id]->carrier[cc_id].sib2) return -1;
return rrc[mod_id]->carrier[cc_id].sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission; return RC.rrc[mod_id]->carrier[cc_id].sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission;
} }
CQI_ReportModeAperiodic_t flexran_get_aperiodic_cqi_rep_mode(mid_t mod_id,mid_t ue_id) CQI_ReportModeAperiodic_t flexran_get_aperiodic_cqi_rep_mode(mid_t mod_id,mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -815,10 +802,10 @@ CQI_ReportModeAperiodic_t flexran_get_aperiodic_cqi_rep_mode(mid_t mod_id,mid_t ...@@ -815,10 +802,10 @@ CQI_ReportModeAperiodic_t flexran_get_aperiodic_cqi_rep_mode(mid_t mod_id,mid_t
long flexran_get_tdd_ack_nack_feedback_mode(mid_t mod_id, mid_t ue_id) long flexran_get_tdd_ack_nack_feedback_mode(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -829,10 +816,10 @@ long flexran_get_tdd_ack_nack_feedback_mode(mid_t mod_id, mid_t ue_id) ...@@ -829,10 +816,10 @@ long flexran_get_tdd_ack_nack_feedback_mode(mid_t mod_id, mid_t ue_id)
long flexran_get_ack_nack_repetition_factor(mid_t mod_id, mid_t ue_id) long flexran_get_ack_nack_repetition_factor(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -842,10 +829,10 @@ long flexran_get_ack_nack_repetition_factor(mid_t mod_id, mid_t ue_id) ...@@ -842,10 +829,10 @@ long flexran_get_ack_nack_repetition_factor(mid_t mod_id, mid_t ue_id)
long flexran_get_extended_bsr_size(mid_t mod_id, mid_t ue_id) long flexran_get_extended_bsr_size(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.mac_MainConfig) return -1; if (!ue_context_p->ue_context.mac_MainConfig) return -1;
...@@ -856,10 +843,10 @@ long flexran_get_extended_bsr_size(mid_t mod_id, mid_t ue_id) ...@@ -856,10 +843,10 @@ long flexran_get_extended_bsr_size(mid_t mod_id, mid_t ue_id)
int flexran_get_ue_transmission_antenna(mid_t mod_id, mid_t ue_id) int flexran_get_ue_transmission_antenna(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.physicalConfigDedicated) return -1; if (!ue_context_p->ue_context.physicalConfigDedicated) return -1;
...@@ -900,92 +887,112 @@ int flexran_get_direction(mid_t ue_id, mid_t lc_id) ...@@ -900,92 +887,112 @@ int flexran_get_direction(mid_t ue_id, mid_t lc_id)
uint8_t flexran_get_antenna_ports(mid_t mod_id, uint8_t cc_id) uint8_t flexran_get_antenna_ports(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.nb_antenna_ports_eNB; return RC.eNB[mod_id][cc_id]->frame_parms.nb_antenna_ports_eNB;
} }
/* TODO better give real value (without division)? */ /* TODO better give real value (without division)? */
uint32_t flexran_agent_get_operating_dl_freq(mid_t mod_id, uint8_t cc_id) uint32_t flexran_agent_get_operating_dl_freq(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.dl_CarrierFreq / 1000000; return RC.eNB[mod_id][cc_id]->frame_parms.dl_CarrierFreq / 1000000;
} }
/* TODO better give real value (without division)? */ /* TODO better give real value (without division)? */
uint32_t flexran_agent_get_operating_ul_freq(mid_t mod_id, uint8_t cc_id) uint32_t flexran_agent_get_operating_ul_freq(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.ul_CarrierFreq / 1000000; return RC.eNB[mod_id][cc_id]->frame_parms.ul_CarrierFreq / 1000000;
} }
uint8_t flexran_agent_get_operating_eutra_band(mid_t mod_id, uint8_t cc_id) uint8_t flexran_agent_get_operating_eutra_band(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.eutra_band; return RC.eNB[mod_id][cc_id]->frame_parms.eutra_band;
} }
int8_t flexran_agent_get_operating_pdsch_refpower(mid_t mod_id, uint8_t cc_id) int8_t flexran_agent_get_operating_pdsch_refpower(mid_t mod_id, uint8_t cc_id)
{ {
if (!phy[mod_id][cc_id]) return 0; if (!phy_is_present(mod_id, cc_id)) return 0;
return phy[mod_id][cc_id]->frame_parms.pdsch_config_common.referenceSignalPower; return RC.eNB[mod_id][cc_id]->frame_parms.pdsch_config_common.referenceSignalPower;
} }
long flexran_agent_get_operating_pusch_p0(mid_t mod_id, uint8_t cc_id) long flexran_agent_get_operating_pusch_p0(mid_t mod_id, uint8_t cc_id)
{ {
if (!rrc[mod_id]) return 0; if (!rrc_is_present(mod_id)) return 0;
return rrc[mod_id]->configuration.pusch_p0_Nominal[cc_id]; return RC.rrc[mod_id]->configuration.pusch_p0_Nominal[cc_id];
} }
void flexran_agent_set_operating_dl_freq(mid_t mod_id, uint8_t cc_id, uint32_t dl_freq_mhz) void flexran_agent_set_operating_dl_freq(mid_t mod_id, uint8_t cc_id, uint32_t dl_freq_mhz)
{ {
if (phy[mod_id][cc_id]) { if (phy_is_present(mod_id, cc_id)) {
phy[mod_id][cc_id]->frame_parms.dl_CarrierFreq = dl_freq_mhz * 1000000; RC.eNB[mod_id][cc_id]->frame_parms.dl_CarrierFreq = dl_freq_mhz * 1000000;
} else {
LOG_E(FLEXRAN_AGENT, "can not set dl_CarrierFreq to %d MHz in PHY: PHY is not present\n", dl_freq_mhz);
} }
if (rrc[mod_id]) { if (rrc_is_present(mod_id)) {
rrc[mod_id]->configuration.downlink_frequency[cc_id] = dl_freq_mhz * 1000000; RC.rrc[mod_id]->configuration.downlink_frequency[cc_id] = dl_freq_mhz * 1000000;
} else {
LOG_E(FLEXRAN_AGENT, "can not set downlink_frequency to %d MHz in RRC: RRC is not present\n", dl_freq_mhz);
} }
} }
void flexran_agent_set_operating_ul_freq(mid_t mod_id, uint8_t cc_id, int32_t ul_freq_mhz_offset) void flexran_agent_set_operating_ul_freq(mid_t mod_id, uint8_t cc_id, int32_t ul_freq_mhz_offset)
{ {
if (phy[mod_id][cc_id]) { if (phy_is_present(mod_id, cc_id)) {
uint32_t new_ul_freq_mhz = flexran_agent_get_operating_dl_freq(mod_id, cc_id) + ul_freq_mhz_offset; uint32_t new_ul_freq_mhz = flexran_agent_get_operating_dl_freq(mod_id, cc_id) + ul_freq_mhz_offset;
phy[mod_id][cc_id]->frame_parms.ul_CarrierFreq = new_ul_freq_mhz * 1000000; RC.eNB[mod_id][cc_id]->frame_parms.ul_CarrierFreq = new_ul_freq_mhz * 1000000;
} else {
LOG_E(FLEXRAN_AGENT, "can not set ul_CarrierFreq using offset %d MHz in PHY: PHY is not present\n", ul_freq_mhz_offset);
} }
if (rrc[mod_id]) { if (rrc_is_present(mod_id)) {
rrc[mod_id]->configuration.uplink_frequency_offset[cc_id] = ul_freq_mhz_offset; RC.rrc[mod_id]->configuration.uplink_frequency_offset[cc_id] = ul_freq_mhz_offset;
} else {
LOG_E(FLEXRAN_AGENT, "can not set uplink_frequency_offset to %d MHz in RRC: RRC is not present\n", ul_freq_mhz_offset);
} }
} }
void flexran_agent_set_operating_eutra_band(mid_t mod_id, uint8_t cc_id, uint8_t eutra_band) void flexran_agent_set_operating_eutra_band(mid_t mod_id, uint8_t cc_id, uint8_t eutra_band)
{ {
if (phy[mod_id][cc_id]) { if (phy_is_present(mod_id, cc_id)) {
phy[mod_id][cc_id]->frame_parms.eutra_band = eutra_band; RC.eNB[mod_id][cc_id]->frame_parms.eutra_band = eutra_band;
} else {
LOG_E(FLEXRAN_AGENT, "can not set eutra_band to %d in PHY: PHY is not present\n", eutra_band);
} }
if (rrc[mod_id]) { if (rrc_is_present(mod_id)) {
rrc[mod_id]->configuration.eutra_band[cc_id] = eutra_band; RC.rrc[mod_id]->configuration.eutra_band[cc_id] = eutra_band;
} else {
LOG_E(FLEXRAN_AGENT, "can not set eutra_band to %d in RRC: RRC is not present\n", eutra_band);
} }
} }
/* Sets both DL/UL */ /* Sets both DL/UL */
void flexran_agent_set_operating_bandwidth(mid_t mod_id, uint8_t cc_id, uint8_t N_RB) void flexran_agent_set_operating_bandwidth(mid_t mod_id, uint8_t cc_id, uint8_t N_RB)
{ {
if (phy[mod_id][cc_id]) { if (phy_is_present(mod_id, cc_id)) {
phy[mod_id][cc_id]->frame_parms.N_RB_DL = N_RB; RC.eNB[mod_id][cc_id]->frame_parms.N_RB_DL = N_RB;
phy[mod_id][cc_id]->frame_parms.N_RB_UL = N_RB; RC.eNB[mod_id][cc_id]->frame_parms.N_RB_UL = N_RB;
} else {
LOG_E(FLEXRAN_AGENT, "can not set N_RB_DL and N_RB_UL to %d in PHY: PHY is not present\n", N_RB);
} }
if (rrc[mod_id]) { if (rrc_is_present(mod_id)) {
rrc[mod_id]->configuration.N_RB_DL[cc_id] = N_RB; RC.rrc[mod_id]->configuration.N_RB_DL[cc_id] = N_RB;
} else {
LOG_E(FLEXRAN_AGENT, "can not set N_RB_DL to %d in RRC: RRC is not present\n", N_RB);
} }
} }
void flexran_agent_set_operating_frame_type(mid_t mod_id, uint8_t cc_id, lte_frame_type_t frame_type) void flexran_agent_set_operating_frame_type(mid_t mod_id, uint8_t cc_id, lte_frame_type_t frame_type)
{ {
if (phy[mod_id][cc_id]) { if (phy_is_present(mod_id, cc_id)) {
phy[mod_id][cc_id]->frame_parms.frame_type = frame_type; RC.eNB[mod_id][cc_id]->frame_parms.frame_type = frame_type;
} else {
LOG_E(FLEXRAN_AGENT, "can not set frame_type to %d in PHY: PHY is not present\n", frame_type);
} }
if (rrc[mod_id]) { if (rrc_is_present(mod_id)) {
rrc[mod_id]->configuration.frame_type[cc_id] = frame_type; RC.rrc[mod_id]->configuration.frame_type[cc_id] = frame_type;
} else {
LOG_E(FLEXRAN_AGENT, "can not set frame_type to %d in RRC: RRC is not present\n", frame_type);
} }
} }
...@@ -1097,10 +1104,10 @@ uint32_t flexran_get_pdcp_rx_oo(const mid_t mod_id, const mid_t ue_id, const lc ...@@ -1097,10 +1104,10 @@ uint32_t flexran_get_pdcp_rx_oo(const mid_t mod_id, const mid_t ue_id, const lc
MeasId_t flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id) MeasId_t flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measResults) return -1; if (!ue_context_p->ue_context.measResults) return -1;
...@@ -1109,10 +1116,10 @@ MeasId_t flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id) ...@@ -1109,10 +1116,10 @@ MeasId_t flexran_get_rrc_pcell_measid(mid_t mod_id, mid_t ue_id)
float flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id) float flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measResults) return -1; if (!ue_context_p->ue_context.measResults) return -1;
...@@ -1121,10 +1128,10 @@ float flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id) ...@@ -1121,10 +1128,10 @@ float flexran_get_rrc_pcell_rsrp(mid_t mod_id, mid_t ue_id)
float flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id) float flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measResults) return -1; if (!ue_context_p->ue_context.measResults) return -1;
...@@ -1134,10 +1141,10 @@ float flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id) ...@@ -1134,10 +1141,10 @@ float flexran_get_rrc_pcell_rsrq(mid_t mod_id, mid_t ue_id)
/*Number of neighbouring cells for specific UE*/ /*Number of neighbouring cells for specific UE*/
int flexran_get_rrc_num_ncell(mid_t mod_id, mid_t ue_id) int flexran_get_rrc_num_ncell(mid_t mod_id, mid_t ue_id)
{ {
if (!rrc[mod_id]) return 0; if (!rrc_is_present(mod_id)) return 0;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return 0; if (!ue_context_p) return 0;
if (!ue_context_p->ue_context.measResults) return 0; if (!ue_context_p->ue_context.measResults) return 0;
...@@ -1148,10 +1155,10 @@ int flexran_get_rrc_num_ncell(mid_t mod_id, mid_t ue_id) ...@@ -1148,10 +1155,10 @@ int flexran_get_rrc_num_ncell(mid_t mod_id, mid_t ue_id)
PhysCellId_t flexran_get_rrc_neigh_phy_cell_id(mid_t mod_id, mid_t ue_id, int cell_id) PhysCellId_t flexran_get_rrc_neigh_phy_cell_id(mid_t mod_id, mid_t ue_id, int cell_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measResults) return -1; if (!ue_context_p->ue_context.measResults) return -1;
...@@ -1163,10 +1170,10 @@ PhysCellId_t flexran_get_rrc_neigh_phy_cell_id(mid_t mod_id, mid_t ue_id, int ce ...@@ -1163,10 +1170,10 @@ PhysCellId_t flexran_get_rrc_neigh_phy_cell_id(mid_t mod_id, mid_t ue_id, int ce
float flexran_get_rrc_neigh_rsrp(mid_t mod_id, mid_t ue_id, int cell_id) float flexran_get_rrc_neigh_rsrp(mid_t mod_id, mid_t ue_id, int cell_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measResults) return -1; if (!ue_context_p->ue_context.measResults) return -1;
...@@ -1179,10 +1186,10 @@ float flexran_get_rrc_neigh_rsrp(mid_t mod_id, mid_t ue_id, int cell_id) ...@@ -1179,10 +1186,10 @@ float flexran_get_rrc_neigh_rsrp(mid_t mod_id, mid_t ue_id, int cell_id)
float flexran_get_rrc_neigh_rsrq(mid_t mod_id, mid_t ue_id, int cell_id) float flexran_get_rrc_neigh_rsrq(mid_t mod_id, mid_t ue_id, int cell_id)
{ {
if (!rrc[mod_id]) return -1; if (!rrc_is_present(mod_id)) return -1;
rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id); rnti_t rnti = flexran_get_ue_crnti(mod_id,ue_id);
struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(rrc[mod_id], rnti); struct rrc_eNB_ue_context_s* ue_context_p = rrc_eNB_get_ue_context(RC.rrc[mod_id], rnti);
if (!ue_context_p) return -1; if (!ue_context_p) return -1;
if (!ue_context_p->ue_context.measResults) return -1; if (!ue_context_p->ue_context.measResults) return -1;
......
...@@ -50,8 +50,6 @@ ...@@ -50,8 +50,6 @@
* get generic info from RAN * get generic info from RAN
****************************/ ****************************/
void flexran_set_RC_vars(mid_t mod_id, ran_name_t ran);
uint32_t flexran_get_current_time_ms(mid_t mod_id, int subframe_flag); uint32_t flexran_get_current_time_ms(mid_t mod_id, int subframe_flag);
/*Return the current frame number /*Return the current frame number
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment