pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-pcu/+/33123 )
Change subject: encoding: only RFN needed in write_immediate_assignment(_reject)()
......................................................................
encoding: only RFN needed in write_immediate_assignment(_reject)()
Those function don't really require the full FN, hence let's pass only
the required information.
10.5.2.30 Request Reference:
"The purpose of the Request Reference information element is to provide the random
access information used in the
channel request and the frame number, FN modulo 42432"
10.5.2.38 Starting Time:
"The purpose of the Starting Time information element is to provide the start TDMA
frame number, FN modulo 42432."
Change-Id: If9b758434c00f2a3868534d5be84946809c989a9
---
M src/bts.cpp
M src/encoding.cpp
M src/encoding.h
M tests/types/TypesTest.cpp
4 files changed, 50 insertions(+), 31 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/23/33123/1
diff --git a/src/bts.cpp b/src/bts.cpp
index 640405f..8be87be 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1022,7 +1022,7 @@
trx->trx_no, trx->arfcn & ~ARFCN_FLAG_MASK,
pdch->ts_no, ta, pdch->tsc, tbf ? tbf->tfi() : -1, usf);
plen = Encoding::write_immediate_assignment(pdch, tbf, bv,
- false, rip->ra, Fn, ta, usf, false, sb_fn,
+ false, rip->ra, rip->rfn, ta, usf, false, fn2rfn(sb_fn),
bts_get_ms_pwr_alpha(bts), bts->pcu->vty.gamma, -1,
rip->burst_type);
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_UL_TBF);
@@ -1038,7 +1038,7 @@
send_imm_ass_rej:
LOGP(DRLCMAC, LOGL_DEBUG, "Tx Immediate Assignment Reject on AGCH\n");
plen = Encoding::write_immediate_assignment_reject(
- bv, rip->ra, Fn, rip->burst_type,
+ bv, rip->ra, rip->rfn, rip->burst_type,
(uint8_t)osmo_tdef_get(bts->T_defs_bts, 3142, OSMO_TDEF_S, -1));
bts_do_rate_ctr_inc(bts, CTR_IMMEDIATE_ASSIGN_REJ);
if (plen >= 0)
@@ -1118,7 +1118,7 @@
tbf->trx->trx_no, tbf->trx->arfcn, pdch->ts_no, tbf->ta());
plen = Encoding::write_immediate_assignment(pdch,
tbf, immediate_assignment, true, 125,
- GSM_TDMA_FN_SUM(pdch->last_rts_fn, 21216),
+ fn2rfn(GSM_TDMA_FN_SUM(pdch->last_rts_fn, 21216)),
tbf->ta(), 7, false, 0,
bts_get_ms_pwr_alpha(bts), bts->pcu->vty.gamma, -1,
GSM_L1_BURST_TYPE_ACCESS_0);
diff --git a/src/encoding.cpp b/src/encoding.cpp
index 6b626cc..5695666 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -63,22 +63,22 @@
}
/* TBF_STARTING_TIME -- same as 3GPP TS 44.018 §10.5.2.38 Starting Time without tag: */
-static int write_tbf_start_time(bitvec *dest, uint32_t fn)
+static int write_tbf_start_time(bitvec *dest, uint16_t rfn)
{
int rc;
/* Set values according to 3GPP TS 44.018 Table 10.5.2.38.1 */
/* T1' */
- rc = bitvec_set_u64(dest, (fn / (26 * 51)) % 32, 5, false);
+ rc = bitvec_set_u64(dest, (rfn / (26 * 51)) % 32, 5, false);
CHECK(rc);
/* T3 */
- rc = bitvec_set_u64(dest, fn % 51, 6, false);
+ rc = bitvec_set_u64(dest, rfn % 51, 6, false);
CHECK(rc);
/* T2 */
- rc = bitvec_set_u64(dest, fn % 26, 5, false);
+ rc = bitvec_set_u64(dest, rfn % 26, 5, false);
CHECK(rc);
return rc;
@@ -180,7 +180,7 @@
}
static int write_ia_rest_downlink(const gprs_rlcmac_dl_tbf *tbf, bitvec * dest, bool
polling, bool ta_valid,
- uint32_t fn, uint8_t alpha, uint8_t gamma, int8_t ta_idx)
+ uint16_t rfn, uint8_t alpha, uint8_t gamma, int8_t ta_idx)
{
int rc = 0;
@@ -213,7 +213,7 @@
if (polling) {
SET_1(dest);
- rc = write_tbf_start_time(dest, fn);
+ rc = write_tbf_start_time(dest, rfn);
CHECK(rc);
} else
SET_0(dest);
@@ -235,7 +235,7 @@
}
/* 3GPP TS 44.018 Table 10.5.2.16.1 < Packet Uplink Assignment > -- Single Block
Allocation */
-static int write_ia_rest_uplink_sba(bitvec *dest, uint32_t fn, uint8_t alpha, uint8_t
gamma)
+static int write_ia_rest_uplink_sba(bitvec *dest, uint32_t rfn, uint8_t alpha, uint8_t
gamma)
{
int rc = 0;
@@ -248,7 +248,7 @@
SET_0(dest);
SET_1(dest);
- rc = write_tbf_start_time(dest, fn);
+ rc = write_tbf_start_time(dest, rfn);
CHECK(rc);
/* No P0 nor PR_MODE */
@@ -292,7 +292,7 @@
return rc;
}
-static int write_ia_rest_egprs_uplink_mba(bitvec * dest, uint32_t fn, uint8_t alpha,
uint8_t gamma)
+static int write_ia_rest_egprs_uplink_mba(bitvec * dest, uint32_t rfn, uint8_t alpha,
uint8_t gamma)
{
int rc = 0;
@@ -301,7 +301,7 @@
rc = write_alpha_gamma(dest, alpha, gamma);
CHECK(rc);
- rc = write_tbf_start_time(dest, fn);
+ rc = write_tbf_start_time(dest, rfn);
CHECK(rc);
SET_0(dest); /* NUMBER OF RADIO BLOCKS ALLOCATED: */
@@ -358,7 +358,7 @@
* see GSM 44.018, 9.1.20 + 10.5.2.30
*/
int Encoding::write_immediate_assignment_reject(bitvec *dest, uint16_t ra,
- uint32_t ref_fn, enum ph_burst_type burst_type, uint8_t t3142)
+ uint16_t ref_rfn, enum ph_burst_type burst_type, uint8_t t3142)
{
unsigned wp = 0;
int plen;
@@ -394,9 +394,9 @@
}
bitvec_write_field(dest, &wp,
- (ref_fn / (26 * 51)) % 32, 5); // T1'
- bitvec_write_field(dest, &wp, ref_fn % 51, 6); // T3
- bitvec_write_field(dest, &wp, ref_fn % 26, 5); // T2
+ (ref_rfn / (26 * 51)) % 32, 5); // T1'
+ bitvec_write_field(dest, &wp, ref_rfn % 51, 6); // T3
+ bitvec_write_field(dest, &wp, ref_rfn % 26, 5); // T2
/* 10.5.2.43 Wait Indication */
bitvec_write_field(dest, &wp, t3142, 8);
@@ -437,8 +437,8 @@
const struct gprs_rlcmac_pdch *pdch,
const struct gprs_rlcmac_tbf *tbf,
bitvec * dest, bool downlink, uint16_t ra,
- uint32_t ref_fn, uint8_t ta,
- uint8_t usf, bool polling, uint32_t fn, uint8_t alpha,
+ uint16_t ref_rfn, uint8_t ta,
+ uint8_t usf, bool polling, uint16_t rfn, uint8_t alpha,
uint8_t gamma, int8_t ta_idx, enum ph_burst_type burst_type)
{
unsigned wp = 0;
@@ -480,9 +480,9 @@
bitvec_write_field(dest, &wp, ra, 8); /* RACH value */
}
- bitvec_write_field(dest, &wp, (ref_fn / (26 * 51)) % 32, 5); // T1'
- bitvec_write_field(dest, &wp, ref_fn % 51, 6); // T3
- bitvec_write_field(dest, &wp, ref_fn % 26, 5); // T2
+ bitvec_write_field(dest, &wp, (ref_rfn / (26 * 51)) % 32, 5); // T1'
+ bitvec_write_field(dest, &wp, ref_rfn % 51, 6); // T3
+ bitvec_write_field(dest, &wp, ref_rfn % 26, 5); // T2
// 10.5.2.40 Timing Advance
bitvec_write_field(dest, &wp, 0x0, 2); // spare
@@ -508,7 +508,7 @@
if (downlink) {
OSMO_ASSERT(tbf_as_dl_tbf_const(tbf) != NULL);
- rc = write_ia_rest_downlink(tbf_as_dl_tbf_const(tbf), dest, polling,
gsm48_ta_is_valid(ta), fn, alpha, gamma,
+ rc = write_ia_rest_downlink(tbf_as_dl_tbf_const(tbf), dest, polling,
gsm48_ta_is_valid(ta), rfn, alpha, gamma,
ta_idx);
} else if (((burst_type == GSM_L1_BURST_TYPE_ACCESS_1) || (burst_type ==
GSM_L1_BURST_TYPE_ACCESS_2))) {
SET_L(dest); SET_H(dest); // "LH"
@@ -521,7 +521,7 @@
if (tbf_as_ul_tbf_const(tbf) != NULL)
rc = write_ia_rest_egprs_uplink_sba(tbf_as_ul_tbf_const(tbf), dest, usf, alpha, gamma,
ta_idx);
else
- rc = write_ia_rest_egprs_uplink_mba(dest, fn, alpha, gamma);
+ rc = write_ia_rest_egprs_uplink_mba(dest, rfn, alpha, gamma);
} else {
OSMO_ASSERT(!tbf || !tbf->is_egprs_enabled());
@@ -531,7 +531,7 @@
if (tbf_as_ul_tbf_const(tbf) != NULL)
rc = write_ia_rest_uplink_mba(tbf_as_ul_tbf_const(tbf), dest, usf, alpha, gamma,
ta_idx);
else
- rc = write_ia_rest_uplink_sba(dest, fn, alpha, gamma);
+ rc = write_ia_rest_uplink_sba(dest, rfn, alpha, gamma);
}
if (rc < 0) {
diff --git a/src/encoding.h b/src/encoding.h
index ae4d57f..89f6964 100644
--- a/src/encoding.h
+++ b/src/encoding.h
@@ -46,15 +46,15 @@
const struct gprs_rlcmac_pdch *pdch,
const struct gprs_rlcmac_tbf *tbf,
bitvec * dest, bool downlink, uint16_t ra,
- uint32_t ref_fn, uint8_t ta,
+ uint16_t ref_rfn, uint8_t ta,
uint8_t usf, bool polling,
- uint32_t fn, uint8_t alpha, uint8_t gamma,
+ uint16_t rfn, uint8_t alpha, uint8_t gamma,
int8_t ta_idx,
enum ph_burst_type burst_type);
static int write_immediate_assignment_reject(
bitvec *dest, uint16_t ra,
- uint32_t ref_fn,
+ uint16_t ref_rfn,
enum ph_burst_type burst_type,
uint8_t t3142
);
diff --git a/tests/types/TypesTest.cpp b/tests/types/TypesTest.cpp
index 871e0d1..c6a2fbf 100644
--- a/tests/types/TypesTest.cpp
+++ b/tests/types/TypesTest.cpp
@@ -753,7 +753,7 @@
struct msgb *m = msgb_alloc(80, "test");
bool poll = true;
uint16_t ra = 13;
- uint32_t ref_fn = 24, fn = 11;
+ uint32_t ref_rfn = 24, rfn = 11;
int8_t ta_idx = 0;
/* HACK: tbf can be NULL, so we cannot use tbf->trx here */
@@ -766,8 +766,8 @@
bitvec_unhex(immediate_assignment, DUMMY_VEC);
plen = Encoding::write_immediate_assignment(&trx.pdch[5], tbf,
immediate_assignment,
- dl, ra, ref_fn, ta, usf,
- poll, fn, alpha, gamma, ta_idx, bt);
+ dl, ra, ref_rfn, ta, usf,
+ poll, rfn, alpha, gamma, ta_idx, bt);
printf("[%u] %s Immediate Assignment <%s>:\n\t%s\n", plen, dl ?
"DL" : "UL", kind,
osmo_hexdump(immediate_assignment->data, sz));
--
To view, visit
https://gerrit.osmocom.org/c/osmo-pcu/+/33123
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: If9b758434c00f2a3868534d5be84946809c989a9
Gerrit-Change-Number: 33123
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-MessageType: newchange