aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2021-05-11 12:52:41 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2021-05-11 12:55:44 +0200
commiteb13c79cc0fc514ee47c3650851c2f92f6b77bf7 (patch)
tree59af2f9152df48ec3c5e858cd34c46234d0e5c8d
parentfaf0ccb241fd0d66d6ed15718f75332c4e879c17 (diff)
Tx ul ack/nack: Avoid sending invalid/unknown TLLI
It could happen that if MS sends first UL blocks without TLLI (wrongly, due to being in contention resolution), the submitted UL ACK/NACK would contain an invalid TLLI. Related: OS#1940 Change-Id: Ibae5df6cfbb56f8f8007cb9fec9c29006d673b72
-rw-r--r--src/encoding.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/encoding.cpp b/src/encoding.cpp
index 2f58759b..136532c3 100644
--- a/src/encoding.cpp
+++ b/src/encoding.cpp
@@ -890,8 +890,12 @@ static void write_packet_uplink_ack_gprs(
bitvec_write_field(dest, &wp, mcs_chan_code(tbf->current_cs()), 2); // CHANNEL_CODING_COMMAND
write_packet_ack_nack_desc_gprs(dest, wp, window, is_final);
- bitvec_write_field(dest, &wp, 1, 1); // 1: have CONTENTION_RESOLUTION_TLLI
- bitvec_write_field(dest, &wp, tbf->tlli(), 32); // CONTENTION_RESOLUTION_TLLI
+ if (tbf->is_tlli_valid()) {
+ bitvec_write_field(dest, &wp, 1, 1); // 1: have CONTENTION_RESOLUTION_TLLI
+ bitvec_write_field(dest, &wp, tbf->tlli(), 32); // CONTENTION_RESOLUTION_TLLI
+ } else {
+ bitvec_write_field(dest, &wp, 0, 1); // 0: don't have CONTENTION_RESOLUTION_TLLI
+ }
bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Packet Timing Advance
bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Power Control Parameters
@@ -1072,8 +1076,14 @@ static void write_packet_uplink_ack_egprs(
bitvec_write_field(dest, &wp, 1, 1); // PRE_EMPTIVE_TRANSMISSION, TODO: This resembles GPRS, change it?
bitvec_write_field(dest, &wp, 0, 1); // 0: no PRR_RETRANSMISSION_REQUEST, TODO: clarify
bitvec_write_field(dest, &wp, 0, 1); // 0: no ARAC_RETRANSMISSION_REQUEST, TODO: clarify
- bitvec_write_field(dest, &wp, 1, 1); // 1: have CONTENTION_RESOLUTION_TLLI
- bitvec_write_field(dest, &wp, tbf->tlli(), 32); // CONTENTION_RESOLUTION_TLLI
+
+ if (tbf->is_tlli_valid()) {
+ bitvec_write_field(dest, &wp, 1, 1); // 1: have CONTENTION_RESOLUTION_TLLI
+ bitvec_write_field(dest, &wp, tbf->tlli(), 32); // CONTENTION_RESOLUTION_TLLI
+ } else {
+ bitvec_write_field(dest, &wp, 0, 1); // 0: don't have CONTENTION_RESOLUTION_TLLI
+ }
+
bitvec_write_field(dest, &wp, 1, 1); // TBF_EST (enabled)
bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Packet Timing Advance
bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Packet Extended Timing Advance