Test CCA busy notifications on EMLSR clients. More...
#include "wifi-emlsr-test.h"
Public Member Functions | |
EmlsrCcaBusyTest (MHz_u auxPhyMaxChWidth) | |
Constructor. | |
~EmlsrCcaBusyTest () override=default | |
![]() | |
EmlsrOperationsTestBase (const std::string &name) | |
Constructor. | |
~EmlsrOperationsTestBase () override=default | |
![]() | |
TestCase (const TestCase &)=delete | |
virtual | ~TestCase () |
Destructor. | |
std::string | GetName () const |
TestCase & | operator= (const TestCase &)=delete |
Protected Member Functions | |
void | DoRun () override |
Implementation to actually run this TestCase. | |
void | DoSetup () override |
Implementation to do any local setup required for this TestCase. | |
![]() | |
void | CheckAuxPhysSleepMode (Ptr< StaWifiMac > staMac, bool sleep) |
Check whether aux PHYs of the given device are in sleep mode/awake. | |
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. | |
void | CheckMainPhyTraceInfo (std::size_t index, std::string_view reason, const std::optional< uint8_t > &fromLinkId, uint8_t toLinkId, bool checkFromLinkId=true, bool checkToLinkId=true) |
Check information provided by the EMLSR Manager MainPhySwitch trace. | |
void | CheckMsdTimerRunning (Ptr< StaWifiMac > staMac, uint8_t linkId, bool isRunning, const std::string &msg) |
Check whether the MediumSyncDelay timer is running on the given link of the given device. | |
void | DoSetup () override |
Implementation to do any local setup required for this TestCase. | |
Ptr< PacketSocketClient > | GetApplication (TrafficDirection dir, std::size_t staId, std::size_t count, std::size_t pktSize) const |
void | MainPhySwitchInfoCallback (std::size_t index, const EmlsrMainPhySwitchTrace &info) |
Callback connected to the EMLSR Manager MainPhySwitch trace source. | |
virtual void | Transmit (Ptr< WifiMac > mac, uint8_t phyId, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW) |
Callback invoked when a FEM passes PSDUs to the PHY. | |
![]() | |
TestCase (std::string name) | |
Constructor. | |
void | AddTestCase (TestCase *testCase, Duration duration=Duration::QUICK) |
Add an individual child TestCase to this test suite. | |
TestCase * | GetParent () const |
Get the parent of this TestCase. | |
bool | IsStatusFailure () const |
Check if any tests failed. | |
bool | IsStatusSuccess () const |
Check if all tests passed. | |
void | SetDataDir (std::string directory) |
Set the data directory where reference trace files can be found. | |
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. | |
bool | MustAssertOnFailure () const |
Check if this run should assert on failure. | |
bool | MustContinueOnFailure () const |
Check if this run should continue on failure. | |
std::string | CreateDataDirFilename (std::string filename) |
Construct the full path to a file in the data directory. | |
std::string | CreateTempDirFilename (std::string filename) |
Construct the full path to a file in a temporary directory. | |
Private Member Functions | |
void | CheckPoint1 () |
Perform checks after that the preamble of the first PPDU has been received. | |
void | CheckPoint2 () |
Perform checks after that the main PHY completed the link switch. | |
void | CheckPoint3 () |
Perform checks after that the aux PHY completed the link switch. | |
void | StartTraffic () override |
Start the generation of traffic (needs to be overridden) | |
void | TransmitPacketToAp (uint8_t linkId) |
Make the other MLD transmit a packet to the AP on the given link. | |
Private Attributes | |
MHz_u | m_auxPhyMaxChWidth |
max channel width supported by aux PHYs | |
Time | m_channelSwitchDelay |
the PHY channel switch delay | |
uint8_t | m_currMainPhyLinkId |
the ID of the link the main PHY switches from | |
uint8_t | m_nextMainPhyLinkId |
the ID of the link the main PHY switches to | |
Additional Inherited Members | |
![]() | |
enum | TrafficDirection : uint8_t { DOWNLINK = 0 , UPLINK } |
Enumeration for traffic directions. More... | |
![]() | |
enum class | Duration { QUICK = 1 , EXTENSIVE = 2 , TAKES_FOREVER = 3 } |
How long the test takes to execute. More... | |
![]() | |
static constexpr auto | QUICK = Duration::QUICK |
Deprecated test duration simple enums. | |
static constexpr auto | EXTENSIVE = Duration::EXTENSIVE |
static constexpr auto | TAKES_FOREVER = Duration::TAKES_FOREVER |
![]() | |
Ptr< ApWifiMac > | m_apMac |
AP wifi MAC. | |
std::vector< PacketSocketAddress > | m_dlSockets |
packet socket address for DL traffic | |
Time | m_duration {0} |
simulation duration | |
bool | m_establishBaDl {false} |
whether BA needs to be established (for TID 0) with the AP as originator | |
bool | m_establishBaUl {false} |
whether BA needs to be established (for TID 0) with the AP as recipient | |
uint16_t | m_lastAid {0} |
AID of last associated station. | |
std::set< uint8_t > | m_linksToEnableEmlsrOn |
IDs of the links on which EMLSR mode has to be enabled. | |
uint8_t | m_mainPhyId {0} |
ID of the main PHY. | |
std::size_t | m_nEmlsrStations {1} |
number of stations to create that activate EMLSR | |
std::size_t | m_nNonEmlsrStations {0} |
number of stations to create that do not activate EMLSR | |
std::vector< Time > | m_paddingDelay |
Padding Delay advertised by the non-AP MLD. | |
bool | m_putAuxPhyToSleep {false} |
whether aux PHYs are put to sleep during DL/UL TXOPs | |
std::vector< Ptr< StaWifiMac > > | m_staMacs |
MACs of the non-AP MLDs. | |
std::map< std::size_t, std::shared_ptr< EmlsrMainPhySwitchTrace > > | m_traceInfo |
EMLSR client ID-indexed map of trace info from last main PHY switch. | |
std::vector< Time > | m_transitionDelay |
Transition Delay advertised by the non-AP MLD. | |
Time | m_transitionTimeout {MicroSeconds(128)} |
Transition Timeout advertised by the AP MLD. | |
std::vector< FrameInfo > | m_txPsdus |
transmitted PSDUs | |
std::vector< PacketSocketAddress > | m_ulSockets |
packet socket address for UL traffic | |
Test CCA busy notifications on EMLSR clients.
SwitchAuxPhy is set to true, so that the aux PHY starts switching when the main PHY switch is completed.
Definition at line 929 of file wifi-emlsr-test.h.
EmlsrCcaBusyTest::EmlsrCcaBusyTest | ( | MHz_u | auxPhyMaxChWidth | ) |
Constructor.
auxPhyMaxChWidth | max channel width supported by aux PHYs |
Definition at line 4742 of file wifi-emlsr-test.cc.
References EmlsrOperationsTestBase::m_duration, EmlsrOperationsTestBase::m_establishBaUl, EmlsrOperationsTestBase::m_linksToEnableEmlsrOn, EmlsrOperationsTestBase::m_mainPhyId, EmlsrOperationsTestBase::m_nEmlsrStations, EmlsrOperationsTestBase::m_nNonEmlsrStations, EmlsrOperationsTestBase::m_transitionDelay, ns3::MicroSeconds(), and ns3::Seconds().
|
overridedefault |
|
private |
Perform checks after that the preamble of the first PPDU has been received.
┌───────────────┐
[link X] │ other to AP │CP3 ──────────────────────────────┴───────────────┴────────────────────────────────────────────── |---— main PHY ---—| |----------------— aux PHY ------------------— ._ _/ . _ _/ . _ _/ . _ _/ [link Y] . CP1 \/ CP2 .┌───────────────┐ .│ other to AP │ ─────────────────────────┴───────────────┴──────────────────────────────────────────────────── |---------— aux PHY -------—|-------------------— main PHY -------------------------—
Definition at line 4868 of file wifi-emlsr-test.cc.
References CheckPoint2(), EmlsrOperationsTestBase::m_mainPhyId, m_nextMainPhyLinkId, EmlsrOperationsTestBase::m_staMacs, ns3::Simulator::Now(), NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_EQ, NS_TEST_EXPECT_MSG_GT_OR_EQ, NS_TEST_EXPECT_MSG_LT, NS_TEST_EXPECT_MSG_NE, ns3::Simulator::Schedule(), and ns3::WIFI_CHANLIST_PRIMARY.
Referenced by StartTraffic().
|
private |
Perform checks after that the main PHY completed the link switch.
Definition at line 4915 of file wifi-emlsr-test.cc.
References CheckPoint3(), m_channelSwitchDelay, m_nextMainPhyLinkId, EmlsrOperationsTestBase::m_staMacs, ns3::Simulator::Now(), NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_GT_OR_EQ, ns3::Simulator::Schedule(), and ns3::WIFI_CHANLIST_PRIMARY.
Referenced by CheckPoint1().
|
private |
Perform checks after that the aux PHY completed the link switch.
Definition at line 4939 of file wifi-emlsr-test.cc.
References m_currMainPhyLinkId, EmlsrOperationsTestBase::m_staMacs, ns3::Simulator::Now(), NS_TEST_ASSERT_MSG_EQ, NS_TEST_EXPECT_MSG_GT_OR_EQ, and ns3::WIFI_CHANLIST_PRIMARY.
Referenced by CheckPoint2().
|
overrideprotectedvirtual |
Implementation to actually run this TestCase.
Subclasses should override this method to conduct their tests.
Implements ns3::TestCase.
Definition at line 4760 of file wifi-emlsr-test.cc.
References ns3::Simulator::Destroy(), EmlsrOperationsTestBase::m_duration, ns3::Simulator::Run(), and ns3::Simulator::Stop().
|
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 ns3::TestCase.
Definition at line 4769 of file wifi-emlsr-test.cc.
References EmlsrOperationsTestBase::DoSetup(), EmlsrOperationsTestBase::m_apMac, m_auxPhyMaxChWidth, m_channelSwitchDelay, EmlsrOperationsTestBase::m_staMacs, ns3::Config::SetDefault(), ns3::WIFI_PHY_BAND_2_4GHZ, ns3::WIFI_PHY_BAND_5GHZ, and ns3::WIFI_PHY_BAND_6GHZ.
|
overrideprivatevirtual |
Start the generation of traffic (needs to be overridden)
Reimplemented from EmlsrOperationsTestBase.
Definition at line 4820 of file wifi-emlsr-test.cc.
References CheckPoint1(), ns3::EmlsrManager::DONT_REQUEST_ACCESS, ns3::EmlsrManager::DONT_RESET_BACKOFF, m_channelSwitchDelay, m_currMainPhyLinkId, EmlsrOperationsTestBase::m_mainPhyId, m_nextMainPhyLinkId, EmlsrOperationsTestBase::m_staMacs, ns3::MicroSeconds(), NS_TEST_ASSERT_MSG_EQ, ns3::Simulator::Schedule(), and TransmitPacketToAp().
|
private |
Make the other MLD transmit a packet to the AP on the given link.
linkId | the ID of the given link |
Definition at line 4791 of file wifi-emlsr-test.cc.
References ns3::AC_BE, EmlsrOperationsTestBase::GetApplication(), EmlsrOperationsTestBase::m_staMacs, ns3::Simulator::Now(), ns3::Time::NS, NS_TEST_EXPECT_MSG_EQ, ns3::Simulator::Schedule(), ns3::Simulator::ScheduleNow(), and EmlsrOperationsTestBase::UPLINK.
Referenced by StartTraffic().
|
private |
max channel width supported by aux PHYs
Definition at line 970 of file wifi-emlsr-test.h.
Referenced by DoSetup().
|
private |
the PHY channel switch delay
Definition at line 971 of file wifi-emlsr-test.h.
Referenced by CheckPoint2(), DoSetup(), and StartTraffic().
|
private |
the ID of the link the main PHY switches from
Definition at line 972 of file wifi-emlsr-test.h.
Referenced by CheckPoint3(), and StartTraffic().
|
private |
the ID of the link the main PHY switches to
Definition at line 973 of file wifi-emlsr-test.h.
Referenced by CheckPoint1(), CheckPoint2(), and StartTraffic().