Merge remote-tracking branch 'origin/NR_SIB19_timer_fix' into integration_2025_w51 (!3777)
UE NTN : Fix in case SIB19 periodicity is greater than 2 secs This was observed when testing OAI NTN UE against a third party gNB (UXM). LEO SIB19 periodicity of > 2000 ms was used, in which case T430 timer expires before SIB19 is re-read. This fix handles the case where SIB19 periodicity > 2secs, such that SIB19 is re-read in time and T430 timer does not expire.
This commit is contained in:
@@ -248,19 +248,19 @@ static int eval_epoch_time(NR_UE_RRC_SI_INFO *SI_info, NR_NTN_Config_r17_t *ntnc
|
|||||||
static int get_ntn_timervalues(NR_UE_RRC_SI_INFO *SI_info, NR_NTN_Config_r17_t *ntncfg, int diff_frames, int *val430_ms)
|
static int get_ntn_timervalues(NR_UE_RRC_SI_INFO *SI_info, NR_NTN_Config_r17_t *ntncfg, int diff_frames, int *val430_ms)
|
||||||
{
|
{
|
||||||
int val430 = get_ulsyncvalidityduration_timer_value(ntncfg);
|
int val430 = get_ulsyncvalidityduration_timer_value(ntncfg);
|
||||||
int sib19_periodicity_ms = (SI_info->sib19_periodicity + 1) * 10;
|
int sib19_periodicity_ms = SI_info->sib19_periodicity * 10;
|
||||||
*val430_ms = val430 * 1000 + diff_frames * 10; // in ms
|
*val430_ms = val430 * 1000 + diff_frames * 10; // in ms
|
||||||
if (*val430_ms <= sib19_periodicity_ms)
|
if (*val430_ms <= sib19_periodicity_ms)
|
||||||
LOG_E(NR_RRC, "Too small T430 value. Might result in frequent ULSYNC failure\n");
|
LOG_E(NR_RRC, "Too small T430 value. Might result in frequent ULSYNC failure\n");
|
||||||
|
|
||||||
// Depending on ulsyncvalidity duration, SIB19 timer expires 15secs/2secs before T430
|
// by default SIB19 reception is started from the middle of the ulsyncvalidity duration.(i.e val430 in ms / 2)
|
||||||
// LArger values might be used for GEO and epoch time interval can be around 10 secs
|
int sib19_timer_ms = val430 * 500 + diff_frames * 10;
|
||||||
// Lower values will be used for NGSO (LEO/MEO), epoch time interval can be between 2-3 secs.
|
|
||||||
// TODO remove the hardoded values and define a better strategy to determine the time of expiry
|
// if this is less than the SIB19 periodicity, use that instead.
|
||||||
// with real GEO/LEO/MEO SATs.
|
// set the timer to expire 1 frame (10 ms) before periodicity, to not miss the SIB19
|
||||||
int expire_before_ms = ((val430 >= 120) ? 10000 : 2000);
|
if (sib19_timer_ms <= sib19_periodicity_ms)
|
||||||
int diff = *val430_ms - expire_before_ms;
|
sib19_timer_ms = sib19_periodicity_ms - 10;
|
||||||
int sib19_timer_ms = (diff > 0) ? diff : ((*val430_ms - sib19_periodicity_ms) > 0) ? (*val430_ms - sib19_periodicity_ms) : 0;
|
|
||||||
LOG_I(NR_RRC, "val430:%d s, T430:%d ms, sib19_timer:%d ms\n", val430, *val430_ms, sib19_timer_ms);
|
LOG_I(NR_RRC, "val430:%d s, T430:%d ms, sib19_timer:%d ms\n", val430, *val430_ms, sib19_timer_ms);
|
||||||
return sib19_timer_ms;
|
return sib19_timer_ms;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user