From caf9e4547f6c4e77fabf9ea4ae3521ccaef8dd69 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Wed, 5 Jul 2023 16:22:46 +0200 Subject: [PATCH] wifi: Reset current MU PPDU UID when payload reception ends Improves the fix applied with bdfa4111. Basically, a non-AP STA could receive a DL MU PPDU including a MU-BAR TF, store the MU PPDU UID when processing SIG-B, do not respond to the MU-BAR TF (this may happen in some cases with EMLSR clients) and used the stored MU PPDU UID to schedule the reception of the OFDMA payload of the TB PPDU sent by other non-AP STAs. --- src/wifi/model/he/he-phy.cc | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/wifi/model/he/he-phy.cc b/src/wifi/model/he/he-phy.cc index fec35cefc..4b1a75a53 100644 --- a/src/wifi/model/he/he-phy.cc +++ b/src/wifi/model/he/he-phy.cc @@ -740,18 +740,9 @@ HePhy::ProcessSigB(Ptr event, PhyFieldRxStatus status) return PhyFieldRxStatus(false, FILTERED, DROP); } } - if (event->GetTxVector().IsDlMu()) - { - // When including a Trigger Frame, a DL MU PPDU solicits a TB PPDU. - // NOTE that the 'if' condition above is not needed for HE because SIG-B is only - // included in HE MU PPDUs, but it is necessary for EHT to avoid that a non-AP - // STA receiving a Trigger Frame sent as an EHT SU transmission (which carries - // the EHT-SIG field) stores the PPDU UID and uses it later to schedule the - // reception of the payload of the TB PPDU (see HePhy::StartReceivePreamble()) - // despite it lacks the TRIGVECTOR. - m_currentMuPpduUid = - event->GetPpdu()->GetUid(); // to be able to correctly schedule start of MU payload - } + m_currentMuPpduUid = + event->GetPpdu()->GetUid(); // to be able to correctly schedule start of MU payload + return status; } @@ -934,6 +925,8 @@ HePhy::DoEndReceivePayload(Ptr ppdu) NS_ASSERT(m_wifiPhy->GetLastRxEndTime() == Simulator::Now()); PhyEntity::DoEndReceivePayload(ppdu); } + // we are done receiving the payload, we can reset the current MU PPDU UID + m_currentMuPpduUid = UINT64_MAX; } void