Fix: Segfault error, free properly measurement info struct, add rsrp/rsrq filter coefficient
This commit is contained in:
committed by
Robert Schmidt
parent
b7530528e0
commit
772dc508e8
@@ -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];
|
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 */
|
/* Periodic event */
|
||||||
|
|
||||||
long flexran_get_rrc_per_event_maxReportCells(mid_t mod_id, rnti_t rnti) {
|
long flexran_get_rrc_per_event_maxReportCells(mid_t mod_id, rnti_t rnti) {
|
||||||
|
|||||||
@@ -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 */
|
/* Get A3 Event report on leave */
|
||||||
int flexran_get_rrc_a3_event_reportOnLeave(mid_t mod_id, rnti_t rnti);
|
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 */
|
/* Get number of PLMNs that is broadcasted in SIB1 */
|
||||||
uint8_t flexran_get_rrc_num_plmn_ids(mid_t mod_id);
|
uint8_t flexran_get_rrc_num_plmn_ids(mid_t mod_id);
|
||||||
|
|
||||||
|
|||||||
@@ -538,8 +538,10 @@ typedef struct EVENTS_s {
|
|||||||
typedef struct MEASUREMENT_INFO_s {
|
typedef struct MEASUREMENT_INFO_s {
|
||||||
//TODO: Extend to multiple meas objects for OFP/OFN offsets
|
//TODO: Extend to multiple meas objects for OFP/OFN offsets
|
||||||
long offsetFreq;
|
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 cellIndividualOffset[MAX_NUM_NEIGH_CELLs+1];
|
||||||
|
long filterCoefficientRSRP;
|
||||||
|
long filterCoefficientRSRQ;
|
||||||
EVENTS_t *events;
|
EVENTS_t *events;
|
||||||
} MEASUREMENT_INFO;
|
} MEASUREMENT_INFO;
|
||||||
|
|
||||||
|
|||||||
+15
-12
@@ -977,20 +977,16 @@ rrc_eNB_free_mem_UE_context(
|
|||||||
ue_context_pP->ue_context.handover_info = NULL;
|
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) {
|
if (ue_context_pP->ue_context.measurement_info) {
|
||||||
/* TODO: be sure free is enough here (check memory leaks) */
|
/* 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);
|
free(ue_context_pP->ue_context.measurement_info);
|
||||||
ue_context_pP->ue_context.measurement_info = NULL;
|
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->filterCoefficientRSRP = LTE_FilterCoefficient_fc4;
|
||||||
*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = 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 */
|
/* Initialize NAS list */
|
||||||
dedicatedInfoNASList = CALLOC(1, sizeof(struct LTE_RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList));
|
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)));
|
CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ)));
|
||||||
*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = LTE_FilterCoefficient_fc4;
|
*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = LTE_FilterCoefficient_fc4;
|
||||||
*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = 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 */
|
||||||
mobilityInfo = ue_context_pP->ue_context.mobilityInfo;
|
mobilityInfo = ue_context_pP->ue_context.mobilityInfo;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user