From c9dd0e4d62cbf1f02f4e9f018dfd70c2499dca35 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Fri, 16 Jun 2023 20:17:43 +0200 Subject: [PATCH] wifi: EMLSR clients send RTS as initial frame in a TXOP while MediumSyncDelay timer is running --- src/wifi/model/wifi-default-protection-manager.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/wifi/model/wifi-default-protection-manager.cc b/src/wifi/model/wifi-default-protection-manager.cc index c435b7410..69d684de9 100644 --- a/src/wifi/model/wifi-default-protection-manager.cc +++ b/src/wifi/model/wifi-default-protection-manager.cc @@ -190,8 +190,8 @@ WifiDefaultProtectionManager::GetPsduProtection(const WifiMacHeader& hdr, return std::make_unique(); } - // when an EMLSR client starts an UL TXOP on a link on which the main PHY is not operating, - // the aux PHY sends an RTS frame + // when an EMLSR client starts an UL TXOP on a link while the MediumSyncDelay timer is running + // or on a link on which the main PHY is not operating, it needs to send an RTS frame bool emlsrNeedRts = false; if (auto staMac = DynamicCast(m_mac)) @@ -199,7 +199,8 @@ WifiDefaultProtectionManager::GetPsduProtection(const WifiMacHeader& hdr, auto emlsrManager = staMac->GetEmlsrManager(); emlsrNeedRts = emlsrManager && staMac->IsEmlsrLink(m_linkId) && - m_mac->GetLinkForPhy(emlsrManager->GetMainPhyId()) != m_linkId; + (emlsrManager->GetElapsedMediumSyncDelayTimer(m_linkId) || + m_mac->GetLinkForPhy(emlsrManager->GetMainPhyId()) != m_linkId); } // check if RTS/CTS is needed