From bd9f0876088cc901486add50ab8713a2dc612ce7 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Wed, 14 Dec 2022 17:13:01 +0100 Subject: [PATCH] wifi: Fix addresses used in MU ack sequences involving MU-BAR TFs --- src/wifi/model/he/he-frame-exchange-manager.cc | 10 +++++----- src/wifi/model/wifi-default-ack-manager.cc | 8 ++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/wifi/model/he/he-frame-exchange-manager.cc b/src/wifi/model/he/he-frame-exchange-manager.cc index 628fa6e85..593cf51b7 100644 --- a/src/wifi/model/he/he-frame-exchange-manager.cc +++ b/src/wifi/model/he/he-frame-exchange-manager.cc @@ -1308,10 +1308,7 @@ HeFrameExchangeManager::SendMultiStaBlockAck(const WifiTxParameters& txParams) // Block acknowledgment context blockAck.SetAckType(false, index); - auto addressTidPair = staInfo.first; - auto agreement = - GetBaManager(addressTidPair.second) - ->GetAgreementAsRecipient(addressTidPair.first, addressTidPair.second); + auto agreement = m_mac->GetBaAgreementEstablishedAsRecipient(receiver, tid); NS_ASSERT(agreement); agreement->get().FillBlockAckBitmap(&blockAck, index); NS_LOG_DEBUG("Multi-STA Block Ack: Sending Block Ack with seq=" @@ -1426,8 +1423,11 @@ HeFrameExchangeManager::ReceiveBasicTrigger(const CtrlTriggerHeader& trigger, } // otherwise, check if a suitable data frame is available - if (auto mpdu = edca->PeekNextMpdu(m_linkId, tid, hdr.GetAddr2())) + auto receiver = + GetWifiRemoteStationManager()->GetMldAddress(hdr.GetAddr2()).value_or(hdr.GetAddr2()); + if (auto mpdu = edca->PeekNextMpdu(m_linkId, tid, receiver)) { + mpdu = CreateAliasIfNeeded(mpdu); if (auto item = edca->GetNextMpdu(m_linkId, mpdu, txParams, ppduDuration, false)) { // try A-MPDU aggregation diff --git a/src/wifi/model/wifi-default-ack-manager.cc b/src/wifi/model/wifi-default-ack-manager.cc index e2ba42ac3..308ef13cc 100644 --- a/src/wifi/model/wifi-default-ack-manager.cc +++ b/src/wifi/model/wifi-default-ack-manager.cc @@ -570,7 +570,9 @@ WifiDefaultAckManager::GetAckInfoIfTfMuBar(Ptr mpdu, Ptr edca = m_mac->GetQosTxop(QosUtilsMapTidToAc(tid)); acknowledgment->stationsReplyingWithBlockAck.emplace( receiver, - WifiDlMuTfMuBar::BlockAckInfo{edca->GetBaManager()->GetBlockAckReqHeader(receiver, tid), + WifiDlMuTfMuBar::BlockAckInfo{edca->GetBaManager()->GetBlockAckReqHeader( + mpdu->GetOriginal()->GetHeader().GetAddr1(), + tid), blockAckTxVector, m_mac->GetBaTypeAsOriginator(receiver, tid)}); @@ -657,7 +659,9 @@ WifiDefaultAckManager::GetAckInfoIfAggregatedMuBar(Ptr mpdu, receiver, WifiDlMuAggregateTf::BlockAckInfo{ GetMuBarSize({m_mac->GetBarTypeAsOriginator(receiver, tid)}), - edca->GetBaManager()->GetBlockAckReqHeader(receiver, tid), + edca->GetBaManager()->GetBlockAckReqHeader( + mpdu->GetOriginal()->GetHeader().GetAddr1(), + tid), blockAckTxVector, m_mac->GetBaTypeAsOriginator(receiver, tid)});