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
This commit is contained in:
parent
5579595464
commit
aae1bfbbe0
28
src/bts.cpp
28
src/bts.cpp
|
@ -1175,17 +1175,11 @@ void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_n
|
|||
"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 @@ void gprs_rlcmac_pdch::rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *ack_nac
|
|||
"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, "
|
||||
|
|
|
@ -424,6 +424,8 @@ struct gprs_rlcmac_dl_tbf : public gprs_rlcmac_tbf {
|
|||
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;
|
||||
|
|
|
@ -609,6 +609,29 @@ int gprs_rlcmac_dl_tbf::create_new_bsn(const uint32_t fn, GprsCodingScheme cs)
|
|||
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 @@ struct msgb *gprs_rlcmac_dl_tbf::create_dl_acked_block(
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue