From aa7d690a1d80566a5072d391458d318e073eb997 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Sun, 30 Jun 2024 18:05:09 +0200 Subject: [PATCH] wifi: Default ack manager considers MPDUs being transmitted to determine if response is needed --- src/wifi/model/wifi-default-ack-manager.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/wifi/model/wifi-default-ack-manager.cc b/src/wifi/model/wifi-default-ack-manager.cc index 92c136317..48497c850 100644 --- a/src/wifi/model/wifi-default-ack-manager.cc +++ b/src/wifi/model/wifi-default-ack-manager.cc @@ -130,7 +130,8 @@ WifiDefaultAckManager::IsResponseNeeded(Ptr mpdu, NS_LOG_FUNCTION(this << *mpdu << &txParams); uint8_t tid = mpdu->GetHeader().GetQosTid(); - Mac48Address receiver = mpdu->GetOriginal()->GetHeader().GetAddr1(); + auto receiver = mpdu->GetHeader().GetAddr1(); + auto origReceiver = mpdu->GetOriginal()->GetHeader().GetAddr1(); Ptr edca = m_mac->GetQosTxop(tid); // An immediate response (Ack or Block Ack) is needed if any of the following holds: @@ -144,9 +145,11 @@ WifiDefaultAckManager::IsResponseNeeded(Ptr mpdu, return !( m_baThreshold > 0 && GetMaxDistFromStartingSeq(mpdu, txParams) < - m_baThreshold * edca->GetBaBufferSize(receiver, tid) && - (edca->GetWifiMacQueue()->GetNPackets({WIFI_QOSDATA_QUEUE, WIFI_UNICAST, receiver, tid}) - - edca->GetBaManager()->GetNBufferedPackets(receiver, tid) > + m_baThreshold * edca->GetBaBufferSize(origReceiver, tid) && + (edca->GetWifiMacQueue()->GetNPackets( + {WIFI_QOSDATA_QUEUE, WIFI_UNICAST, origReceiver, tid}) - + edca->GetBaManager()->GetNBufferedPackets(origReceiver, tid) - + txParams.GetPsduInfo(receiver)->seqNumbers.at(tid).size() >= 1) && !(edca->GetTxopLimit(m_linkId).IsStrictlyPositive() && edca->GetRemainingTxop(m_linkId) == edca->GetTxopLimit(m_linkId) &&