bts: refuse to set invalid frame numbers

A valid GSM frame ranges from 0 to 2715647. When using
set_current_frame_number() to set the current frame number (source
usually is the layer 1 and below) we should not allow invalid frame
numbers.

Note: this also fixes FnTest which uses invalid frame numbers for
testsing.

Change-Id: Iaae31b370fababba975d419b0d20ac15618c296e
Related: OS#5198
This commit is contained in:
Philipp Maier 2023-01-05 11:55:17 +01:00
parent d1058b9445
commit 39f5e27412
3 changed files with 17 additions and 14 deletions

View File

@ -338,6 +338,9 @@ struct gprs_rlcmac_bts* bts_alloc(struct gprs_pcu *pcu, uint8_t bts_nr)
void bts_set_current_frame_number(struct gprs_rlcmac_bts *bts, uint32_t fn)
{
/* See also 3GPP TS 45.002, section 4.3.3 */
OSMO_ASSERT(fn < GSM_TDMA_HYPERFRAME);
/* The UL frame numbers lag 3 behind the DL frames and the data
* indication is only sent after all 4 frames of the block have been
* received. Sometimes there is an idle frame between the end of one

View File

@ -92,13 +92,13 @@ static void run_test()
fn = calc_fn(bts, RFN_MODULUS - 1);
OSMO_ASSERT(fn == 42431);
set_fn(bts, RFN_MODULUS * 123 + 16);
set_fn(bts, RFN_MODULUS * 12 + 16);
fn = calc_fn(bts, RFN_MODULUS - 4);
OSMO_ASSERT(fn == 5219132);
OSMO_ASSERT(fn == 509180);
set_fn(bts, RFN_MODULUS * 123 + 451);
set_fn(bts, RFN_MODULUS * 12 + 451);
fn = calc_fn(bts, RFN_MODULUS - 175);
OSMO_ASSERT(fn == 5218961);
OSMO_ASSERT(fn == 509009);
/* Lets check a special cornercase. We assume that
@ -125,7 +125,7 @@ static void run_test()
/* Also check with some corner case
* values where Fn and RFn reach its
* maximum/minimum valid range */
set_fn(bts, GSM_MAX_FN);
set_fn(bts, GSM_MAX_FN-1);
fn = calc_fn(bts, RFN_MODULUS-1);
OSMO_ASSERT(fn == GSM_MAX_FN-1);
@ -133,9 +133,9 @@ static void run_test()
fn = calc_fn(bts, RFN_MODULUS-1);
OSMO_ASSERT(fn == GSM_MAX_FN-1);
set_fn(bts, GSM_MAX_FN);
set_fn(bts, GSM_MAX_FN-1);
fn = calc_fn(bts, 0);
OSMO_ASSERT(fn == GSM_MAX_FN);
OSMO_ASSERT(fn == GSM_MAX_FN-RFN_MODULUS*2);
set_fn(bts, 0);
fn = calc_fn(bts, 0);

View File

@ -19,11 +19,11 @@ rfn=42422 ==> fn=42422
bts: fn=42433
rfn=42431 ==> fn=42431
bts: fn=5219152
rfn=42428 ==> fn=5219132
bts: fn=509200
rfn=42428 ==> fn=509180
bts: fn=5219587
rfn=42257 ==> fn=5218961
bts: fn=509635
rfn=42257 ==> fn=509009
bts: fn=0
rfn=42419 ==> fn=2715635
@ -37,14 +37,14 @@ rfn=42422 ==> fn=2715638
bts: fn=23
rfn=42390 ==> fn=2715606
bts: fn=2715648
bts: fn=2715647
rfn=42431 ==> fn=2715647
bts: fn=0
rfn=42431 ==> fn=2715647
bts: fn=2715648
rfn=0 ==> fn=2715648
bts: fn=2715647
rfn=0 ==> fn=2630784
bts: fn=0
rfn=0 ==> fn=0