wifi: Fix addresses used in MU ack sequences involving MU-BAR TFs

This commit is contained in:
Stefano Avallone
2022-12-14 17:13:01 +01:00
committed by Stefano Avallone
parent afa86603db
commit bd9f087608
2 changed files with 11 additions and 7 deletions

View File

@@ -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

View File

@@ -570,7 +570,9 @@ WifiDefaultAckManager::GetAckInfoIfTfMuBar(Ptr<const WifiMpdu> mpdu,
Ptr<QosTxop> 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<const WifiMpdu> 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)});