From 772dc508e89bf334077d4c62a5767f768a97d161 Mon Sep 17 00:00:00 2001 From: Konstantinos Alexandris <konstantinos.alexandris@eurecom.fr> Date: Wed, 24 Apr 2019 17:21:11 +0200 Subject: [PATCH] Fix: Segfault error, free properly measurement info struct, add rsrp/rsrq filter coefficient --- openair2/ENB_APP/flexran_agent_ran_api.c | 16 ++++++++++++++ openair2/ENB_APP/flexran_agent_ran_api.h | 6 ++++++ openair2/RRC/LTE/rrc_defs.h | 4 +++- openair2/RRC/LTE/rrc_eNB.c | 27 +++++++++++++----------- 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c index fbda394db20..634dc775f17 100644 --- a/openair2/ENB_APP/flexran_agent_ran_api.c +++ b/openair2/ENB_APP/flexran_agent_ran_api.c @@ -1597,6 +1597,22 @@ long flexran_get_rrc_ocn(mid_t mod_id, rnti_t rnti, long cell_id) { return ue_context_p->ue_context.measurement_info->cellIndividualOffset[cell_id+1]; } +long flexran_get_filter_coeff_rsrp(mid_t mod_id, rnti_t rnti) { + if (!rrc_is_present(mod_id)) return -1; + 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->ue_context.measurement_info) return -1; + return ue_context_p->ue_context.measurement_info->filterCoefficientRSRP; +} + +long flexran_get_filter_coeff_rsrq(mid_t mod_id, rnti_t rnti) { + if (!rrc_is_present(mod_id)) return -1; + 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->ue_context.measurement_info) return -1; + return ue_context_p->ue_context.measurement_info->filterCoefficientRSRQ; +} + /* Periodic event */ long flexran_get_rrc_per_event_maxReportCells(mid_t mod_id, rnti_t rnti) { diff --git a/openair2/ENB_APP/flexran_agent_ran_api.h b/openair2/ENB_APP/flexran_agent_ran_api.h index 224b19a2646..4a65284cba9 100644 --- a/openair2/ENB_APP/flexran_agent_ran_api.h +++ b/openair2/ENB_APP/flexran_agent_ran_api.h @@ -570,6 +570,12 @@ long flexran_get_rrc_a3_event_a3_offset(mid_t mod_id, rnti_t rnti); /* Get A3 Event report on leave */ int flexran_get_rrc_a3_event_reportOnLeave(mid_t mod_id, rnti_t rnti); +/* Get filter coefficient for rsrp */ +long flexran_get_filter_coeff_rsrp(mid_t mod_id, rnti_t rnti); + +/* Get filter coefficient for rsrq */ +long flexran_get_filter_coeff_rsrq(mid_t mod_id, rnti_t rnti); + /* Get number of PLMNs that is broadcasted in SIB1 */ uint8_t flexran_get_rrc_num_plmn_ids(mid_t mod_id); diff --git a/openair2/RRC/LTE/rrc_defs.h b/openair2/RRC/LTE/rrc_defs.h index a7ec8cc567f..21feaf5e4c2 100644 --- a/openair2/RRC/LTE/rrc_defs.h +++ b/openair2/RRC/LTE/rrc_defs.h @@ -538,8 +538,10 @@ typedef struct EVENTS_s { typedef struct MEASUREMENT_INFO_s { //TODO: Extend to multiple meas objects for OFP/OFN offsets long offsetFreq; - //TODO: extend to multiple cells for OCP/OCN offsets + //TODO: extend to multiple carriers for OCP/OCN offsets long cellIndividualOffset[MAX_NUM_NEIGH_CELLs+1]; + long filterCoefficientRSRP; + long filterCoefficientRSRQ; EVENTS_t *events; } MEASUREMENT_INFO; diff --git a/openair2/RRC/LTE/rrc_eNB.c b/openair2/RRC/LTE/rrc_eNB.c index c09fd86bd88..37888c9716b 100644 --- a/openair2/RRC/LTE/rrc_eNB.c +++ b/openair2/RRC/LTE/rrc_eNB.c @@ -977,20 +977,16 @@ rrc_eNB_free_mem_UE_context( ue_context_pP->ue_context.handover_info = NULL; } - if (ue_context_pP->ue_context.measurement_info->events->a3_event) { - /* TODO: be sure free is enough here (check memory leaks) */ - free(ue_context_pP->ue_context.measurement_info->events->a3_event); - ue_context_pP->ue_context.measurement_info->events->a3_event = NULL; - } - - if (ue_context_pP->ue_context.measurement_info->events) { - /* TODO: be sure free is enough here (check memory leaks) */ - free(ue_context_pP->ue_context.measurement_info->events); - ue_context_pP->ue_context.measurement_info->events = NULL; - } - if (ue_context_pP->ue_context.measurement_info) { /* TODO: be sure free is enough here (check memory leaks) */ + if (ue_context_pP->ue_context.measurement_info->events) { + if (ue_context_pP->ue_context.measurement_info->events->a3_event) { + free(ue_context_pP->ue_context.measurement_info->events->a3_event); + ue_context_pP->ue_context.measurement_info->events->a3_event = NULL; + } + free(ue_context_pP->ue_context.measurement_info->events); + ue_context_pP->ue_context.measurement_info->events = NULL; + } free(ue_context_pP->ue_context.measurement_info); ue_context_pP->ue_context.measurement_info = NULL; } @@ -3486,6 +3482,9 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = LTE_FilterCoefficient_fc4; *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = LTE_FilterCoefficient_fc4; + ue_context_pP->ue_context.measurement_info->filterCoefficientRSRP = *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP; + ue_context_pP->ue_context.measurement_info->filterCoefficientRSRQ = *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ; + /* Initialize NAS list */ dedicatedInfoNASList = CALLOC(1, sizeof(struct LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); @@ -5542,6 +5541,10 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ))); *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = LTE_FilterCoefficient_fc4; *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = LTE_FilterCoefficient_fc4; + + ue_context_pP->ue_context.measurement_info->filterCoefficientRSRP = *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP; + ue_context_pP->ue_context.measurement_info->filterCoefficientRSRQ = *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ; + /* mobilityinfo */ mobilityInfo = ue_context_pP->ue_context.mobilityInfo; -- GitLab