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:
parent
d1058b9445
commit
39f5e27412
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue