wifi: Do not reset NAV while using another EMLSR link
CTS may have been missed due to the main PHY switching to another link to take over a TXOP while receiving the CTS.
This commit is contained in:
committed by
Stefano Avallone
parent
0b76f70896
commit
56511e5108
@@ -1028,6 +1028,14 @@ void
|
||||
ChannelAccessManager::NotifyNavResetNow(Time duration)
|
||||
{
|
||||
NS_LOG_FUNCTION(this << duration);
|
||||
|
||||
if (!m_phy)
|
||||
{
|
||||
NS_LOG_DEBUG("Do not reset NAV, CTS may have been missed due to the main PHY switching "
|
||||
"to another link to take over a TXOP while receiving the CTS");
|
||||
return;
|
||||
}
|
||||
|
||||
NS_LOG_DEBUG("nav reset for=" << duration);
|
||||
UpdateBackoff();
|
||||
m_lastNavEnd = Simulator::Now() + duration;
|
||||
|
||||
@@ -294,6 +294,30 @@ EhtFrameExchangeManager::ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVect
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
EhtFrameExchangeManager::NavResetTimeout()
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
if (UsingOtherEmlsrLink())
|
||||
{
|
||||
// the CTS may have been missed because another EMLSR link is being used; do not reset NAV
|
||||
return;
|
||||
}
|
||||
HeFrameExchangeManager::NavResetTimeout();
|
||||
}
|
||||
|
||||
void
|
||||
EhtFrameExchangeManager::IntraBssNavResetTimeout()
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
if (UsingOtherEmlsrLink())
|
||||
{
|
||||
// the CTS may have been missed because another EMLSR link is being used; do not reset NAV
|
||||
return;
|
||||
}
|
||||
HeFrameExchangeManager::IntraBssNavResetTimeout();
|
||||
}
|
||||
|
||||
void
|
||||
EhtFrameExchangeManager::EmlsrSwitchToListening(const Mac48Address& address, const Time& delay)
|
||||
{
|
||||
|
||||
@@ -113,6 +113,8 @@ class EhtFrameExchangeManager : public HeFrameExchangeManager
|
||||
RxSignalInfo rxSignalInfo,
|
||||
const WifiTxVector& txVector,
|
||||
bool inAmpdu) override;
|
||||
void NavResetTimeout() override;
|
||||
void IntraBssNavResetTimeout() override;
|
||||
|
||||
/**
|
||||
* This method is intended to be called when an AP MLD detects that an EMLSR client previously
|
||||
|
||||
Reference in New Issue
Block a user