From 17fbcaba2f508f751b8eed7f3d77aab296176bd0 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Tue, 23 Apr 2024 20:17:30 +0200 Subject: [PATCH] wifi: Aux PHYs cannot receive A-MPDUs --- .../model/eht/eht-frame-exchange-manager.cc | 21 +++++++++++++++++++ .../model/eht/eht-frame-exchange-manager.h | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/src/wifi/model/eht/eht-frame-exchange-manager.cc b/src/wifi/model/eht/eht-frame-exchange-manager.cc index b588e8ba1..1c8a4c4d7 100644 --- a/src/wifi/model/eht/eht-frame-exchange-manager.cc +++ b/src/wifi/model/eht/eht-frame-exchange-manager.cc @@ -1207,6 +1207,27 @@ EhtFrameExchangeManager::ReceiveMpdu(Ptr mpdu, } } +void +EhtFrameExchangeManager::EndReceiveAmpdu(Ptr psdu, + const RxSignalInfo& rxSignalInfo, + const WifiTxVector& txVector, + const std::vector& perMpduStatus) +{ + NS_LOG_FUNCTION( + this << *psdu << rxSignalInfo << txVector << perMpduStatus.size() + << std::all_of(perMpduStatus.begin(), perMpduStatus.end(), [](bool v) { return v; })); + + // In our model, we make the assumption that an aux PHY is not able to receive an A-MPDU + if (m_staMac && m_staMac->IsEmlsrLink(m_linkId) && + m_mac->GetLinkForPhy(m_staMac->GetEmlsrManager()->GetMainPhyId()) != m_linkId) + { + NS_LOG_DEBUG("Dropping " << *psdu << " received by an aux PHY on link " << +m_linkId); + return; + } + + HeFrameExchangeManager::EndReceiveAmpdu(psdu, rxSignalInfo, txVector, perMpduStatus); +} + bool EhtFrameExchangeManager::DropReceivedIcf() { diff --git a/src/wifi/model/eht/eht-frame-exchange-manager.h b/src/wifi/model/eht/eht-frame-exchange-manager.h index 8f9f9885e..124fdf7cc 100644 --- a/src/wifi/model/eht/eht-frame-exchange-manager.h +++ b/src/wifi/model/eht/eht-frame-exchange-manager.h @@ -183,6 +183,10 @@ class EhtFrameExchangeManager : public HeFrameExchangeManager RxSignalInfo rxSignalInfo, const WifiTxVector& txVector, bool inAmpdu) override; + void EndReceiveAmpdu(Ptr psdu, + const RxSignalInfo& rxSignalInfo, + const WifiTxVector& txVector, + const std::vector& perMpduStatus) override; void NavResetTimeout() override; void IntraBssNavResetTimeout() override; void SendCtsAfterRts(const WifiMacHeader& rtsHdr, WifiMode rtsTxMode, double rtsSnr) override;