diff --git a/src/bts.cpp b/src/bts.cpp index cf39aa41..650d4a37 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -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 diff --git a/tests/fn/FnTest.cpp b/tests/fn/FnTest.cpp index e5ac46d4..ae15164c 100644 --- a/tests/fn/FnTest.cpp +++ b/tests/fn/FnTest.cpp @@ -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); diff --git a/tests/fn/FnTest.ok b/tests/fn/FnTest.ok index be6400fe..4884ca5b 100644 --- a/tests/fn/FnTest.ok +++ b/tests/fn/FnTest.ok @@ -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