TBF: add N3101 counter
Properly reset the counter when receiving valid RLCMAC block and update it when no data is received as per 3GPP TS 44.060 §8.1.1.1 Change-Id: I2f79c6153dc4073c9d293b2824979e6381576682 Fixes: OS#2407
This commit is contained in:
parent
ee5be3a009
commit
59e4a4fee1
19
src/bts.cpp
19
src/bts.cpp
|
@ -996,6 +996,10 @@ void gprs_rlcmac_pdch::rcv_control_ack(Packet_Control_Acknowledgement_t *packet,
|
|||
ms->dl_tbf() ? ms->dl_tbf()->state_name() : "None");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Reset N3101 counter: */
|
||||
tbf->m_n3101 = 0;
|
||||
|
||||
tbf->update_ms(tlli, GPRS_RLCMAC_UL_TBF);
|
||||
|
||||
LOGPTBF(tbf, LOGL_DEBUG, "RX: [PCU <- BTS] Packet Control Ack\n");
|
||||
|
@ -1185,6 +1189,9 @@ void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_n
|
|||
return;
|
||||
}
|
||||
|
||||
/* Reset N3101 counter: */
|
||||
tbf->m_n3101 = 0;
|
||||
|
||||
if (tbf->handle_ack_nack())
|
||||
LOGPTBF(tbf, LOGL_NOTICE, "Recovered downlink ack\n");
|
||||
|
||||
|
@ -1249,6 +1256,9 @@ void gprs_rlcmac_pdch::rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *ack_nac
|
|||
return;
|
||||
}
|
||||
|
||||
/* Reset N3101 counter: */
|
||||
tbf->m_n3101 = 0;
|
||||
|
||||
if (tbf->handle_ack_nack())
|
||||
LOGPTBF(tbf, LOGL_NOTICE, "Recovered EGPRS downlink ack\n");
|
||||
|
||||
|
@ -1417,6 +1427,9 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request,
|
|||
}
|
||||
LOGPTBFDL(dl_tbf, LOGL_ERROR,
|
||||
"RX: [PCU <- BTS] FIXME: Packet resource request\n");
|
||||
|
||||
/* Reset N3101 counter: */
|
||||
dl_tbf->m_n3101 = 0;
|
||||
} else {
|
||||
struct gprs_rlcmac_ul_tbf *ul_tbf;
|
||||
int8_t tfi = request->ID.u.Global_TFI.u.UPLINK_TFI;
|
||||
|
@ -1427,6 +1440,9 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request,
|
|||
}
|
||||
LOGPTBFUL(ul_tbf, LOGL_ERROR,
|
||||
"RX: [PCU <- BTS] %s FIXME: Packet resource request\n");
|
||||
|
||||
/* Reset N3101 counter: */
|
||||
ul_tbf->m_n3101 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1579,6 +1595,9 @@ int gprs_rlcmac_pdch::rcv_data_block(uint8_t *data, uint8_t data_len, uint32_t f
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Reset N3101 counter: */
|
||||
tbf->m_n3101 = 0;
|
||||
|
||||
return tbf->rcv_data_block_acknowledged(&rlc_dec, data, meas);
|
||||
}
|
||||
|
||||
|
|
|
@ -177,6 +177,7 @@ gprs_rlcmac_tbf::gprs_rlcmac_tbf(BTS *bts_, gprs_rlcmac_tbf_direction dir) :
|
|||
was_releasing(0),
|
||||
upgrade_to_multislot(0),
|
||||
bts(bts_),
|
||||
m_n3101(0),
|
||||
m_tfi(0),
|
||||
m_created_ts(0),
|
||||
m_ctrs(NULL),
|
||||
|
@ -740,6 +741,14 @@ void gprs_rlcmac_tbf::poll_timeout()
|
|||
|
||||
poll_state = GPRS_RLCMAC_POLL_NONE;
|
||||
|
||||
m_n3101++;
|
||||
if (m_n3101 == bts->bts_data()->n3101) {
|
||||
LOGP(DRLCMAC, LOGL_NOTICE, " N3101 exceeded MAX (%u)\n", bts->bts_data()->n3101);
|
||||
set_state(GPRS_RLCMAC_RELEASING);
|
||||
t_start(T3169, bts->bts_data()->t3169, 0, "MAX N3101 reached", false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ul_tbf && ul_tbf->handle_ctrl_ack()) {
|
||||
if (!ul_tbf->ctrl_ack_to_toggle()) {
|
||||
LOGP(DRLCMAC, LOGL_NOTICE, "- Timeout for polling PACKET CONTROL ACK for PACKET UPLINK ACK\n");
|
||||
|
|
Loading…
Reference in New Issue