diff --git a/openair2/ENB_APP/flexran_agent_handler.c b/openair2/ENB_APP/flexran_agent_handler.c index c1153a29f86174625871e2eb749a7de60779054e..26bf89d867a0d4dd8d42750576c89191fa4a69f3 100644 --- a/openair2/ENB_APP/flexran_agent_handler.c +++ b/openair2/ENB_APP/flexran_agent_handler.c @@ -204,7 +204,7 @@ int flexran_agent_handle_stats(mid_t mod_id, const void *params, Protocol__Flexr // TODO: Must resolve conflicts among stats requests int i; - err_code_t err_code; + err_code_t err_code = 0; xid_t xid; uint32_t usec_interval, sec_interval; @@ -241,16 +241,36 @@ int flexran_agent_handle_stats(mid_t mod_id, const void *params, Protocol__Flexr //Create a list of all eNB RNTIs and cells //Set the number of UEs and create list with their RNTIs stats configs - report_config.nr_ue = flexran_get_mac_num_ues(mod_id); + report_config.nr_ue = 0; + if (flexran_agent_get_rrc_xface(mod_id)) + report_config.nr_ue = flexran_get_rrc_num_ues(mod_id); + else if (flexran_agent_get_mac_xface(mod_id)) + report_config.nr_ue = flexran_get_mac_num_ues(mod_id); + + if (flexran_agent_get_rrc_xface(mod_id) && flexran_agent_get_mac_xface(mod_id) + && flexran_get_rrc_num_ues(mod_id) != flexran_get_mac_num_ues(mod_id)) { + LOG_E(FLEXRAN_AGENT, "different numbers of UEs in RRC and MAC\n"); + goto error; + } report_config.ue_report_type = malloc(sizeof(ue_report_type_t) * report_config.nr_ue); if (report_config.ue_report_type == NULL) { // TODO: Add appropriate error code err_code = -100; goto error; } - for (i = 0; i < report_config.nr_ue; i++) { - report_config.ue_report_type[i].ue_rnti = flexran_get_mac_ue_crnti(enb_id, i); - report_config.ue_report_type[i].ue_report_flags = ue_flags; + if (flexran_agent_get_rrc_xface(mod_id)) { + rnti_t rntis[report_config.nr_ue]; + flexran_get_rrc_rnti_list(mod_id, rntis, report_config.nr_ue); + for (i = 0; i < report_config.nr_ue; i++) { + report_config.ue_report_type[i].ue_rnti = rntis[mod_id]; + report_config.ue_report_type[i].ue_report_flags = ue_flags; + } + } + if (flexran_agent_get_mac_xface(mod_id) && !flexran_agent_get_rrc_xface(mod_id)) { + for (i = 0; i < report_config.nr_ue; i++) { + report_config.ue_report_type[i].ue_rnti = flexran_get_mac_ue_crnti(enb_id, i); + report_config.ue_report_type[i].ue_report_flags = ue_flags; + } } //Set the number of CCs and create a list with the cell stats configs report_config.nr_cc = MAX_NUM_CCs; @@ -375,13 +395,15 @@ int flexran_agent_handle_stats(mid_t mod_id, const void *params, Protocol__Flexr goto error; } - free(report_config.ue_report_type); - free(report_config.cc_report_type); + if (report_config.ue_report_type) + free(report_config.ue_report_type); + if (report_config.cc_report_type) + free(report_config.cc_report_type); return 0; error : - LOG_E(FLEXRAN_AGENT, "errno %d occured\n", err_code); + LOG_E(FLEXRAN_AGENT, "%s(): errno %d occured\n", __func__, err_code); return err_code; }