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/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgMax has submitted this change and it was merged. Change subject: Remove TBF knowledge from rcv_control*dl_ack_nack ...................................................................... Remove TBF knowledge from rcv_control*dl_ack_nack Do not access TBF internals directly from rcv_control*dl_ack_nack() - wrap corresponding code into TBF-DL method. Change-Id: I3d1b5782001e45617b4a960612fcfc249904b37c Related: OS#1539 --- M src/bts.cpp M src/tbf.h M src/tbf_dl.cpp 3 files changed, 34 insertions(+), 22 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/bts.cpp b/src/bts.cpp index 1d27284..5192646 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -1175,17 +1175,11 @@ "wrong TFI=%d, ignoring!\n", tfi); return; } - tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK); - if ((tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) { - tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); - LOGP(DRLCMAC, LOGL_NOTICE, "Recovered downlink ack " - "for %s\n", tbf_name(tbf)); - } - /* reset N3105 */ - tbf->n3105 = 0; - tbf->stop_t3191(); + + if (tbf->handle_ack_nack()) + LOGP(DRLCMAC, LOGL_NOTICE, "Recovered downlink ack for %s\n", tbf_name(tbf)); + LOGP(DRLCMAC, LOGL_DEBUG, "RX: [PCU <- BTS] %s Packet Downlink Ack/Nack\n", tbf_name(tbf)); - tbf->poll_state = GPRS_RLCMAC_POLL_NONE; bits.data = bits_data; bits.data_len = sizeof(bits_data); @@ -1263,19 +1257,13 @@ "wrong TFI=%d, ignoring!\n", tfi); return; } - tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK); - if ((tbf->state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) { - tbf->state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); - LOGP(DRLCMAC, LOGL_NOTICE, "Recovered EGPRS downlink ack " - "for %s\n", tbf_name(tbf)); - } - /* reset N3105 */ - tbf->n3105 = 0; - tbf->stop_t3191(); + + if (tbf->handle_ack_nack()) + LOGP(DRLCMAC, LOGL_NOTICE, "Recovered EGPRS downlink ack for %s\n", tbf_name(tbf)); + LOGP(DRLCMAC, LOGL_DEBUG, "RX: [PCU <- BTS] %s EGPRS Packet Downlink Ack/Nack\n", tbf_name(tbf)); - tbf->poll_state = GPRS_RLCMAC_POLL_NONE; LOGP(DRLCMAC, LOGL_DEBUG, "EGPRS ACK/NACK: " "ut: %d, final: %d, bow: %d, eow: %d, ssn: %d, have_crbb: %d, " diff --git a/src/tbf.h b/src/tbf.h index 09e3122..87aa7a5 100644 --- a/src/tbf.h +++ b/src/tbf.h @@ -424,6 +424,8 @@ int rcvd_dl_ack(uint8_t final, uint8_t ssn, uint8_t *rbb); int rcvd_dl_ack(uint8_t final_ack, unsigned first_bsn, struct bitvec *rbb); struct msgb *create_dl_acked_block(uint32_t fn, uint8_t ts); + void clear_poll_timeout_flag(); + bool handle_ack_nack(); void request_dl_ack(); bool need_control_ts() const; bool have_data() const; diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 24c6385..a894789 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -609,6 +609,29 @@ return bsn; } +void gprs_rlcmac_dl_tbf::clear_poll_timeout_flag() +{ + state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); +} + +bool gprs_rlcmac_dl_tbf::handle_ack_nack() +{ + bool ack_recovered = false; + + state_flags |= (1 << GPRS_RLCMAC_FLAG_DL_ACK); + if ((state_flags & (1 << GPRS_RLCMAC_FLAG_TO_DL_ACK))) { + clear_poll_timeout_flag(); + ack_recovered = true; + } + + /* reset N3105 */ + n3105 = 0; + stop_t3191(); + poll_state = GPRS_RLCMAC_POLL_NONE; + + return ack_recovered; +} + struct msgb *gprs_rlcmac_dl_tbf::create_dl_acked_block( const uint32_t fn, const uint8_t ts, int index, int index2) @@ -807,8 +830,7 @@ if (is_final) tbf_timer_start(this, 3191, bts_data()->t3191, 0); - /* Clear poll timeout flag */ - state_flags &= ~(1 << GPRS_RLCMAC_FLAG_TO_DL_ACK); + clear_poll_timeout_flag(); /* Clear request flag */ m_dl_ack_requested = false; -- To view, visit https://gerrit.osmocom.org/3154 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I3d1b5782001e45617b4a960612fcfc249904b37c Gerrit-PatchSet: 3 Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Owner: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max <msuraev at sysmocom.de>