This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/osmocom-net-gprs@lists.osmocom.org/.
Bhargava Abhyankar Bhargava.Abhyankar at radisys.comFix bug in extraction of E and TI header fields in parsing of uplink header type 1 RLC data block. Test suite for the same is also updated. --- src/decoding.cpp | 15 ++++++++------- tests/edge/EdgeTest.cpp | 16 +++++++--------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/decoding.cpp b/src/decoding.cpp index 6844856..b8e453e 100644 --- a/src/decoding.cpp +++ b/src/decoding.cpp @@ -513,9 +513,9 @@ int Decoding::rlc_parse_ul_data_header_egprs_type_1( offs = rlc->data_offs_bits[0] / 8; OSMO_ASSERT(rlc->data_offs_bits[0] % 8 == 0); - e_ti_header = (data[offs-1] + (data[offs] << 8)) >> 7; - rlc->block_info[0].e = !!(e_ti_header & 0x01); - rlc->block_info[0].ti = !!(e_ti_header & 0x02); + e_ti_header = (data[offs - 1] & (0xc0)) >> 6; + rlc->block_info[0].e = (e_ti_header & 0x01); + rlc->block_info[0].ti = (e_ti_header & 0x02); cur_bit += 2; rlc->block_info[1].cv = egprs1->cv; @@ -524,20 +524,21 @@ int Decoding::rlc_parse_ul_data_header_egprs_type_1( ((egprs1->bsn2_a << 0) | (egprs1->bsn2_b << 2)); rlc->block_info[1].bsn = rlc->block_info[1].bsn & (RLC_EGPRS_SNS - 1); - cur_bit += rlc->data_offs_bits[1] - 2; + cur_bit = rlc->data_offs_bits[1] - 2; offs = rlc->data_offs_bits[1] / 8; OSMO_ASSERT(rlc->data_offs_bits[1] % 8 == 2); - e_ti_header = (data[offs-1] + (data[offs] << 8)) >> 7; - rlc->block_info[1].e = !!(e_ti_header & 0x01); - rlc->block_info[1].ti = !!(e_ti_header & 0x02); + e_ti_header = (data[offs] & (0x03)); + rlc->block_info[1].e = (e_ti_header & 0x01); + rlc->block_info[1].ti = (e_ti_header & 0x02); cur_bit += 2; /* skip data area */ cur_bit += cs.maxDataBlockBytes() * 8; return cur_bit; } + /** * \brief Copy LSB bitstream RLC data block to byte aligned buffer. * diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp index ff080f9..9b4a1a5 100644 --- a/tests/edge/EdgeTest.cpp +++ b/tests/edge/EdgeTest.cpp @@ -1376,18 +1376,16 @@ static gprs_rlcmac_ul_tbf *uplink_header_parsing_test(BTS *the_bts, egprs1->r = 1; egprs1->cv = 7; egprs1->tfi_a = tfi & (~((~0) << 2)); - egprs1->tfi_b = tfi & (~((~0) << 3)) << 2; - egprs1->bsn1_a = 10; - egprs1->bsn1_b = 17; - egprs1->bsn2_a = 0; - egprs1->bsn2_b = 25; + egprs1->tfi_b = (tfi & (~((~0) << 3)) << 2) >> 2; + egprs1->bsn1_a = 0; + egprs1->bsn1_b = 0; + egprs1->bsn2_a = 1; + egprs1->bsn2_b = 0; egprs1->cps = 15; egprs1->rsb = 0; egprs1->pi = 0; - data[6] = 1; - data[6 + 68] = 1; - data[75] = 1; - data[75 + 68] = 1; + data[5] = 0x40; + data[5 + 69] = 1; pdch = &the_bts->bts_data()->trx[trx_no].pdch[ts_no]; pdch->rcv_block(&data[0], 143, *fn, &meas); } -- 2.5.0