diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c index 682105d0975c52277a0c1c18e01da5a1daa40713..b1f70a0822f1dc1d5cfe4bbf498f843c5859d72f 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c +++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.c @@ -1358,6 +1358,20 @@ int flexran_agent_register_mac_xface(mid_t mod_id) return 0; } +void flexran_agent_fill_mac_cell_config(mid_t mod_id, uint8_t cc_id, + Protocol__FlexCellConfig *conf) { + if (!conf->si_config) { + conf->si_config = malloc(sizeof(Protocol__FlexSiConfig)); + if (conf->si_config) + protocol__flex_si_config__init(conf->si_config); + } + + if (conf->si_config) { + conf->si_config->sfn = flexran_get_current_system_frame_num(mod_id); + conf->si_config->has_sfn = 1; + } +} + int flexran_agent_unregister_mac_xface(mid_t mod_id) { if (!agent_mac_xface[mod_id]) { diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h index cabd6f949b1b00aa8197e331fcb53e444bdc7845..af93674f0c8a7f5c0bd7acc6f23e915aad87508e 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h +++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac.h @@ -83,6 +83,10 @@ void flexran_agent_send_update_mac_stats(mid_t mod_id); /// Provide to the scheduler a pending dl_mac_config message void flexran_agent_get_pending_dl_mac_config(mid_t mod_id, Protocol__FlexranMessage **msg); +/* Fill the MAC part of an cell_config message */ +void flexran_agent_fill_mac_cell_config(mid_t mod_id, uint8_t cc_id, + Protocol__FlexCellConfig *conf); + /*Register technology specific interface callbacks*/ int flexran_agent_register_mac_xface(mid_t mod_id); diff --git a/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c b/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c index 745659c949e3f8ce80203e25bb4f842f7fcbddae..2f8726293813d900635ed893584c2ecb16049c1e 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c +++ b/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.c @@ -26,17 +26,133 @@ */ #include "flexran_agent_phy.h" +#include "flexran_agent_ran_api.h" /* Array containing the Agent-PHY interfaces */ AGENT_PHY_xface *agent_phy_xface[NUM_MAX_ENB]; -int flexran_agent_register_phy_xface(mid_t mod_id) -{ +void flexran_agent_fill_phy_cell_config(mid_t mod_id, uint8_t cc_id, + Protocol__FlexCellConfig *conf) { + conf->phy_cell_id = flexran_get_cell_id(mod_id, cc_id); + conf->has_phy_cell_id = 1; + + conf->pusch_hopping_offset = flexran_get_hopping_offset(mod_id, cc_id); + conf->has_pusch_hopping_offset = 1; + + conf->hopping_mode = flexran_get_hopping_mode(mod_id, cc_id); + conf->has_hopping_mode = 1; + + conf->n_sb = flexran_get_n_SB(mod_id, cc_id); + conf->has_n_sb = 1; + + conf->phich_resource = flexran_get_phich_resource(mod_id, cc_id); + conf->has_phich_resource = 1; + + conf->phich_duration = flexran_get_phich_duration(mod_id, cc_id); + conf->has_phich_duration = 1; + + conf->init_nr_pdcch_ofdm_sym = flexran_get_num_pdcch_symb(mod_id, cc_id); + conf->has_init_nr_pdcch_ofdm_sym = 1; + + conf->dl_bandwidth = flexran_get_N_RB_DL(mod_id, cc_id); + conf->has_dl_bandwidth = 1; + + conf->ul_bandwidth = flexran_get_N_RB_UL(mod_id, cc_id); + conf->has_ul_bandwidth = 1; + + conf->ul_cyclic_prefix_length = flexran_get_ul_cyclic_prefix_length(mod_id, cc_id); + conf->has_ul_cyclic_prefix_length = 1; + + conf->dl_cyclic_prefix_length = flexran_get_dl_cyclic_prefix_length(mod_id, cc_id); + conf->has_dl_cyclic_prefix_length = 1; + + conf->antenna_ports_count = flexran_get_antenna_ports(mod_id, cc_id); + conf->has_antenna_ports_count = 1; + + conf->duplex_mode = flexran_get_duplex_mode(mod_id, cc_id); + conf->has_duplex_mode = 1; + + conf->subframe_assignment = flexran_get_subframe_assignment(mod_id, cc_id); + conf->has_subframe_assignment = 1; + + conf->special_subframe_patterns = flexran_get_special_subframe_assignment(mod_id, cc_id); + conf->has_special_subframe_patterns = 1; + + //TODO: Fill in with actual value, The MBSFN radio frame period + conf->n_mbsfn_subframe_config_rfperiod = 0; + uint32_t *elem_rfperiod = malloc(sizeof(uint32_t) * conf->n_mbsfn_subframe_config_rfperiod); + if (elem_rfperiod) + for(int j = 0; j < conf->n_mbsfn_subframe_config_rfperiod; j++) + elem_rfperiod[j] = 1; + conf->mbsfn_subframe_config_rfperiod = elem_rfperiod; + + //TODO: Fill in with actual value, The MBSFN radio frame offset + conf->n_mbsfn_subframe_config_rfoffset = 0; + uint32_t *elem_rfoffset = malloc(sizeof(uint32_t) * conf->n_mbsfn_subframe_config_rfoffset); + if (elem_rfoffset) + for(int j = 0; j < conf->n_mbsfn_subframe_config_rfoffset; j++) + elem_rfoffset[j] = 1; + conf->mbsfn_subframe_config_rfoffset = elem_rfoffset; + + //TODO: Fill in with actual value, Bitmap indicating the MBSFN subframes + conf->n_mbsfn_subframe_config_sfalloc = 0; + uint32_t *elem_sfalloc = malloc(sizeof(uint32_t) * conf->n_mbsfn_subframe_config_sfalloc); + if (elem_sfalloc) + for(int j = 0; j < conf->n_mbsfn_subframe_config_sfalloc; j++) + elem_sfalloc[j] = 1; + conf->mbsfn_subframe_config_sfalloc = elem_sfalloc; + + conf->prach_config_index = flexran_get_prach_ConfigIndex(mod_id, cc_id); + conf->has_prach_config_index = 1; + + conf->prach_freq_offset = flexran_get_prach_FreqOffset(mod_id, cc_id); + conf->has_prach_freq_offset = 1; + + conf->max_harq_msg3tx = flexran_get_maxHARQ_Msg3Tx(mod_id, cc_id); + conf->has_max_harq_msg3tx = 1; + + conf->n1pucch_an = flexran_get_n1pucch_an(mod_id, cc_id); + conf->has_n1pucch_an = 1; + + conf->deltapucch_shift = flexran_get_deltaPUCCH_Shift(mod_id, cc_id); + conf->has_deltapucch_shift = 1; + + conf->nrb_cqi = flexran_get_nRB_CQI(mod_id, cc_id); + conf->has_nrb_cqi = 1; + + conf->srs_subframe_config = flexran_get_srs_SubframeConfig(mod_id, cc_id); + conf->has_srs_subframe_config = 1; + + conf->srs_bw_config = flexran_get_srs_BandwidthConfig(mod_id, cc_id); + conf->has_srs_bw_config = 1; + + conf->srs_mac_up_pts = flexran_get_srs_MaxUpPts(mod_id, cc_id); + conf->has_srs_mac_up_pts = 1; + + conf->dl_freq = flexran_agent_get_operating_dl_freq (mod_id, cc_id); + conf->has_dl_freq = 1; + + conf->ul_freq = flexran_agent_get_operating_ul_freq (mod_id, cc_id); + conf->has_ul_freq = 1; + + conf->eutra_band = flexran_agent_get_operating_eutra_band (mod_id, cc_id); + conf->has_eutra_band = 1; + + conf->dl_pdsch_power = flexran_agent_get_operating_pdsch_refpower(mod_id, cc_id); + conf->has_dl_pdsch_power = 1; + + conf->enable_64qam = flexran_get_enable64QAM(mod_id, cc_id); + conf->has_enable_64qam = 1; +} + +int flexran_agent_register_phy_xface(mid_t mod_id) { if (agent_phy_xface[mod_id]) { LOG_E(PHY, "PHY agent for eNB %d is already registered\n", mod_id); return -1; } + AGENT_PHY_xface *xface = malloc(sizeof(AGENT_PHY_xface)); + if (!xface) { LOG_E(FLEXRAN_AGENT, "could not allocate memory for PHY agent xface %d\n", mod_id); return -1; diff --git a/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.h b/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.h index 26a658a9431942b82328500701230ff1af26dfce..25b3deac35fbb9b27f3f143c700bb7f4a8148e10 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.h +++ b/openair2/ENB_APP/CONTROL_MODULES/PHY/flexran_agent_phy.h @@ -45,6 +45,10 @@ * FlexRAN agent - technology PHY API **********************************/ +/* Fill the PHY part of an cell_config message */ +void flexran_agent_fill_phy_cell_config(mid_t mod_id, uint8_t cc_id, + Protocol__FlexCellConfig *conf); + /* Register technology specific interface callbacks */ int flexran_agent_register_phy_xface(mid_t mod_id); diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c index c485410b35a48949242450fe1baf51a939dc7d35..2e6f330275282874ad3fb26f74e92788a7be7202 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c +++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.c @@ -27,7 +27,7 @@ */ #include "flexran_agent_rrc.h" - +#include "flexran_agent_ran_api.h" #include "liblfds700.h" @@ -662,6 +662,59 @@ int flexran_agent_register_rrc_xface(mid_t mod_id) return 0; } +void flexran_agent_fill_rrc_cell_config(mid_t mod_id, uint8_t cc_id, + Protocol__FlexCellConfig *conf) { + conf->cell_id = cc_id; + conf->has_cell_id = 1; + + if (!conf->si_config) { + conf->si_config = malloc(sizeof(Protocol__FlexSiConfig)); + if (conf->si_config) + protocol__flex_si_config__init(conf->si_config); + } + + if (conf->si_config) { + // TODO THIS IS DU RRC + conf->si_config->sib1_length = flexran_get_sib1_length(mod_id, cc_id); + conf->si_config->has_sib1_length = 1; + + conf->si_config->si_window_length = (uint32_t) flexran_get_si_window_length(mod_id, cc_id); + conf->si_config->has_si_window_length = 1; + + conf->si_config->n_si_message = 0; + + /* Protocol__FlexSiMessage **si_message; */ + /* si_message = malloc(sizeof(Protocol__FlexSiMessage *) * si_config->n_si_message); */ + /* if(si_message == NULL) */ + /* goto error; */ + /* for(j = 0; j < si_config->n_si_message; j++){ */ + /* si_message[j] = malloc(sizeof(Protocol__FlexSiMessage)); */ + /* if(si_message[j] == NULL) */ + /* goto error; */ + /* protocol__flex_si_message__init(si_message[j]); */ + /* //TODO: Fill in with actual value, Periodicity of SI msg in radio frames */ + /* si_message[j]->periodicity = 1; //SIPeriod */ + /* si_message[j]->has_periodicity = 1; */ + /* //TODO: Fill in with actual value, rhe length of the SI message in bytes */ + /* si_message[j]->length = 10; */ + /* si_message[j]->has_length = 1; */ + /* } */ + /* if(si_config->n_si_message > 0){ */ + /* si_config->si_message = si_message; */ + /* } */ + } + + conf->ra_response_window_size = flexran_get_ra_ResponseWindowSize(mod_id, cc_id); + conf->has_ra_response_window_size = 1; + + // belongs to MAC but is read in RRC + conf->mac_contention_resolution_timer = flexran_get_mac_ContentionResolutionTimer(mod_id, cc_id); + conf->has_mac_contention_resolution_timer = 1; + + conf->ul_pusch_power = flexran_agent_get_operating_pusch_p0 (mod_id, cc_id); + conf->has_ul_pusch_power = 1; +} + int flexran_agent_unregister_rrc_xface(mid_t mod_id) { if (!agent_rrc_xface[mod_id]) { diff --git a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h index d1a0c8f4235f88124f3e84363c838509683a8151..a9b2ac49ccbb7c0137fbab3ca0e6dc34ea446ba2 100644 --- a/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h +++ b/openair2/ENB_APP/CONTROL_MODULES/RRC/flexran_agent_rrc.h @@ -60,6 +60,10 @@ void flexran_trigger_rrc_measurements (mid_t mod_id, MeasResults_t *); int flexran_agent_rrc_stats_reply(mid_t mod_id, const report_config_t *report_config, Protocol__FlexUeStatsReport **ue_report, Protocol__FlexCellStatsReport **cell_report); int flexran_agent_rrc_destroy_stats_reply(Protocol__FlexranMessage *msg); +/* Fill the RRC part of an cell_config message */ +void flexran_agent_fill_rrc_cell_config(mid_t mod_id, uint8_t cc_id, + Protocol__FlexCellConfig *conf); + /*Register technology specific interface callbacks*/ int flexran_agent_register_rrc_xface(mid_t mod_id); diff --git a/openair2/ENB_APP/flexran_agent_common.c b/openair2/ENB_APP/flexran_agent_common.c index 53137855d36341ac4d0e74f2ec4e2f200e351846..592af05f2e8ba85ba7789751bbe55edc1c529923 100644 --- a/openair2/ENB_APP/flexran_agent_common.c +++ b/openair2/ENB_APP/flexran_agent_common.c @@ -35,6 +35,9 @@ #include "flexran_agent_extern.h" #include "flexran_agent_net_comm.h" #include "flexran_agent_ran_api.h" +#include "flexran_agent_phy.h" +#include "flexran_agent_mac.h" +#include "flexran_agent_rrc.h" //#include "PHY/extern.h" #include "common/utils/LOG/log.h" @@ -807,8 +810,6 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F Protocol__FlexEnbConfigRequest *enb_config_req_msg = input->enb_config_request_msg; xid = (enb_config_req_msg->header)->xid; - int i, j; - Protocol__FlexEnbConfigReply *enb_config_reply_msg; enb_config_reply_msg = malloc(sizeof(Protocol__FlexEnbConfigReply)); if(enb_config_reply_msg == NULL) @@ -827,178 +828,16 @@ int flexran_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__F cell_conf = malloc(sizeof(Protocol__FlexCellConfig *) * enb_config_reply_msg->n_cell_config); if(cell_conf == NULL) goto error; - for(i = 0; i < enb_config_reply_msg->n_cell_config; i++){ + for(int i = 0; i < enb_config_reply_msg->n_cell_config; i++){ cell_conf[i] = malloc(sizeof(Protocol__FlexCellConfig)); + if (!cell_conf[i]) goto error; protocol__flex_cell_config__init(cell_conf[i]); - - cell_conf[i]->phy_cell_id = 1; - cell_conf[i]->has_phy_cell_id = flexran_get_cell_id(mod_id,i); - - cell_conf[i]->cell_id = i; - cell_conf[i]->has_cell_id = 1; - - cell_conf[i]->pusch_hopping_offset = flexran_get_hopping_offset(mod_id,i); - cell_conf[i]->has_pusch_hopping_offset = 1; - - cell_conf[i]->hopping_mode = flexran_get_hopping_mode(mod_id,i); - cell_conf[i]->has_hopping_mode = 1; - - cell_conf[i]->n_sb = flexran_get_n_SB(mod_id,i); - cell_conf[i]->has_n_sb = 1; - - cell_conf[i]->phich_resource = flexran_get_phich_resource(mod_id,i); - cell_conf[i]->has_phich_resource = 1; - - cell_conf[i]->phich_duration = flexran_get_phich_duration(mod_id,i); - cell_conf[i]->has_phich_duration = 1; - - cell_conf[i]->init_nr_pdcch_ofdm_sym = flexran_get_num_pdcch_symb(mod_id,i); - cell_conf[i]->has_init_nr_pdcch_ofdm_sym = 1; - Protocol__FlexSiConfig *si_config; - si_config = malloc(sizeof(Protocol__FlexSiConfig)); - if(si_config == NULL) - goto error; - protocol__flex_si_config__init(si_config); - - si_config->sfn = flexran_get_current_system_frame_num(mod_id); - si_config->has_sfn = 1; - - si_config->sib1_length = flexran_get_sib1_length(mod_id,i); - si_config->has_sib1_length = 1; - - si_config->si_window_length = (uint32_t) flexran_get_si_window_length(mod_id, i); - si_config->has_si_window_length = 1; - - si_config->n_si_message = 0; - - /* Protocol__FlexSiMessage **si_message; */ - /* si_message = malloc(sizeof(Protocol__FlexSiMessage *) * si_config->n_si_message); */ - /* if(si_message == NULL) */ - /* goto error; */ - /* for(j = 0; j < si_config->n_si_message; j++){ */ - /* si_message[j] = malloc(sizeof(Protocol__FlexSiMessage)); */ - /* if(si_message[j] == NULL) */ - /* goto error; */ - /* protocol__flex_si_message__init(si_message[j]); */ - /* //TODO: Fill in with actual value, Periodicity of SI msg in radio frames */ - /* si_message[j]->periodicity = 1; //SIPeriod */ - /* si_message[j]->has_periodicity = 1; */ - /* //TODO: Fill in with actual value, rhe length of the SI message in bytes */ - /* si_message[j]->length = 10; */ - /* si_message[j]->has_length = 1; */ - /* } */ - /* if(si_config->n_si_message > 0){ */ - /* si_config->si_message = si_message; */ - /* } */ - - cell_conf[i]->si_config = si_config; - - cell_conf[i]->dl_bandwidth = flexran_get_N_RB_DL(mod_id,i); - cell_conf[i]->has_dl_bandwidth = 1; - - cell_conf[i]->ul_bandwidth = flexran_get_N_RB_UL(mod_id,i); - cell_conf[i]->has_ul_bandwidth = 1; - - cell_conf[i]->ul_cyclic_prefix_length = flexran_get_ul_cyclic_prefix_length(mod_id, i); - cell_conf[i]->has_ul_cyclic_prefix_length = 1; - - cell_conf[i]->dl_cyclic_prefix_length = flexran_get_dl_cyclic_prefix_length(mod_id,i); - cell_conf[i]->has_dl_cyclic_prefix_length = 1; - - cell_conf[i]->antenna_ports_count = flexran_get_antenna_ports(mod_id, i); - cell_conf[i]->has_antenna_ports_count = 1; - - cell_conf[i]->duplex_mode = flexran_get_duplex_mode(mod_id,i); - cell_conf[i]->has_duplex_mode = 1; - - cell_conf[i]->subframe_assignment = flexran_get_subframe_assignment(mod_id, i); - cell_conf[i]->has_subframe_assignment = 1; - cell_conf[i]->special_subframe_patterns = flexran_get_special_subframe_assignment(mod_id,i); - cell_conf[i]->has_special_subframe_patterns = 1; - //TODO: Fill in with actual value, The MBSFN radio frame period - cell_conf[i]->n_mbsfn_subframe_config_rfperiod = 0; - uint32_t *elem_rfperiod; - elem_rfperiod = (uint32_t *) malloc(sizeof(uint32_t) *cell_conf[i]->n_mbsfn_subframe_config_rfperiod); - if(elem_rfperiod == NULL) - goto error; - for(j = 0; j < cell_conf[i]->n_mbsfn_subframe_config_rfperiod; j++){ - elem_rfperiod[j] = 1; - } - cell_conf[i]->mbsfn_subframe_config_rfperiod = elem_rfperiod; - - //TODO: Fill in with actual value, The MBSFN radio frame offset - cell_conf[i]->n_mbsfn_subframe_config_rfoffset = 0; - uint32_t *elem_rfoffset; - elem_rfoffset = (uint32_t *) malloc(sizeof(uint32_t) *cell_conf[i]->n_mbsfn_subframe_config_rfoffset); - if(elem_rfoffset == NULL) - goto error; - for(j = 0; j < cell_conf[i]->n_mbsfn_subframe_config_rfoffset; j++){ - elem_rfoffset[j] = 1; - } - cell_conf[i]->mbsfn_subframe_config_rfoffset = elem_rfoffset; - - //TODO: Fill in with actual value, Bitmap indicating the MBSFN subframes - cell_conf[i]->n_mbsfn_subframe_config_sfalloc = 0; - uint32_t *elem_sfalloc; - elem_sfalloc = (uint32_t *) malloc(sizeof(uint32_t) *cell_conf[i]->n_mbsfn_subframe_config_sfalloc); - if(elem_sfalloc == NULL) - goto error; - for(j = 0; j < cell_conf[i]->n_mbsfn_subframe_config_sfalloc; j++){ - elem_sfalloc[j] = 1; - } - cell_conf[i]->mbsfn_subframe_config_sfalloc = elem_sfalloc; - - cell_conf[i]->prach_config_index = flexran_get_prach_ConfigIndex(mod_id,i); - cell_conf[i]->has_prach_config_index = 1; - - cell_conf[i]->prach_freq_offset = flexran_get_prach_FreqOffset(mod_id,i); - cell_conf[i]->has_prach_freq_offset = 1; - - cell_conf[i]->ra_response_window_size = flexran_get_ra_ResponseWindowSize(mod_id,i); - cell_conf[i]->has_ra_response_window_size = 1; - - cell_conf[i]->mac_contention_resolution_timer = flexran_get_mac_ContentionResolutionTimer(mod_id,i); - cell_conf[i]->has_mac_contention_resolution_timer = 1; - - cell_conf[i]->max_harq_msg3tx = flexran_get_maxHARQ_Msg3Tx(mod_id,i); - cell_conf[i]->has_max_harq_msg3tx = 1; - - cell_conf[i]->n1pucch_an = flexran_get_n1pucch_an(mod_id,i); - cell_conf[i]->has_n1pucch_an = 1; - - cell_conf[i]->deltapucch_shift = flexran_get_deltaPUCCH_Shift(mod_id,i); - cell_conf[i]->has_deltapucch_shift = 1; - - cell_conf[i]->nrb_cqi = flexran_get_nRB_CQI(mod_id,i); - cell_conf[i]->has_nrb_cqi = 1; - - cell_conf[i]->srs_subframe_config = flexran_get_srs_SubframeConfig(mod_id,i); - cell_conf[i]->has_srs_subframe_config = 1; - - cell_conf[i]->srs_bw_config = flexran_get_srs_BandwidthConfig(mod_id,i); - cell_conf[i]->has_srs_bw_config = 1; - - cell_conf[i]->srs_mac_up_pts = flexran_get_srs_MaxUpPts(mod_id,i); - cell_conf[i]->has_srs_mac_up_pts = 1; - - cell_conf[i]->dl_freq = flexran_agent_get_operating_dl_freq (mod_id,i); - cell_conf[i]->has_dl_freq = 1; - - cell_conf[i]->ul_freq = flexran_agent_get_operating_ul_freq (mod_id, i); - cell_conf[i]->has_ul_freq = 1; - - cell_conf[i]->eutra_band = flexran_agent_get_operating_eutra_band (mod_id,i); - cell_conf[i]->has_eutra_band = 1; - - cell_conf[i]->dl_pdsch_power = flexran_agent_get_operating_pdsch_refpower(mod_id, i); - cell_conf[i]->has_dl_pdsch_power = 1; - - cell_conf[i]->ul_pusch_power = flexran_agent_get_operating_pusch_p0 (mod_id,i); - cell_conf[i]->has_ul_pusch_power = 1; - - cell_conf[i]->enable_64qam = flexran_get_enable64QAM(mod_id,i); - cell_conf[i]->has_enable_64qam = 1; - + if (flexran_agent_get_phy_xface(mod_id)) + flexran_agent_fill_phy_cell_config(mod_id, i, cell_conf[i]); + if (flexran_agent_get_rrc_xface(mod_id)) + flexran_agent_fill_rrc_cell_config(mod_id, i, cell_conf[i]); + if (flexran_agent_get_mac_xface(mod_id)) + flexran_agent_fill_mac_cell_config(mod_id, i, cell_conf[i]); cell_conf[i]->carrier_index = i; cell_conf[i]->has_carrier_index = 1; }