diff --git a/src/decoding.cpp b/src/decoding.cpp index 7c00ff71..3f5c4d27 100644 --- a/src/decoding.cpp +++ b/src/decoding.cpp @@ -67,14 +67,11 @@ static int parse_extensions_egprs(const uint8_t *data, unsigned int data_len, "but no more chunks possible\n"); return -ENOSPC; } - if (li->li == 0 && num_chunks == 0 && li->e == 0) { + if (li->li == 0 && num_chunks == 0) { /* TS 44.060, table 10.4.14a.1, row 2a */ + /* TS 44.060, table 10.4.14a.1, row 4 */ chunks[num_chunks].length = 0; chunks[num_chunks].is_complete = true; - } else if (li->li == 0 && num_chunks == 0 && li->e == 1) { - /* TS 44.060, table 10.4.14a.1, row 4 */ - chunks[num_chunks].length = LENGTH_TO_END; - chunks[num_chunks].is_complete = is_last_block; } else if (li->li == 127 && li->e == 1) { /* TS 44.060, table 10.4.14a.1, row 3 & 5 */ /* only filling bytes left */ diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp index 7e0732c8..f67ffd77 100644 --- a/src/tbf_ul.cpp +++ b/src/tbf_ul.cpp @@ -67,14 +67,18 @@ int gprs_rlcmac_ul_tbf::assemble_forward_llc(const gprs_rlc_data *_data) for (i = 0; i < num_frames; i++) { frame = frames + i; - bts->rlc_ul_payload_bytes(frame->length); + if (frame->length) { + bts->rlc_ul_payload_bytes(frame->length); - LOGP(DRLCMACUL, LOGL_DEBUG, "-- Frame %d starts at offset %d, " - "length=%d, is_complete=%d\n", - i + 1, frame->offset, frame->length, frame->is_complete); + LOGP(DRLCMACUL, LOGL_DEBUG, "-- Frame %d " + "starts at offset %d, " + "length=%d, is_complete=%d\n", + i + 1, frame->offset, frame->length, + frame->is_complete); - m_llc.append_frame(data + frame->offset, frame->length); - m_llc.consume(frame->length); + m_llc.append_frame(data + frame->offset, frame->length); + m_llc.consume(frame->length); + } if (frame->is_complete) { /* send frame to SGSN */ diff --git a/tests/edge/EdgeTest.cpp b/tests/edge/EdgeTest.cpp index 592ad633..3537aa72 100644 --- a/tests/edge/EdgeTest.cpp +++ b/tests/edge/EdgeTest.cpp @@ -496,13 +496,6 @@ static void test_rlc_unit_decoder() OSMO_ASSERT(chunks[2].length == 1); OSMO_ASSERT(!chunks[2].is_complete); - /* - * TODO: simulate 3GPP TS 44.060 version 7.27.0 Release 7 - * row 4 of Table 10.4.14a.1 - * should expect 2 chunks. but currently it fails - * due to bug. The assert will be fixed along with actual - * fix - */ rdbi.e = 0; rdbi.ti = 0; rdbi.cv = 1; @@ -512,17 +505,14 @@ static void test_rlc_unit_decoder() num_chunks = Decoding::rlc_data_from_ul_data(&rdbi, cs, data, chunks, ARRAY_SIZE(chunks), &tlli); - /* - * TODO: we expect 2 chunks here - * index 0 as complete and index 1 as incomplete - * due to current bug we see only 1 chunk - * assert for index 1 will be added in subsequent - * patch - */ - OSMO_ASSERT(num_chunks == 1); + OSMO_ASSERT(num_chunks == 2); OSMO_ASSERT(chunks[0].offset == 1); - OSMO_ASSERT(chunks[0].length == 43); - OSMO_ASSERT(!chunks[0].is_complete); + OSMO_ASSERT(chunks[0].length == 0); + OSMO_ASSERT(chunks[0].is_complete); + + OSMO_ASSERT(chunks[1].offset == 1); + OSMO_ASSERT(chunks[1].length == 43); + OSMO_ASSERT(!chunks[1].is_complete); printf("=== end %s ===\n", __func__); } diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index 36aadc5f..4e37aa80 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -1980,8 +1980,7 @@ static gprs_rlcmac_ul_tbf *tbf_li_decoding(BTS *the_bts, data_msg[5] = 0x0; pdch->rcv_block(data_msg, 49, *fn, &meas); - /* TODO: should expect m_index as 43 */ - OSMO_ASSERT(ul_tbf->m_llc.m_index == 87); + OSMO_ASSERT(ul_tbf->m_llc.m_index == 43); return ul_tbf; } diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err index 06b63ebb..90f04bee 100644 --- a/tests/tbf/TbfTest.err +++ b/tests/tbf/TbfTest.err @@ -6489,7 +6489,10 @@ TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW EGPRS): data_length=44, data=01 00 0 - Raising V(R) to 2 - Taking block 1 out, raising V(Q) to 2 - Assembling frames: (len=44) --- Frame 1 starts at offset 1, length=43, is_complete=0 +TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW EGPRS) complete UL frame len=44 +LLC [PCU -> SGSN] TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW EGPRS) len=44 +No bctx +-- Frame 2 starts at offset 1, length=43, is_complete=0 - No gaps in received block, last block: BSN=1 CV=7 Got 'TBF(TFI=0 TLLI=0xf1223344 DIR=UL STATE=FLOW EGPRS)', TA=7 Got MS: TLLI = 0xf1223344, TA = 7