diff options
-rw-r--r-- | src/tbf_dl.cpp | 22 | ||||
-rw-r--r-- | tests/tbf/TbfTest.err | 31 |
2 files changed, 43 insertions, 10 deletions
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 80ea7419..1827469b 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -782,12 +782,6 @@ int gprs_rlcmac_dl_tbf::update_window(unsigned first_bsn, "X=Resend-Unacked I=Invalid\n", m_window.v_a(), show_v_b, m_window.v_s_mod(-1)); - - if (state_is(GPRS_RLCMAC_FINISHED) && m_window.window_empty()) { - LOGP(DRLCMACDL, LOGL_NOTICE, "Received acknowledge of " - "all blocks, but without final ack " - "inidcation (don't worry)\n"); - } return 0; } @@ -901,13 +895,21 @@ int gprs_rlcmac_dl_tbf::release() int gprs_rlcmac_dl_tbf::rcvd_dl_ack(uint8_t final_ack, unsigned first_bsn, struct bitvec *rbb) { + int rc; LOGP(DRLCMACDL, LOGL_DEBUG, "%s downlink acknowledge\n", tbf_name(this)); - if (!final_ack) - return update_window(first_bsn, rbb); + rc = update_window(first_bsn, rbb); - LOGP(DRLCMACDL, LOGL_DEBUG, "- Final ACK received.\n"); - return maybe_start_new_window(); + if (final_ack) { + LOGP(DRLCMACDL, LOGL_DEBUG, "- Final ACK received.\n"); + rc = maybe_start_new_window(); + } else if (state_is(GPRS_RLCMAC_FINISHED) && m_window.window_empty()) { + LOGP(DRLCMACDL, LOGL_NOTICE, "Received acknowledge of " + "all blocks, but without final ack " + "indication (don't worry)\n"); + } + + return rc; } int gprs_rlcmac_dl_tbf::rcvd_dl_ack(uint8_t final_ack, uint8_t ssn, uint8_t *rbb) diff --git a/tests/tbf/TbfTest.err b/tests/tbf/TbfTest.err index 5f493954..7b36b310 100644 --- a/tests/tbf/TbfTest.err +++ b/tests/tbf/TbfTest.err @@ -2766,6 +2766,37 @@ Got RLC block, coding scheme: CS-1, length: 23 (23)) RX: [PCU <- BTS] TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) Packet Downlink Ack/Nack Got GPRS DL ACK bitmap: SSN: 0, BSN 0 to 28 - 1 (28 blocks), "RRRRRRRRRRRRRRRRRRRRRRRRRRRR" TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) downlink acknowledge +- ack: (BSN=0)"RRRRRRRRRRRRRRRRRRRRRRRRRRRR"(BSN=27) R=ACK I=NACK +TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) DL analysis, range=0:28, lost=0, recv=28, skipped=0, bsn=0, info='RRRRRRRRRRRRRRRRRRRRRRRRRRRR....................................' +- got ack for BSN=0 +- got ack for BSN=1 +- got ack for BSN=2 +- got ack for BSN=3 +- got ack for BSN=4 +- got ack for BSN=5 +- got ack for BSN=6 +- got ack for BSN=7 +- got ack for BSN=8 +- got ack for BSN=9 +- got ack for BSN=10 +- got ack for BSN=11 +- got ack for BSN=12 +- got ack for BSN=13 +- got ack for BSN=14 +- got ack for BSN=15 +- got ack for BSN=16 +- got ack for BSN=17 +- got ack for BSN=18 +- got ack for BSN=19 +- got ack for BSN=20 +- got ack for BSN=21 +- got ack for BSN=22 +- got ack for BSN=23 +- got ack for BSN=24 +- got ack for BSN=25 +- got ack for BSN=26 +- got ack for BSN=27 +- V(B): (V(A)=28)""(V(S)-1=27) A=Acked N=Nacked U=Unacked X=Resend-Unacked I=Invalid - Final ACK received. TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=FINISHED) changes state from FINISHED to WAIT RELEASE TBF(TFI=0 TLLI=0xf1223344 DIR=DL STATE=WAIT RELEASE) starting timer 3193. |