measurement: make sure state is reset on chan act.

At the moment only lchan_meas_reset is reset on channel activation.
All other states are not reset. This may lead to irretations in the
first measurement interval if there are still leftover messages from
a previous connection. Lets ensure everything is reset to zero by
zeroing out the whole .meas struct in struct lchan.

- Add a centralized function that does the reset
- Call that function from rsl_tx_chan_act_ack() in rsl.c

Change-Id: I880ae3030df6dcd60c32b7144c3430528429bdea
Related: OS#2975
Related: OS#2987
This commit is contained in:
Philipp Maier 2018-08-20 10:54:15 +02:00
parent b5a28bd967
commit 9feddb7edf
3 changed files with 11 additions and 1 deletions

View File

@ -10,4 +10,6 @@ int lchan_meas_check_compute(struct gsm_lchan *lchan, uint32_t fn);
void lchan_meas_process_measurement(struct gsm_lchan *lchan, struct bts_ul_meas *ulm, uint32_t fn);
void lchan_meas_reset(struct gsm_lchan *lchan);
#endif

View File

@ -490,3 +490,11 @@ void lchan_meas_process_measurement(struct gsm_lchan *lchan, struct bts_ul_meas
* measurment report at Meas period End */
lchan_meas_check_compute(lchan, fn);
}
/* Reset all measurement related struct members to their initial values. This
* function will be called every time an lchan is activated to ensure the
* measurement process starts with a defined state. */
void lchan_meas_reset(struct gsm_lchan *lchan)
{
memset(&lchan->meas, 0, sizeof(lchan->meas));
}

View File

@ -750,7 +750,7 @@ static int rsl_tx_chan_act_ack(struct gsm_lchan *lchan)
msg->trx = lchan->ts->trx;
/* since activation was successful, do some lchan initialization */
lchan->meas.res_nr = 0;
lchan_meas_reset(lchan);
return abis_bts_rsl_sendmsg(msg);
}