pdch: Validate poll reason matches in rcv_control_(egprs)_dl_ack_nack()

If we didn't expect this kind of UL messages according to pdch ULC, then
we shouldn't allow going forward and releasing the ULC entry: let it
time out instead so that TBF runs whatever appopiate action is needed in
this case, be it retransamission, releasing itself, etc.

Change-Id: I8ab3f5e4f2f802944269453db13a80c9ede67714
changes/47/25747/1
Pau Espin 1 year ago
parent 0dbf6f2a54
commit 8318d9c25d
  1. 6
      src/pdch.cpp

@ -463,7 +463,8 @@ void gprs_rlcmac_pdch::rcv_control_dl_ack_nack(Packet_Downlink_Ack_Nack_t *ack_n
tfi = ack_nack->DOWNLINK_TFI;
poll = pdch_ulc_get_node(ulc, fn);
if (!poll || poll->type != PDCH_ULC_NODE_TBF_POLL) {
if (!poll || poll->type != PDCH_ULC_NODE_TBF_POLL ||
poll->tbf_poll.reason != PDCH_ULC_POLL_DL_ACK) {
LOGPDCH(this, DRLCMAC, LOGL_NOTICE, "PACKET DOWNLINK ACK with "
"unknown FN=%u TFI=%d (TRX %d TS %d)\n",
fn, tfi, trx_no(), ts_no);
@ -532,7 +533,8 @@ void gprs_rlcmac_pdch::rcv_control_egprs_dl_ack_nack(EGPRS_PD_AckNack_t *ack_nac
tfi = ack_nack->DOWNLINK_TFI;
poll = pdch_ulc_get_node(ulc, fn);
if (!poll || poll->type != PDCH_ULC_NODE_TBF_POLL) {
if (!poll || poll->type != PDCH_ULC_NODE_TBF_POLL ||
poll->tbf_poll.reason != PDCH_ULC_POLL_DL_ACK) {
LOGPDCH(this, DRLCMAC, LOGL_NOTICE, "EGPRS PACKET DOWNLINK ACK with "
"unknown FN=%u TFI=%d (TRX %d TS %d)\n",
fn, tfi, trx_no(), ts_no);

Loading…
Cancel
Save