Test the transmission of DL frames to EMLSR clients. More...
#include "wifi-emlsr-test.h"
Classes | |
struct | Params |
Parameters for the EMLSR DL TXOP test. More... | |
Public Member Functions | |
EmlsrDlTxopTest (const Params ¶ms) | |
Constructor. More... | |
~EmlsrDlTxopTest () override=default | |
Public Member Functions inherited from EmlsrOperationsTestBase | |
EmlsrOperationsTestBase (const std::string &name) | |
Constructor. More... | |
~EmlsrOperationsTestBase () override=default | |
Public Member Functions inherited from ns3::TestCase | |
TestCase (const TestCase &)=delete | |
virtual | ~TestCase () |
Destructor. More... | |
std::string | GetName () const |
TestCase & | operator= (const TestCase &)=delete |
Protected Member Functions | |
void | CheckBlockAck (const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, uint8_t phyId) |
Check that appropriate actions are taken by the AP MLD receiving a PPDU containing BlockAck frames from EMLSR clients on the given link. More... | |
void | CheckEmlNotificationFrame (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD transmitting an EML Operating Mode Notification response frame to an EMLSR client on the given link. More... | |
void | CheckInitialControlFrame (Ptr< const WifiMpdu > mpdu, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD transmitting an initial Control frame to an EMLSR client on the given link. More... | |
void | CheckPmModeAfterAssociation (const Mac48Address &address) |
Check that the AP MLD considers the correct Power Management mode for the links setup with the given non-AP MLD. More... | |
void | CheckQosFrames (const WifiConstPsduMap &psduMap, const WifiTxVector &txVector, uint8_t linkId) |
Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing QoS data frames to EMLSR clients on the given link. More... | |
void | CheckResults () |
Check that the simulation produced the expected results. More... | |
void | DoRun () override |
Implementation to actually run this TestCase. More... | |
void | DoSetup () override |
Implementation to do any local setup required for this TestCase. More... | |
void | Transmit (Ptr< WifiMac > mac, uint8_t phyId, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW) override |
Callback invoked when a FEM passes PSDUs to the PHY. More... | |
Protected Member Functions inherited from EmlsrOperationsTestBase | |
void | CheckBlockedLink (Ptr< WifiMac > mac, Mac48Address dest, uint8_t linkId, WifiQueueBlockedReason reason, bool blocked, std::string description, bool testUnblockedForOtherReasons=true) |
Check whether QoS data unicast transmissions addressed to the given destination on the given link are blocked or unblocked for the given reason on the given device. More... | |
Ptr< PacketSocketClient > | GetApplication (TrafficDirection dir, std::size_t staId, std::size_t count, std::size_t pktSize) const |
Protected Member Functions inherited from ns3::TestCase | |
TestCase (std::string name) | |
Constructor. More... | |
void | AddTestCase (TestCase *testCase, TestDuration duration=QUICK) |
Add an individual child TestCase to this test suite. More... | |
TestCase * | GetParent () const |
Get the parent of this TestCase. More... | |
bool | IsStatusFailure () const |
Check if any tests failed. More... | |
bool | IsStatusSuccess () const |
Check if all tests passed. More... | |
void | SetDataDir (std::string directory) |
Set the data directory where reference trace files can be found. More... | |
void | ReportTestFailure (std::string cond, std::string actual, std::string limit, std::string message, std::string file, int32_t line) |
Log the failure of this TestCase. More... | |
bool | MustAssertOnFailure () const |
Check if this run should assert on failure. More... | |
bool | MustContinueOnFailure () const |
Check if this run should continue on failure. More... | |
std::string | CreateDataDirFilename (std::string filename) |
Construct the full path to a file in the data directory. More... | |
std::string | CreateTempDirFilename (std::string filename) |
Construct the full path to a file in a temporary directory. More... | |
Private Member Functions | |
void | EnableEmlsrMode () |
Enable EMLSR mode on the next EMLSR client. More... | |
void | StartTraffic () override |
Start the generation of traffic (needs to be overridden) More... | |
Private Attributes | |
std::size_t | m_countBlockAck |
counter for BlockAck frames (transition delay test) More... | |
std::size_t | m_countQoSframes |
counter for QoS frames (transition delay test) More... | |
Time | m_emlsrEnabledTime |
when EMLSR mode has been enabled on all EMLSR clients More... | |
std::set< uint8_t > | m_emlsrLinks |
IDs of the links on which EMLSR mode has to be enabled. More... | |
Ptr< ListErrorModel > | m_errorModel |
error rate model to corrupt BlockAck at AP MLD More... | |
const Time | m_fe2to3delay |
time interval between 2nd and 3rd frame exchange sequences after the enablement of EMLSR mode More... | |
Additional Inherited Members | |
Public Types inherited from EmlsrOperationsTestBase | |
enum | TrafficDirection : uint8_t { DOWNLINK = 0 , UPLINK } |
Enumeration for traffic directions. More... | |
Public Types inherited from ns3::TestCase | |
enum | TestDuration { QUICK = 1 , EXTENSIVE = 2 , TAKES_FOREVER = 3 } |
How long the test takes to execute. More... | |
Protected Attributes inherited from EmlsrOperationsTestBase | |
Ptr< ApWifiMac > | m_apMac |
AP wifi MAC. More... | |
std::vector< PacketSocketAddress > | m_dlSockets |
packet socket address for DL traffic More... | |
Time | m_duration {0} |
simulation duration More... | |
bool | m_establishBaDl {false} |
whether BA needs to be established (for TID 0) with the AP as originator More... | |
bool | m_establishBaUl {false} |
whether BA needs to be established (for TID 0) with the AP as recipient More... | |
uint16_t | m_lastAid {0} |
AID of last associated station. More... | |
std::set< uint8_t > | m_linksToEnableEmlsrOn |
IDs of the links on which EMLSR mode has to be enabled. More... | |
uint8_t | m_mainPhyId {0} |
ID of the main PHY. More... | |
std::size_t | m_nEmlsrStations {1} |
number of stations to create that activate EMLSR More... | |
std::size_t | m_nNonEmlsrStations {0} |
number of stations to create that do not activate EMLSR More... | |
std::vector< Time > | m_paddingDelay |
Padding Delay advertised by the non-AP MLD. More... | |
std::vector< Ptr< StaWifiMac > > | m_staMacs |
MACs of the non-AP MLDs. More... | |
std::vector< Time > | m_transitionDelay |
Transition Delay advertised by the non-AP MLD. More... | |
Time | m_transitionTimeout {MicroSeconds(128)} |
Transition Timeout advertised by the AP MLD. More... | |
std::vector< FrameInfo > | m_txPsdus |
transmitted PSDUs More... | |
std::vector< PacketSocketAddress > | m_ulSockets |
packet socket address for UL traffic More... | |
Test the transmission of DL frames to EMLSR clients.
This test considers an AP MLD and a configurable number of non-AP MLDs that support EMLSR and a configurable number of non-AP MLDs that do not support EMLSR. All MLDs have three setup links, while the set of EMLSR links for the EMLSR clients is configurable. Block ack agreements (for TID 0, with the AP MLD as originator) are established with all the non-AP MLDs before that EMLSR clients send the EML Operating Mode Notification frame to enable the EMLSR mode on their EMLSR links.
Before enabling EMLSR mode, it is checked that:
After enabling EMLSR mode, it is checked that:
After disabling EMLSR mode, it is checked that:
Definition at line 349 of file wifi-emlsr-test.h.
EmlsrDlTxopTest::EmlsrDlTxopTest | ( | const Params & | params | ) |
Constructor.
params | parameters for the EMLSR DL TXOP test |
Definition at line 700 of file wifi-emlsr-test.cc.
References EmlsrOperationsTestBase::m_duration, EmlsrOperationsTestBase::m_establishBaDl, EmlsrOperationsTestBase::m_linksToEnableEmlsrOn, EmlsrOperationsTestBase::m_mainPhyId, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_paddingDelay, EmlsrOperationsTestBase::m_transitionDelay, EmlsrOperationsTestBase::m_transitionTimeout, NS_ABORT_MSG_IF, two-ray-to-three-gpp-ch-calibration::params, and ns3::Seconds().
|
overridedefault |
|
protected |
Check that appropriate actions are taken by the AP MLD receiving a PPDU containing BlockAck frames from EMLSR clients on the given link.
psduMap | the PSDU carrying BlockAck frames |
txVector | the TXVECTOR used to send the PPDU |
phyId | the ID of the PHY transmitting the PSDU(s) |
Definition at line 2036 of file wifi-emlsr-test.cc.
References EmlsrOperationsTestBase::CheckBlockedLink(), ns3::WifiMac::GetAddress(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiMac::GetNLinks(), ns3::WifiMac::GetWifiPhy(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::Time::IsZero(), EmlsrOperationsTestBase::m_apMac, m_countBlockAck, m_emlsrEnabledTime, m_emlsrLinks, m_errorModel, m_fe2to3delay, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_transitionDelay, ns3::MicroSeconds(), ns3::Now(), NS_TEST_ASSERT_MSG_EQ, ns3::ListErrorModel::SetList(), nlohmann::to_string(), and ns3::WIFI_MAC_CTL_END.
Referenced by Transmit().
|
protected |
Check that appropriate actions are taken by the AP MLD transmitting an EML Operating Mode Notification response frame to an EMLSR client on the given link.
mpdu | the MPDU carrying the EML Operating Mode Notification frame |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 1616 of file wifi-emlsr-test.cc.
References ns3::GetAckSize(), ns3::WifiMac::GetWifiPhy(), EmlsrOperationsTestBase::m_apMac, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, NS_TEST_ASSERT_MSG_EQ, and third::phy.
Referenced by Transmit().
|
protected |
Check that appropriate actions are taken by the AP MLD transmitting an initial Control frame to an EMLSR client on the given link.
mpdu | the MPDU carrying the MU-RTS TF |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 1709 of file wifi-emlsr-test.cc.
References EmlsrOperationsTestBase::CheckBlockedLink(), ns3::WifiMac::GetAddress(), ns3::WifiMode::GetDataRate(), ns3::ApWifiMac::GetMldOrLinkAddressByAid(), ns3::WifiTxVector::GetMode(), ns3::WifiMac::GetNLinks(), ns3::WifiPhy::GetPhyBand(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiMac::GetWifiPhy(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::CtrlTriggerHeader::IsMuRts(), ns3::Time::IsStrictlyPositive(), EmlsrOperationsTestBase::m_apMac, m_emlsrEnabledTime, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_paddingDelay, EmlsrOperationsTestBase::m_staMacs, Max, ns3::NanoSeconds(), NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, NS_TEST_EXPECT_MSG_LT, ns3::CtrlTriggerHeader::SetPaddingSize(), nlohmann::to_string(), and ns3::WIFI_PREAMBLE_HT_MF.
Referenced by Transmit().
|
protected |
Check that the AP MLD considers the correct Power Management mode for the links setup with the given non-AP MLD.
This method is intended to be called shortly after ML setup.
address | a link address of the given non-AP MLD |
Definition at line 1576 of file wifi-emlsr-test.cc.
References first::address, EmlsrOperationsTestBase::CheckBlockedLink(), ns3::WifiMac::GetNLinks(), ns3::WifiMac::GetWifiRemoteStationManager(), EmlsrOperationsTestBase::m_apMac, m_emlsrLinks, EmlsrOperationsTestBase::m_mainPhyId, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_staMacs, NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, and nlohmann::to_string().
Referenced by Transmit().
|
protected |
Check that appropriate actions are taken by the AP MLD transmitting a PPDU containing QoS data frames to EMLSR clients on the given link.
psduMap | the PSDU(s) carrying QoS data frames |
txVector | the TXVECTOR used to send the PPDU |
linkId | the ID of the given link |
Definition at line 1831 of file wifi-emlsr-test.cc.
References ns3::Node::AddApplication(), ns3::WifiMac::BlockUnicastTxOnLinks(), EmlsrOperationsTestBase::CheckBlockedLink(), EmlsrOperationsTestBase::DOWNLINK, ns3::WifiMac::GetAddress(), EmlsrOperationsTestBase::GetApplication(), ns3::WifiMac::GetDevice(), ns3::WifiMac::GetNLinks(), ns3::WifiNetDevice::GetNode(), ns3::WifiPhy::GetPhyBand(), ns3::WifiMac::GetWifiPhy(), ns3::Time::IsZero(), EmlsrOperationsTestBase::m_apMac, m_countQoSframes, m_emlsrEnabledTime, m_emlsrLinks, m_fe2to3delay, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_transitionDelay, ns3::MicroSeconds(), ns3::NanoSeconds(), ns3::Now(), NS_TEST_EXPECT_MSG_EQ, nlohmann::to_string(), and ns3::WifiMac::UnblockUnicastTxOnLinks().
Referenced by Transmit().
|
protected |
Check that the simulation produced the expected results.
Before enabling EMLSR mode, no MU-RTS TF should be sent. Four packets are generated after association to trigger the establishment of a Block Ack agreement. The TXOP Limit and the MCS are set such that two packets can be transmitted in a TXOP, hence we expect that the AP MLD sends two A-MPDUs to each non-AP MLD.
EMLSR client with EMLSR mode to be enabled on all links: after ML setup, all other links stay in power save mode, hence BA establishment occurs on the same link.
[link 0] ─────────────────────────────────────────────────────────────────────────── | power save mode
┌─────┐ ┌─────┐ ┌───┬───┐ ┌───┬───┐ ┌───┐ │Assoc│ │ADDBA│ ┌───┐ │QoS│QoS│ │QoS│QoS│ [link 1] │ACK│ │Resp │ │ Req │ │ACK│ │ 0 │ 1 │ │ 2 │ 3 │ ───┬─────┬┴───┴──┴─────┴┬───┬─┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─┴───┴───┴┬──┬─── │Assoc│ │ACK│ │ACK│ │ADDBA│ │BA│ │BA│ │ Req │ └───┘ └───┘ │Resp │ └──┘ └──┘ └─────┘ └─────┘
[link 2] ─────────────────────────────────────────────────────────────────────────── | power save mode
EMLSR client with EMLSR mode to be enabled on not all the links: after ML setup, the other EMLSR links stay in power save mode, the non-EMLSR link (link 1) transitions to active mode.
┌─────┐ ┌───┬───┐ ┌───┐ │ADDBA│ ┌───┐ │QoS│QoS│
[link 0 - non EMLSR] │ACK│ │ Req │ │ACK│ │ 2 │ 3 │ ──────────────────────────────┬────┬┴───┴──┴─────┴┬───┬─┬─────┬┴───┴─┴───┴───┴┬──┬─ │Data│ │ACK│ │ADDBA│ │BA│ │Null│ └───┘ │Resp │ └──┘ └────┘ └─────┘ ┌─────┐ ┌───┬───┐ ┌───┐ │Assoc│ │QoS│QoS│ [link 1] │ACK│ │Resp │ │ 0 │ 1 │ ───┬─────┬┴───┴──┴─────┴┬───┬──────────────────────────────────┴───┴───┴┬──┬─────── │Assoc│ │ACK│ │BA│ │ Req │ └───┘ └──┘ └─────┘
[link 2] ─────────────────────────────────────────────────────────────────────────── | power save mode
Non-EMLSR client (not shown): after ML setup, all other links transition to active mode by sending a Data Null frame; QoS data frame exchanges occur on two links simultaneously.
If this is an EMLSR client and there is no setup link other than the one used to establish association that is not an EMLSR link, then the two A-MPDUs are sent one after another on the link used to establish association.
Otherwise, the two A-MPDUs can be sent concurrently on two distinct links (may be the link used to establish association and a non-EMLSR link).
After enabling EMLSR mode, MU-RTS TF should only be sent on EMLSR links. After the exchange of EML Operating Mode Notification frames, a number of packets are generated at the AP MLD to prepare two A-MPDUs for each non-AP MLD.
EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the non-EMLSR client): ┌─────┬─────┐ │QoS 4│QoS 5│ │ to A│ to A│ ┌───┐ ├─────┼─────┤ │MU │ │QoS 4│QoS 5│ [link 0] │RTS│ │ to B│ to B│ ──────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬──────────── │CTS│ │BA│ ├───┤ ├──┤ │CTS│ │BA│ └───┘ └──┘ ┌───┐ ┌─────┬─────┐ ┌───┐ │EML│ │QoS 6│QoS 7│ [link 1] │ACK│ │OM │ │ to B│ to B│ ────┬───┬┴───┴──┴───┴┬───┬─┴─────┴─────┴┬──┬──────────────────────────────────── │EML│ │ACK│ │BA│ │OM │ └───┘ └──┘ └───┘ ┌───┐ ┌─────┬─────┐ │MU │ │QoS 6│QoS 7│ [link 2] │RTS│ │ to A│ to A│ ─────────────────────────────────────────────────────────┴───┴┬───┬┴─────┴─────┴┬──┬─ │CTS│ │BA│ └───┘ └──┘
EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client, B is the non-EMLSR client): ┌─────┬─────┐ │QoS 4│QoS 5│ │ to A│ to A│ ├─────┼─────┤ │QoS 4│QoS 5│ [link 0 - non EMLSR] │ to B│ to B│ ───────────────────────────┴─────┴─────┴┬──┬─────────────────────────── │BA│ ├──┤ │BA│ └──┘ ┌─────┬─────┐ │QoS 6│QoS 7│ │ to A│ to A│ ┌───┐ ┌───┐ ├─────┼─────┤ ┌───┐ │EML│ │MU │ │QoS 6│QoS 7│ [link 1] │ACK│ │OM │ │RTS│ │ to B│ to B│ ────┬───┬┴───┴──┴───┴┬───┬─┴───┴┬───┬┴─────┴─────┴┬──┬──────────── │EML│ │ACK│ │CTS│ │BA│ │OM │ └───┘ ├───┤ ├──┤ └───┘ │CTS│ │BA│ └───┘ └──┘
[link 2] ────────────────────────────────────────────────────────────────────────────────
Store a QoS data frame or an MU-RTS TF followed by a QoS data frame
Let's focus on the first two frame exchanges for each EMLSR clients. If all setup links are EMLSR links, both frame exchanges are protected by MU-RTS TF and occur one after another. Otherwise, one frame exchange occurs on the non-EMLSR link and is not protected by MU-RTS TF; the other frame exchange occurs on an EMLSR link and is protected by MU-RTS TF.
A and B are two EMLSR clients. No ICF before the second QoS data frame because B has not switched to listening mode. ICF is sent before the third QoS data frame because A has switched to listening mode. C is a non-EMLSR client.
┌─────┐ A switches to listening │QoS x│ after transition delay │ to A│ | ┌───┐ ├─────┤ ┌─────┐ │MU │ │QoS x│ │QoS y│
[link 0] │RTS│ │ to B│ │ to B│ ────────────┴───┴┬───┬┴─────┴┬──┬┴─────┴┬──┬──────────── │CTS│ │BA│ │BA│ ├───┤ ├──┤ └──┘ │CTS│ │BA│ └───┘ └──┘ AP continues the TXOP A switches to listening after PIFS recovery after transition delay │ │ ┌─────┐ ┌───┐ ┌─────┐ │┌───┐ ┌───┐ │QoS z│ │MU │ │QoS x│ ││MU │ ┌───┐ │CF-│ [link 1] │ to C│ │RTS│ │ to A│ ││RTS│ │BAR│ │End│ ───────────────────────────────┴─────┴┬──┬┴───┴┬───┬┴─────┴┬──┬┴───┴┬───┬┴───┴┬──┬┴───┴─ │BA│ │CTS│ │BA│ │CTS│ │BA│ └──┘ └───┘ └──x └───┘ └──┘
After disabling EMLSR mode, no MU-RTS TF should be sent. After the exchange of EML Operating Mode Notification frames, a number of packets are generated at the AP MLD to prepare two A-MPDUs for each EMLSR client.
EMLSR client with EMLSR mode to be enabled on all links (A is the EMLSR client, B is the non-EMLSR client):
[link 0] | power save mode ──────────────────────────────────────────────────────── ┌─────┬─────┐ ┌──────┬──────┐ │QoS 8│QoS 9│ │QoS 10│QoS 11│ │ to A│ to A│ │ to A │ to A │ ┌───┐ ┌───┐ ├─────┼─────┤ ├──────┼──────┤ ┌───┐ │MU │ │EML│ │QoS 8│QoS 9│ │QoS 10│QoS 11│ [link 1] │ACK│ │RTS│ │OM │ │ to B│ to B│ │ to B │ to B │ ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴─────┴─────┴┬──┬────┴──────┴──────┴┬──┬───── │EML│ │CTS│ │ACK│ │BA│ │BA│ │OM │ └───┘ └───┘ ├──┤ ├──┤ └───┘ │BA│ │BA│ └──┘ └──┘
[link 2] | power save mode ────────────────────────────────────────────────────────────────────────────
EMLSR client with EMLSR mode to be enabled on not all the links (A is the EMLSR client, B is the non-EMLSR client): ┌─────┬─────┐ │QoS 8│QoS 9│ │ to A│ to A│ ├─────┼─────┤ │QoS 8│QoS 9│ [link 0 - non EMLSR] │ to B│ to B│ ─────────────────────────────────────────┴─────┴─────┴┬──┬───────────── │BA│ ├──┤ │BA│ └──┘ ┌──────┬──────┐ │QoS 10│QoS 11│ │ to A │ to A │ ┌───┐ ┌───┐ ├──────┼──────┤ ┌───┐ │MU │ │EML│ │QoS 10│QoS 11│ [link 1] │ACK│ │RTS│ │OM │ │ to B │ to B │ ────┬───┬┴───┴──┴───┴┬───┬┴───┴┬───┬──┴──────┴──────┴┬──┬───── │EML│ │CTS│ │ACK│ │BA│ │OM │ └───┘ └───┘ ├──┤ └───┘ │BA│ └──┘
[link 2] | power save mode ────────────────────────────────────────────────────────────────────────────
Definition at line 888 of file wifi-emlsr-test.cc.
References ns3::CtrlTriggerHeader::IsMuRts(), ns3::IsTrigger(), list, EmlsrOperationsTestBase::m_mainPhyId, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_txPsdus, NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, NS_TEST_EXPECT_MSG_GT, and NS_TEST_EXPECT_MSG_LT.
Referenced by DoRun().
|
overrideprotectedvirtual |
Implementation to actually run this TestCase.
Subclasses should override this method to conduct their tests.
Implements ns3::TestCase.
Definition at line 2245 of file wifi-emlsr-test.cc.
References CheckResults(), and EmlsrOperationsTestBase::m_duration.
|
overrideprotectedvirtual |
Implementation to do any local setup required for this TestCase.
Subclasses should override this method to perform any costly per-test setup before DoRun is invoked.
Reimplemented from EmlsrOperationsTestBase.
Definition at line 791 of file wifi-emlsr-test.cc.
References ns3::AC_BE, ns3::Object::AggregateObject(), EmlsrOperationsTestBase::DoSetup(), ns3::WifiMac::GetFrameExchangeManager(), ns3::WifiMac::GetNLinks(), ns3::WifiMac::GetQosTxop(), ns3::WifiMac::GetWifiPhy(), EmlsrOperationsTestBase::m_apMac, m_errorModel, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, ns3::MicroSeconds(), ns3::WifiPhy::SetPostReceptionErrorModel(), and ns3::Txop::SetTxopLimits().
|
private |
Enable EMLSR mode on the next EMLSR client.
Definition at line 868 of file wifi-emlsr-test.cc.
References m_emlsrEnabledTime, m_emlsrLinks, EmlsrOperationsTestBase::m_lastAid, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, ns3::MilliSeconds(), ns3::Now(), and StartTraffic().
Referenced by StartTraffic().
|
overrideprivatevirtual |
Start the generation of traffic (needs to be overridden)
Reimplemented from EmlsrOperationsTestBase.
Definition at line 819 of file wifi-emlsr-test.cc.
References ns3::Node::AddApplication(), EmlsrOperationsTestBase::DOWNLINK, EnableEmlsrMode(), EmlsrOperationsTestBase::GetApplication(), ns3::WifiMac::GetDevice(), ns3::WifiMac::GetNLinks(), ns3::WifiNetDevice::GetNode(), ns3::Time::IsZero(), EmlsrOperationsTestBase::m_apMac, m_emlsrEnabledTime, m_emlsrLinks, m_fe2to3delay, EmlsrOperationsTestBase::m_lastAid, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_staMacs, and ns3::MilliSeconds().
Referenced by EnableEmlsrMode().
|
overrideprotectedvirtual |
Callback invoked when a FEM passes PSDUs to the PHY.
mac | the MAC transmitting the PSDUs |
phyId | the ID of the PHY transmitting the PSDUs |
psduMap | the PSDU map |
txVector | the TX vector |
txPowerW | the tx power in Watts |
Reimplemented from EmlsrOperationsTestBase.
Definition at line 725 of file wifi-emlsr-test.cc.
References check-style-clang-format::action, CheckBlockAck(), CheckEmlNotificationFrame(), CheckInitialControlFrame(), CheckPmModeAfterAssociation(), CheckQosFrames(), m_emlsrLinks, EmlsrOperationsTestBase::m_mainPhyId, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_staMacs, EmlsrOperationsTestBase::m_txPsdus, third::mac, NS_ASSERT_MSG, NS_TEST_EXPECT_MSG_EQ, EmlsrOperationsTestBase::Transmit(), ns3::WIFI_MAC_CTL_BACKRESP, ns3::WIFI_MAC_CTL_TRIGGER, ns3::WIFI_MAC_MGT_ACTION, ns3::WIFI_MAC_MGT_ASSOCIATION_REQUEST, and ns3::WIFI_MAC_QOSDATA.
|
private |
counter for BlockAck frames (transition delay test)
Definition at line 460 of file wifi-emlsr-test.h.
Referenced by CheckBlockAck().
|
private |
counter for QoS frames (transition delay test)
Definition at line 459 of file wifi-emlsr-test.h.
Referenced by CheckQosFrames().
|
private |
when EMLSR mode has been enabled on all EMLSR clients
Definition at line 456 of file wifi-emlsr-test.h.
Referenced by CheckBlockAck(), CheckInitialControlFrame(), CheckQosFrames(), EnableEmlsrMode(), and StartTraffic().
|
private |
IDs of the links on which EMLSR mode has to be enabled.
Definition at line 455 of file wifi-emlsr-test.h.
Referenced by CheckBlockAck(), CheckPmModeAfterAssociation(), CheckQosFrames(), EnableEmlsrMode(), StartTraffic(), and Transmit().
|
private |
error rate model to corrupt BlockAck at AP MLD
Definition at line 461 of file wifi-emlsr-test.h.
Referenced by CheckBlockAck(), and DoSetup().
|
private |
time interval between 2nd and 3rd frame exchange sequences after the enablement of EMLSR mode
Definition at line 457 of file wifi-emlsr-test.h.
Referenced by CheckBlockAck(), CheckQosFrames(), and StartTraffic().