diff --git a/src/wifi/model/eht/eht-frame-exchange-manager.cc b/src/wifi/model/eht/eht-frame-exchange-manager.cc index 3e1a17bbb..e36c5696e 100644 --- a/src/wifi/model/eht/eht-frame-exchange-manager.cc +++ b/src/wifi/model/eht/eht-frame-exchange-manager.cc @@ -412,4 +412,23 @@ EhtFrameExchangeManager::GetEmlsrSwitchToListening(Ptr psdu, return true; } +void +EhtFrameExchangeManager::NotifyChannelReleased(Ptr txop) +{ + NS_LOG_FUNCTION(this << txop); + + // the channel has been released; all EMLSR clients will switch back to listening + // operation after a timeout interval of aSIFSTime + aSlotTime + aRxPHYStartDelay + auto delay = m_phy->GetSifs() + m_phy->GetSlot() + MicroSeconds(20); + for (const auto& address : m_protectedStas) + { + if (GetWifiRemoteStationManager()->GetEmlsrEnabled(address)) + { + EmlsrSwitchToListening(address, delay); + } + } + + HeFrameExchangeManager::NotifyChannelReleased(txop); +} + } // namespace ns3 diff --git a/src/wifi/model/eht/eht-frame-exchange-manager.h b/src/wifi/model/eht/eht-frame-exchange-manager.h index 9a8baa760..06a9bf832 100644 --- a/src/wifi/model/eht/eht-frame-exchange-manager.h +++ b/src/wifi/model/eht/eht-frame-exchange-manager.h @@ -81,6 +81,7 @@ class EhtFrameExchangeManager : public HeFrameExchangeManager void ForwardPsduDown(Ptr psdu, WifiTxVector& txVector) override; void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector& txVector) override; void SendMuRts(const WifiTxParameters& txParams) override; + void NotifyChannelReleased(Ptr txop) override; /** * This method is intended to be called when an AP MLD detects that an EMLSR client previously