From c432e062ea3239bf541afc25f14f0e69d074b5c2 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Tue, 11 May 2021 13:17:31 +0200 Subject: [PATCH] encoding: Encode TA in UL ACK/NACK if available Change-Id: I3b060ee16aeac5f5d9b314b6bc46383f5e9c44c3 --- src/encoding.cpp | 21 +++++++++++++++++++-- tests/tbf/TbfTest.cpp | 8 ++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/encoding.cpp b/src/encoding.cpp index 22da6abc..0a4050fa 100644 --- a/src/encoding.cpp +++ b/src/encoding.cpp @@ -897,7 +897,15 @@ static void write_packet_uplink_ack_gprs( 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 + if (gsm48_ta_is_valid(tbf->ta())) { + bitvec_write_field(dest, &wp, 1, 1); // 1: have Packet Timing Advance IE (TS 44.060 12.12) + bitvec_write_field(dest, &wp, 1, 1); // 1: have TIMING_ADVANCE_VALUE + bitvec_write_field(dest, &wp, tbf->ta(), 6); // TIMING_ADVANCE_VALUE + bitvec_write_field(dest, &wp, 0, 1); // 0: don't have TIMING_ADVANCE_INDEX + } else { + 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 bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Extension Bits bitvec_write_field(dest, &wp, 0, 1); // fixed 0 @@ -1085,7 +1093,16 @@ static void write_packet_uplink_ack_egprs( } bitvec_write_field(dest, &wp, 1, 1); // TBF_EST (enabled) - bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Packet Timing Advance + + if (gsm48_ta_is_valid(tbf->ta())) { + bitvec_write_field(dest, &wp, 1, 1); // 1: have Packet Timing Advance IE (TS 44.060 12.12) + bitvec_write_field(dest, &wp, 1, 1); // 1: have TIMING_ADVANCE_VALUE + bitvec_write_field(dest, &wp, tbf->ta(), 6); // TIMING_ADVANCE_VALUE + bitvec_write_field(dest, &wp, 0, 1); // 0: don't have TIMING_ADVANCE_INDEX + } else { + 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 bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Power Control Parameters bitvec_write_field(dest, &wp, 0, 1); // 0: don't have Extension Bits diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp index e0fd9ccd..18a0a37d 100644 --- a/tests/tbf/TbfTest.cpp +++ b/tests/tbf/TbfTest.cpp @@ -794,8 +794,8 @@ static gprs_rlcmac_ul_tbf *puan_urbb_len_issue(struct gprs_rlcmac_bts *bts, struct msgb *msg1 = ul_tbf->create_ul_ack(*fn, ts_no); - static uint8_t exp1[] = { 0x40, 0x24, 0x01, 0x0b, 0x3e, 0x24, 0x46, 0x68, 0x90, 0x87, 0xb0, 0x06, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b + static uint8_t exp1[] = { 0x40, 0x24, 0x01, 0x0b, 0x3e, 0x24, 0x46, 0x68, 0x9c, 0x70, 0x87, 0xb0, + 0x06, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b }; if (!msgb_eq_data_print(msg1, exp1, GSM_MACBLOCK_LEN)) { @@ -821,8 +821,8 @@ static gprs_rlcmac_ul_tbf *puan_urbb_len_issue(struct gprs_rlcmac_bts *bts, msg1 = ul_tbf->create_ul_ack(*fn, ts_no); - static uint8_t exp2[] = { 0x40, 0x24, 0x01, 0x0b, 0x3e, 0x24, 0x46, 0x68, 0x90, 0x88, 0xb0, 0x06, 0x8b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b + static uint8_t exp2[] = { 0x40, 0x24, 0x01, 0x0b, 0x3e, 0x24, 0x46, 0x68, 0x9c, 0x70, 0x88, 0xb0, + 0x06, 0x8b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b }; if (!msgb_eq_data_print(msg1, exp2, GSM_MACBLOCK_LEN)) {