20#include "ns3/ap-wifi-mac.h"
21#include "ns3/boolean.h"
22#include "ns3/double.h"
23#include "ns3/he-configuration.h"
24#include "ns3/he-phy.h"
25#include "ns3/interference-helper.h"
27#include "ns3/multi-model-spectrum-channel.h"
28#include "ns3/nist-error-rate-model.h"
30#include "ns3/pointer.h"
31#include "ns3/rng-seed-manager.h"
32#include "ns3/simulator.h"
33#include "ns3/spectrum-wifi-helper.h"
34#include "ns3/spectrum-wifi-phy.h"
35#include "ns3/string.h"
38#include "ns3/uinteger.h"
39#include "ns3/wifi-mac-header.h"
40#include "ns3/wifi-net-device.h"
41#include "ns3/wifi-psdu.h"
42#include "ns3/wifi-spectrum-value-helper.h"
43#include "ns3/wifi-utils.h"
67 void DoRun()
override;
81 :
TestCase(
"Check for valid combinations of MU TX-VECTOR")
91 std::list<uint16_t> staIds;
93 for (
const auto& userInfo : userInfos)
96 staIds.push_back(staId++);
105 std::list<HeMuUserInfo> userInfos;
111 "TX-VECTOR should indicate an OFDMA transmission");
114 "TX-VECTOR should not indicate a MU-MIMO transmission");
117 "TX-VECTOR should not indicate a SIG-B compression");
120 "TX-VECTOR should indicate all checks are passed");
129 "TX-VECTOR should indicate a MU-MIMO transmission");
132 "TX-VECTOR should not indicate an OFDMA transmission");
135 "TX-VECTOR should indicate a SIG-B compression");
138 "TX-VECTOR should indicate all checks are passed");
154 "TX-VECTOR should indicate a MU-MIMO transmission");
157 "TX-VECTOR should not indicate an OFDMA transmission");
160 "TX-VECTOR should indicate a SIG-B compression");
163 "TX-VECTOR should not indicate all checks are passed");
173 "TX-VECTOR should indicate a MU-MIMO transmission");
176 "TX-VECTOR should not indicate an OFDMA transmission");
179 "TX-VECTOR should indicate a SIG-B compression");
182 "TX-VECTOR should not indicate all checks are passed");
353 void DoRun()
override;
365 std::vector<bool> statusPerMpdu);
376 std::vector<bool> statusPerMpdu);
387 std::vector<bool> statusPerMpdu);
451 void SendMuPpdu(
const std::vector<StaInfo>& staInfos);
505 m_countRxSuccessSta1{0},
506 m_countRxSuccessSta2{0},
507 m_countRxSuccessSta3{0},
508 m_countRxFailureSta1{0},
509 m_countRxFailureSta2{0},
510 m_countRxFailureSta3{0},
511 m_countRxBytesSta1{0},
512 m_countRxBytesSta2{0},
513 m_countRxBytesSta3{0},
554 for (
const auto& staInfo : staInfos)
556 txVector.
SetRu(ru, staInfo.staId);
558 txVector.
SetNss(staInfo.staNss, staInfo.staId);
560 Ptr<Packet> pkt = Create<Packet>(1000 + (8 * staInfo.staId));
564 std::ostringstream addr;
565 addr <<
"00:00:00:00:00:0" << staInfo.staId;
569 psdus.insert(std::make_pair(staInfo.staId, psdu));
641 "The number of successfully received packets by STA 1 is not correct!");
644 "The number of unsuccessfully received packets by STA 1 is not correct!");
647 "The number of bytes received by STA 1 is not correct!");
657 "The number of successfully received packets by STA 2 is not correct!");
660 "The number of unsuccessfully received packets by STA 2 is not correct!");
663 "The number of bytes received by STA 2 is not correct!");
673 "The number of successfully received packets by STA 3 is not correct!");
676 "The number of unsuccessfully received packets by STA 3 is not correct!");
679 "The number of bytes received by STA 3 is not correct!");
697 phy->GetAttribute(
"State", ptr);
699 currentState = state->GetState();
703 "PHY State " << currentState <<
" does not match expected state "
712 CreateObject<ConstantSpeedPropagationDelayModel>();
713 spectrumChannel->SetPropagationDelayModel(delayModel);
717 m_phyAp = CreateObject<SpectrumWifiPhy>();
726 apNode->AddDevice(apDev);
728 Ptr<Node> sta1Node = CreateObject<Node>();
730 m_phySta1 = CreateObject<MuMimoSpectrumWifiPhy>(1);
743 sta1Node->AddDevice(sta1Dev);
745 Ptr<Node> sta2Node = CreateObject<Node>();
747 m_phySta2 = CreateObject<MuMimoSpectrumWifiPhy>(2);
760 sta2Node->AddDevice(sta2Dev);
762 Ptr<Node> sta3Node = CreateObject<Node>();
764 m_phySta3 = CreateObject<MuMimoSpectrumWifiPhy>(3);
777 sta3Node->AddDevice(sta3Dev);
798 int64_t streamNumber = 0;
828 std::vector<StaInfo>{{1,
m_nss}, {2,
m_nss}});
847 WifiPhyState::CCA_BUSY);
895 std::vector<StaInfo>{{1,
m_nss}, {3,
m_nss}});
909 WifiPhyState::CCA_BUSY);
962 std::vector<StaInfo>{{2,
m_nss}, {3,
m_nss}});
971 WifiPhyState::CCA_BUSY);
1051 WifiPhyState::IDLE);
1056 WifiPhyState::IDLE);
1061 WifiPhyState::IDLE);
1093 std::vector<uint8_t> nssToTest{1, 2};
1094 for (
auto nss : nssToTest)
1137 void DoRun()
override;
1153 void SetTrigVector(
const std::vector<uint16_t>& staIds, uint8_t bssColor);
1164 std::size_t payloadSize,
1175 void SendHeSuPpdu(uint16_t txStaId, std::size_t payloadSize, uint64_t uid, uint8_t bssColor);
1230 std::vector<bool> statusPerMpdu);
1249 const std::vector<uint16_t>& txStaIds,
1251 const std::vector<std::tuple<uint32_t, uint32_t, uint32_t>>& expectedCountersPerSta);
1275 m_countRxSuccessFromStas{},
1276 m_countRxFailureFromStas{},
1277 m_countRxBytesFromStas{},
1287 std::size_t payloadSize,
1312 std::ostringstream addr;
1313 addr <<
"00:00:00:00:00:0" << txStaId;
1317 psdus.insert(std::make_pair(
SU_STA_ID, psdu));
1320 phy->SetPpduUid(uid);
1321 phy->Send(psdus, txVector);
1327 uint8_t bssColor)
const
1343 txVector.
SetRu(ru, txStaId);
1345 txVector.
SetNss(nss, txStaId);
1367 for (
auto staId : staIds)
1369 txVector.
SetRu(ru, staId);
1371 txVector.
SetNss(1, staId);
1387 std::size_t payloadSize,
1391 NS_LOG_FUNCTION(
this << txStaId << +nss << payloadSize << uid << +bssColor);
1400 std::ostringstream addr;
1401 addr <<
"00:00:00:00:00:0" << txStaId;
1405 psdus.insert(std::make_pair(txStaId, psdu));
1409 phy->CalculateTxDuration(psdu->GetSize(), txVector, phy->GetPhyBand(), txStaId);
1413 phy->SetPpduUid(uid);
1414 phy->Send(psdus, txVector);
1427 std::ostringstream addr;
1428 addr <<
"00:00:00:00:00:0" << index + 1;
1429 if (psdu->GetAddr2() ==
Mac48Address(addr.str().c_str()))
1444 std::ostringstream addr;
1445 addr <<
"00:00:00:00:00:0" << index + 1;
1446 if (psdu->GetAddr2() ==
Mac48Address(addr.str().c_str()))
1460 NS_LOG_FUNCTION(
this << staId << expectedSuccess << expectedFailures << expectedBytes);
1463 "The number of successfully received packets from STA "
1464 << staId <<
" is not correct!");
1467 "The number of unsuccessfully received packets from STA "
1468 << staId <<
" is not correct!");
1471 "The number of bytes received from STA " << staId <<
" is not correct!");
1479 "m_currentEvent for AP was not cleared");
1480 std::size_t sta = 1;
1485 "m_currentEvent for STA " << sta <<
" was not cleared");
1505 phy->GetAttribute(
"State", ptr);
1507 currentState = state->GetState();
1511 "PHY State " << currentState <<
" does not match expected state "
1533 phy->SetTriggerFrameUid(0);
1543 heConfiguration->SetAttribute(
"BssColor",
UintegerValue(bssColor));
1554 CreateObject<ConstantSpeedPropagationDelayModel>();
1555 spectrumChannel->SetPropagationDelayModel(delayModel);
1557 Ptr<Node> apNode = CreateObject<Node>();
1560 auto apMac = CreateObjectWithAttributes<ApWifiMac>(
1563 apMac->SetAttribute(
"BeaconGeneration",
BooleanValue(
false));
1564 apDev->SetMac(apMac);
1565 m_phyAp = CreateObject<MuMimoSpectrumWifiPhy>(0);
1567 apDev->SetHeConfiguration(heConfiguration);
1578 apNode->AddDevice(apDev);
1580 for (std::size_t i = 1; i <= 4; ++i)
1582 Ptr<Node> staNode = CreateObject<Node>();
1586 staDev->SetHeConfiguration(CreateObject<HeConfiguration>());
1588 phy->SetInterferenceHelper(staInterferenceHelper);
1590 phy->SetErrorRateModel(staErrorModel);
1591 phy->SetDevice(staDev);
1592 phy->AddChannel(spectrumChannel);
1595 phy->SetAttribute(
"TxPowerStart",
DoubleValue(16.0));
1596 phy->SetAttribute(
"TxPowerEnd",
DoubleValue(16.0));
1597 phy->SetAttribute(
"PowerDensityLimit",
DoubleValue(100.0));
1599 staDev->SetPhy(phy);
1600 staNode->AddDevice(staDev);
1627 const std::vector<uint16_t>& txStaIds,
1629 const std::vector<std::tuple<uint32_t, uint32_t, uint32_t>>& expectedCountersPerSta)
1631 static uint64_t uid = 0;
1645 uint16_t payloadSize = 1000;
1646 std::size_t index = 0;
1647 for (
auto txStaId : txStaIds)
1672 expectedStateAtEnd);
1677 for (
const auto& expectedCounters : expectedCountersPerSta)
1679 uint16_t expectedSuccessFromSta = std::get<0>(expectedCounters);
1680 uint16_t expectedFailuresFromSta = std::get<1>(expectedCounters);
1681 uint16_t expectedBytesFromSta = std::get<2>(expectedCounters);
1686 expectedSuccessFromSta,
1687 expectedFailuresFromSta,
1688 expectedBytesFromSta);
1704 int64_t streamNumber = 0;
1708 phy->AssignStreams(streamNumber);
1721 phy->SetOperatingChannel(
1734 "Reception of HE TB PPDUs using full BW MU-MIMO");
1739 std::make_tuple(1, 0, 1000),
1741 std::make_tuple(1, 0, 1001),
1743 std::make_tuple(1, 0, 1002)
1754 "Reception of HE TB PPDUs HE TB PPDUs using full BW MU-MIMO with an HE SU "
1755 "PPDU arriving during the 400 ns window");
1768 std::make_tuple(0, 1, 0),
1770 std::make_tuple(0, 1, 0),
1772 std::make_tuple(0, 1, 0)
1783 "Reception of HE TB PPDUs using full BW MU-MIMO with an HE SU PPDU "
1784 "arriving during the HE portion");
1795 WifiPhyState::CCA_BUSY,
1797 std::make_tuple(0, 1, 0),
1799 std::make_tuple(0, 1, 0),
1801 std::make_tuple(0, 1, 0)
1814 for (
const auto& delayStart : startDelays)
1821 NS_LOG_DEBUG(
"Run UL MU-MIMO PHY transmission test for "
1822 <<
m_channelWidth <<
" MHz with delay between each HE TB PPDUs of "
1829 NS_LOG_DEBUG(
"Run UL MU-MIMO PHY transmission test for "
1830 <<
m_channelWidth <<
" MHz with delay between each HE TB PPDUs of "
1837 NS_LOG_DEBUG(
"Run UL MU-MIMO PHY transmission test for "
1838 <<
m_channelWidth <<
" MHz with delay between each HE TB PPDUs of "
1845 NS_LOG_DEBUG(
"Run UL MU-MIMO PHY transmission test for "
1846 <<
m_channelWidth <<
" MHz with delay between each HE TB PPDUs of "
SpectrumWifiPhy used for testing MU-MIMO.
void SetTriggerFrameUid(uint64_t uid)
Since we assume trigger frame was previously received from AP, this is used to set its UID.
MuMimoSpectrumWifiPhy(uint16_t staId)
Constructor.
void DoInitialize() override
Initialize() implementation.
~MuMimoSpectrumWifiPhy() override
static TypeId GetTypeId()
Get the type ID.
void SetPpduUid(uint64_t uid)
Set the global PPDU UID counter.
void DoDispose() override
Destructor implementation.
Ptr< Event > GetCurrentEvent()
Ptr< MuMimoTestHePhy > m_ofdmTestHePhy
Pointer to HE PHY instance used for MU-MIMO test.
HE PHY slightly modified so as to return a given STA-ID in case of DL MU for MuMimoSpectrumWifiPhy.
MuMimoTestHePhy(uint16_t staId)
Constructor.
void SetGlobalPpduUid(uint64_t uid)
Set the global PPDU UID counter.
uint16_t m_staId
ID of the STA to which this PHY belongs to.
uint16_t GetStaId(const Ptr< const WifiPpdu > ppdu) const override
Return the STA ID that has been assigned to the station this PHY belongs to.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
Time m_expectedPpduDuration
expected duration to send MU PPDU
void RxFailureSta2(Ptr< const WifiPsdu > psdu)
Receive failure function for STA 2.
void RxFailureSta1(Ptr< const WifiPsdu > psdu)
Receive failure function for STA 1.
Ptr< SpectrumWifiPhy > m_phyAp
PHY of AP.
void DoSetup() override
Implementation to do any local setup required for this TestCase.
TestDlMuMimoPhyTransmission()
Ptr< MuMimoSpectrumWifiPhy > m_phySta1
PHY of STA 1.
uint32_t m_countRxFailureSta3
count RX failure for STA 3
uint32_t m_countRxFailureSta1
count RX failure for STA 1
void GenerateInterference(Ptr< SpectrumValue > interferencePsd, Time duration)
Generate interference function.
uint16_t m_frequency
frequency in MHz
void CheckPhyState(Ptr< MuMimoSpectrumWifiPhy > phy, WifiPhyState expectedState)
Schedule now to check the PHY state.
uint32_t m_countRxSuccessSta2
count RX success for STA 2
void CheckResultsSta3(uint32_t expectedRxSuccess, uint32_t expectedRxFailure, uint32_t expectedRxBytes)
Check the results for STA 3.
void ResetResults()
Reset the results.
uint8_t m_nss
number of spatial streams per STA
uint16_t m_channelWidth
channel width in MHz
void RxSuccessSta3(Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, WifiTxVector txVector, std::vector< bool > statusPerMpdu)
Receive success function for STA 3.
Ptr< MuMimoSpectrumWifiPhy > m_phySta3
PHY of STA 3.
void RxSuccessSta2(Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, WifiTxVector txVector, std::vector< bool > statusPerMpdu)
Receive success function for STA 2.
void RxFailureSta3(Ptr< const WifiPsdu > psdu)
Receive failure function for STA 3.
uint32_t m_countRxBytesSta2
count RX bytes for STA 2
void RunOne()
Run one function.
uint32_t m_countRxSuccessSta3
count RX success for STA 3
void SendMuPpdu(const std::vector< StaInfo > &staInfos)
Send DL MU-MIMO PPDU function.
void DoCheckPhyState(Ptr< MuMimoSpectrumWifiPhy > phy, WifiPhyState expectedState)
Check the PHY state now.
uint32_t m_countRxBytesSta1
count RX bytes for STA 1
uint32_t m_countRxFailureSta2
count RX failure for STA 2
void RxSuccessSta1(Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, WifiTxVector txVector, std::vector< bool > statusPerMpdu)
Receive success function for STA 1.
void CheckResultsSta1(uint32_t expectedRxSuccess, uint32_t expectedRxFailure, uint32_t expectedRxBytes)
Check the results for STA 1.
Ptr< MuMimoSpectrumWifiPhy > m_phySta2
PHY of STA 2.
void DoRun() override
Implementation to actually run this TestCase.
void StopInterference()
Stop interference function.
uint32_t m_countRxBytesSta3
count RX bytes for STA 3
void CheckResultsSta2(uint32_t expectedRxSuccess, uint32_t expectedRxFailure, uint32_t expectedRxBytes)
Check the results for STA 2.
uint32_t m_countRxSuccessSta1
count RX success for STA 1
void DoRun() override
Implementation to actually run this TestCase.
static WifiTxVector BuildTxVector(uint16_t bw, const std::list< HeMuUserInfo > &userInfos)
Build a TXVECTOR for DL MU with the given bandwidth and user information.
void RxFailure(Ptr< const WifiPsdu > psdu)
Receive failure function.
void VerifyEventsCleared()
Verify all events are cleared at end of TX or RX.
void DoRun() override
Implementation to actually run this TestCase.
TestUlMuMimoPhyTransmission()
void LogScenario(const std::string &log) const
Log scenario description.
std::vector< uint32_t > m_countRxFailureFromStas
count RX failure from STAs
void SendHeSuPpdu(uint16_t txStaId, std::size_t payloadSize, uint64_t uid, uint8_t bssColor)
Send HE SU PPDU function.
void SendHeTbPpdu(uint16_t txStaId, uint8_t nss, std::size_t payloadSize, uint64_t uid, uint8_t bssColor)
Send HE TB PPDU function.
std::vector< uint32_t > m_countRxSuccessFromStas
count RX success from STAs
void DoSetup() override
Implementation to do any local setup required for this TestCase.
std::vector< uint32_t > m_countRxBytesFromStas
count RX bytes from STAs
void CheckRxFromSta(uint16_t staId, uint32_t expectedSuccess, uint32_t expectedFailures, uint32_t expectedBytes)
Check the received PSDUs from a given STA.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
uint16_t m_channelWidth
channel width in MHz
void DoCheckPhyState(Ptr< MuMimoSpectrumWifiPhy > phy, WifiPhyState expectedState)
Check the PHY state.
void SetBssColor(Ptr< WifiPhy > phy, uint8_t bssColor)
Set the BSS color.
void Reset()
Reset function.
void ScheduleTest(Time delay, const std::vector< uint16_t > &txStaIds, WifiPhyState expectedStateAtEnd, const std::vector< std::tuple< uint32_t, uint32_t, uint32_t > > &expectedCountersPerSta)
Schedule test to perform.
void CheckPhyState(Ptr< MuMimoSpectrumWifiPhy > phy, WifiPhyState expectedState)
Check the PHY state.
void RunOne()
Run one function.
Time m_expectedPpduDuration
expected duration to send MU PPDU
Ptr< MuMimoSpectrumWifiPhy > m_phyAp
PHY of AP.
void SetTrigVector(const std::vector< uint16_t > &staIds, uint8_t bssColor)
Set TRIGVECTOR for HE TB PPDU.
std::vector< Ptr< MuMimoSpectrumWifiPhy > > m_phyStas
PHYs of STAs.
void RxSuccess(Ptr< const WifiPsdu > psdu, RxSignalInfo rxSignalInfo, WifiTxVector txVector, std::vector< bool > statusPerMpdu)
Receive success function.
uint16_t m_frequency
frequency in MHz
Time m_delayStart
delay between the start of each HE TB PPDUs
WifiTxVector GetTxVectorForHeTbPpdu(uint16_t txStaId, uint8_t nss, uint8_t bssColor) const
Get TXVECTOR for HE TB PPDU.
wifi PHY MU-MIMO Test Suite
AttributeValue implementation for Boolean.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
static WifiMode GetHeMcs7()
Return MCS 7 from HE MCS values.
uint16_t GetStaId(const Ptr< const WifiPpdu > ppdu) const override
Return the STA ID that has been assigned to the station this PHY belongs to.
static std::pair< uint16_t, Time > ConvertHeTbPpduDurationToLSigLength(Time ppduDuration, const WifiTxVector &txVector, WifiPhyBand band)
Compute the L-SIG length value corresponding to the given HE TB PPDU duration.
static RuType GetRuType(uint16_t bandwidth)
Get the RU corresponding to the approximate bandwidth.
void Dispose()
Dispose of this Object.
void SetOwner(Ptr< WifiPhy > wifiPhy)
Set the WifiPhy owning this PHY entity.
static uint64_t m_globalPpduUid
Global counter of the PPDU UID.
AttributeValue implementation for Pointer.
Smart pointer class similar to boost::intrusive_ptr.
static void SetRun(uint64_t run)
Set the run number of simulation.
static void SetSeed(uint32_t seed)
Set the seed.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static Time Now()
Return the current simulation virtual time.
static void Run()
Run the simulation.
static EventId ScheduleNow(FUNC f, Ts &&... args)
Schedule an event to expire Now.
void SetDevice(const Ptr< WifiNetDevice > device) override
Sets the device this PHY is associated with.
void DoInitialize() override
Initialize() implementation.
void AddChannel(const Ptr< SpectrumChannel > channel, const FrequencyRange &freqRange=WHOLE_WIFI_SPECTRUM)
Attach a SpectrumChannel to use for a given frequency range.
void DoDispose() override
Destructor implementation.
Hold variables of type string.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Simulation virtual time values and global simulation resolution.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Hold an unsigned integer type.
static WifiMode GetVhtMcs5()
Return MCS 5 from VHT MCS values.
void SetNumberOfAntennas(uint8_t antennas)
virtual void SetInterferenceHelper(const Ptr< InterferenceHelper > helper)
Sets the interference helper.
void Send(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector)
This function is a wrapper for the Send variant that accepts a WifiConstPsduMap as first argument.
void SetErrorRateModel(const Ptr< ErrorRateModel > model)
Sets the error rate model.
void SetMaxSupportedTxSpatialStreams(uint8_t streams)
void SetReceiveErrorCallback(RxErrorCallback callback)
virtual void ConfigureStandard(WifiStandard standard)
Configure the PHY-level parameters for different Wi-Fi standard.
std::map< WifiModulationClass, Ptr< PhyEntity > > m_phyEntities
This map holds the supported PHY entities.
void SetOperatingChannel(const ChannelTuple &channelTuple)
If the standard for this object has not been set yet, store the given channel settings.
WifiPhyBand GetPhyBand() const
Get the configured Wi-Fi band.
Ptr< Event > m_currentEvent
Hold the current event.
Ptr< PhyEntity > GetPhyEntity(WifiModulationClass modulation) const
Get the supported PHY entity corresponding to the modulation class.
uint64_t m_previouslyRxPpduUid
UID of the previously received PPDU, reset to UINT64_MAX upon transmission.
std::tuple< uint8_t, uint16_t, WifiPhyBand, uint8_t > ChannelTuple
Tuple identifying an operating channel.
void SetReceiveOkCallback(RxOkCallback callback)
virtual int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
static ConstIterator FindFirst(uint8_t number, uint16_t frequency, uint16_t width, WifiStandard standard, WifiPhyBand band, ConstIterator start=m_frequencyChannels.begin())
Find the first channel matching the specified parameters.
This objects implements the PHY state machine of the Wifi device.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
bool IsSigBCompression() const
Indicate whether the Common field is present in the HE-SIG-B field.
void SetChannelWidth(uint16_t channelWidth)
Sets the selected channelWidth (in MHz)
bool IsValid(WifiPhyBand band=WIFI_PHY_BAND_UNSPECIFIED) const
The standard disallows certain combinations of WifiMode, number of spatial streams,...
void SetHeMuUserInfo(uint16_t staId, HeMuUserInfo userInfo)
Set the HE MU user-specific transmission information for the given STA-ID.
void SetRu(HeRu::RuSpec ru, uint16_t staId)
Set the RU specification for the STA-ID.
bool IsDlOfdma() const
Return true if this TX vector is used for a downlink multi-user transmission using OFDMA.
void SetLength(uint16_t length)
Set the LENGTH field of the L-SIG.
void SetSigBMode(const WifiMode &mode)
Set the MCS used for SIG-B.
bool IsDlMuMimo() const
Return true if this TX vector is used for a downlink multi-user transmission using MU-MIMO.
void SetMode(WifiMode mode)
Sets the selected payload transmission mode.
void SetNss(uint8_t nss)
Sets the number of Nss.
void SetPreambleType(WifiPreamble preamble)
Sets the preamble type.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time Seconds(double value)
Construct a Time in the indicated unit.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
@ WIFI_MOD_CLASS_HE
HE (Clause 27)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double RatioToDb(double ratio)
Convert from ratio to dB.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
WifiPhyState
The state of the PHY layer.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
static constexpr uint16_t SU_STA_ID
STA_ID to identify a single user (SU)
uint8_t staNss
Number of spatial streams used for the STA.
RxSignalInfo structure containing info on the received signal.
double snr
SNR in linear scale.
constexpr uint16_t DEFAULT_CHANNEL_WIDTH
constexpr uint32_t DEFAULT_FREQUENCY