wifi: Allow using BSRP TFs as ICFs for EMLSR clients
This commit is contained in:
@@ -36,6 +36,7 @@ The required Doxygen version for documentation generation is version 1.11.
|
||||
- (applications) - The `ThreeGppHttpServer::LocalAddress` and `ThreeGppHttpServer::LocalPort` attributes have been renamed to `ThreeGppHttpServer::Remote` and `ThreeGppHttpServer::Port`, respectively.
|
||||
- (applications) - It is now possible to specify the address on which to bind the listening socket for UdpServer via the `Local` attribute.
|
||||
- (applications) - It is now possible to specify a port only for PacketSink to listen to any address (both IPv4 and IPv6).
|
||||
- (wifi) - Added a `WifiDefaultProtectionManager::SkipMuRtsBeforeBsrp` attribute to avoid using MU-RTS to protect the transmission of a BSRP Trigger Frame. If this attribute is set to true (which is the default value), BSRP Trigger Frames can be used as Initial Control Frames for EMLSR clients
|
||||
|
||||
### Bugs fixed
|
||||
|
||||
|
||||
@@ -48,6 +48,12 @@ WifiDefaultProtectionManager::GetTypeId()
|
||||
"Initial Control Frame to an EMLSR client).",
|
||||
BooleanValue(false),
|
||||
MakeBooleanAccessor(&WifiDefaultProtectionManager::m_singleRtsPerTxop),
|
||||
MakeBooleanChecker())
|
||||
.AddAttribute("SkipMuRtsBeforeBsrp",
|
||||
"If enabled, MU-RTS is not used to protect the transmission of a BSRP "
|
||||
"Trigger Frame.",
|
||||
BooleanValue(true),
|
||||
MakeBooleanAccessor(&WifiDefaultProtectionManager::m_skipMuRtsBeforeBsrp),
|
||||
MakeBooleanChecker());
|
||||
return tid;
|
||||
}
|
||||
@@ -376,6 +382,10 @@ WifiDefaultProtectionManager::TryUlMuTransmission(Ptr<const WifiMpdu> mpdu,
|
||||
(m_sendMuRts && !allProtected && (!m_singleRtsPerTxop || protectedStas.empty())) ||
|
||||
isUnprotectedEmlsrDst;
|
||||
|
||||
// if we are sending a BSRP TF and SkipMuRtsBeforeBsrpTf is true, do not use MU-RTS (even in
|
||||
// case of unprotected EMLSR, because the BSRP TF is an ICF)
|
||||
needMuRts = needMuRts && (!m_skipMuRtsBeforeBsrp || !trigger.IsBsrp());
|
||||
|
||||
if (!needMuRts)
|
||||
{
|
||||
// No protection needed
|
||||
|
||||
@@ -87,8 +87,9 @@ class WifiDefaultProtectionManager : public WifiProtectionManager
|
||||
virtual std::unique_ptr<WifiProtection> TryUlMuTransmission(Ptr<const WifiMpdu> mpdu,
|
||||
const WifiTxParameters& txParams);
|
||||
|
||||
bool m_sendMuRts; //!< true for sending an MU-RTS to protect DL MU PPDUs
|
||||
bool m_singleRtsPerTxop; //!< true for using protection only once in a TXOP
|
||||
bool m_sendMuRts; //!< true for sending an MU-RTS to protect DL MU PPDUs
|
||||
bool m_singleRtsPerTxop; //!< true for using protection only once in a TXOP
|
||||
bool m_skipMuRtsBeforeBsrp; //!< whether to skip MU-RTS before BSRP TF
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -2158,7 +2158,9 @@ OfdmaAckSequenceTest::DoRun()
|
||||
TimeValue(m_defaultTbPpduDuration));
|
||||
mac.SetProtectionManager("ns3::WifiDefaultProtectionManager",
|
||||
"EnableMuRts",
|
||||
BooleanValue(true));
|
||||
BooleanValue(true),
|
||||
"SkipMuRtsBeforeBsrp",
|
||||
BooleanValue(false));
|
||||
mac.SetAckManager("ns3::WifiDefaultAckManager",
|
||||
"DlMuAckSequenceType",
|
||||
EnumValue(m_dlMuAckType));
|
||||
|
||||
Reference in New Issue
Block a user