From 2482975a203f4c3355d16a26deca99cd020199af Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 1 Jun 2013 16:46:39 +0200 Subject: HO: Count the actual meas.rep. get_meas_rep_avg fails if not reached get_meas_rep_avg will return -EINVAL, if the required number of measurements are not reached. There will be no handover possible until the given number of measurements are available. Change-Id: Ibc4410b4e162cdb6c070128d2c63946bb79d6d65 --- src/libbsc/abis_rsl.c | 1 + src/libbsc/chan_alloc.c | 4 ++++ src/libbsc/meas_rep.c | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/libbsc/abis_rsl.c b/src/libbsc/abis_rsl.c index cb2828753..aa72d2ea5 100644 --- a/src/libbsc/abis_rsl.c +++ b/src/libbsc/abis_rsl.c @@ -1465,6 +1465,7 @@ static int rsl_rx_meas_res(struct msgb *msg) memset(mr, 0, sizeof(*mr)); mr->lchan = msg->lchan; + mr->lchan->meas_rep_cnt++; rsl_tlv_parse(&tp, dh->data, msgb_l2len(msg)-sizeof(*dh)); diff --git a/src/libbsc/chan_alloc.c b/src/libbsc/chan_alloc.c index 07248fb23..1566becf3 100644 --- a/src/libbsc/chan_alloc.c +++ b/src/libbsc/chan_alloc.c @@ -347,6 +347,10 @@ struct gsm_lchan *lchan_alloc(struct gsm_bts *bts, enum gsm_chan_t type, gsm_ts_and_pchan_name(lchan->ts), lchan->nr, gsm_lchant_name(lchan->type)); + /* reset measurement report counter and index */ + lchan->meas_rep_cnt = 0; + lchan->meas_rep_idx = 0; + /* clear sapis */ memset(lchan->sapis, 0, ARRAY_SIZE(lchan->sapis)); diff --git a/src/libbsc/meas_rep.c b/src/libbsc/meas_rep.c index cb8379e0b..b62d242ad 100644 --- a/src/libbsc/meas_rep.c +++ b/src/libbsc/meas_rep.c @@ -19,6 +19,7 @@ * */ +#include #include #include @@ -75,7 +76,10 @@ int get_meas_rep_avg(const struct gsm_lchan *lchan, int avg = 0; if (num < 1) - return 0; + return -EINVAL; + + if (num > lchan->meas_rep_cnt) + return -EINVAL; idx = calc_initial_idx(ARRAY_SIZE(lchan->meas_rep), lchan->meas_rep_idx, num); -- cgit v1.2.3