A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
eht-phy.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
7 */
8
9#include "eht-phy.h"
10
11#include "eht-ppdu.h"
12
13#include "ns3/interference-helper.h"
14#include "ns3/wifi-phy.h"
15#include "ns3/wifi-psdu.h"
16#include "ns3/wifi-utils.h"
17
18#undef NS_LOG_APPEND_CONTEXT
19#define NS_LOG_APPEND_CONTEXT WIFI_PHY_NS_LOG_APPEND_CONTEXT(m_wifiPhy)
20
21namespace ns3
22{
23
25
26/*******************************************************
27 * EHT PHY (P802.11be/D1.5)
28 *******************************************************/
29
30// clang-format off
31
34 WIFI_PPDU_FIELD_NON_HT_HEADER, // L-SIG + RL-SIG
35 WIFI_PPDU_FIELD_U_SIG, // U-SIG
36 WIFI_PPDU_FIELD_EHT_SIG, // EHT-SIG
37 WIFI_PPDU_FIELD_TRAINING, // EHT-STF + EHT-LTFs
40 WIFI_PPDU_FIELD_NON_HT_HEADER, // L-SIG + RL-SIG
41 WIFI_PPDU_FIELD_U_SIG, // U-SIG
42 WIFI_PPDU_FIELD_TRAINING, // EHT-STF + EHT-LTFs
44};
45
46// clang-format on
47
48EhtPhy::EhtPhy(bool buildModeList /* = true */)
49 : HePhy(false) // don't add HE modes to list
50{
51 NS_LOG_FUNCTION(this << buildModeList);
55 if (buildModeList)
56 {
58 }
59}
60
62{
63 NS_LOG_FUNCTION(this);
64}
65
66void
68{
69 NS_LOG_FUNCTION(this);
70 NS_ASSERT(m_modeList.empty());
72 for (uint8_t index = 0; index <= m_maxSupportedMcsIndexPerSs; ++index)
73 {
74 NS_LOG_LOGIC("Add EhtMcs" << +index << " to list");
75 m_modeList.emplace_back(CreateEhtMcs(index));
76 }
77}
78
80EhtPhy::GetSigMode(WifiPpduField field, const WifiTxVector& txVector) const
81{
82 switch (field)
83 {
85 return GetSigAMode(); // U-SIG is similar to SIG-A
87 return GetSigBMode(txVector); // EHT-SIG is similar to SIG-B
88 default:
89 return HePhy::GetSigMode(field, txVector);
90 }
91}
92
94EhtPhy::GetSigBMode(const WifiTxVector& txVector) const
95{
96 if (txVector.IsDlMu())
97 {
98 return HePhy::GetSigBMode(txVector);
99 }
100 // we get here in case of EHT SU transmission
101 // TODO fix the MCS used for EHT-SIG
102 auto smallestMcs = std::min<uint8_t>(5, txVector.GetMode().GetMcsValue());
103 return VhtPhy::GetVhtMcs(smallestMcs);
104}
105
106Time
107EhtPhy::GetDuration(WifiPpduField field, const WifiTxVector& txVector) const
108{
109 switch (field)
110 {
112 return GetSigADuration(txVector.GetPreambleType()); // U-SIG is similar to SIG-A
114 return GetSigBDuration(txVector); // EHT-SIG is similar to SIG-B
116 [[fallthrough]];
118 return NanoSeconds(0);
119 default:
120 return HePhy::GetDuration(field, txVector);
121 }
122}
123
125EhtPhy::GetSigBSize(const WifiTxVector& txVector) const
126{
127 if (ns3::IsDlMu(txVector.GetPreambleType()) && ns3::IsEht(txVector.GetPreambleType()))
128 {
130 txVector.GetChannelWidth(),
131 txVector.GetRuAllocation(
133 txVector.GetEhtPpduType(),
134 txVector.IsSigBCompression(),
135 txVector.IsSigBCompression() ? txVector.GetHeMuUserInfoMap().size() : 0);
136 }
137 return HePhy::GetSigBSize(txVector);
138}
139
140Time
142{
143 Time duration = GetDuration(WIFI_PPDU_FIELD_PREAMBLE, txVector) +
146 return duration;
147}
148
149Time
151{
152 Time duration = GetDuration(WIFI_PPDU_FIELD_PREAMBLE, txVector) +
156 return duration;
157}
158
161{
162 return m_ehtPpduFormats;
163}
164
166EhtPhy::BuildPpdu(const WifiConstPsduMap& psdus, const WifiTxVector& txVector, Time ppduDuration)
167{
168 NS_LOG_FUNCTION(this << psdus << txVector << ppduDuration);
169 return Create<EhtPpdu>(psdus,
170 txVector,
172 ppduDuration,
173 ObtainNextUid(txVector),
175}
176
179{
180 NS_LOG_FUNCTION(this << field << *event);
181 switch (field)
182 {
184 [[fallthrough]];
186 return EndReceiveSig(event, field);
187 default:
188 return HePhy::DoEndReceiveField(field, event);
189 }
190}
191
194{
195 NS_LOG_FUNCTION(this << *event << status << field);
196 switch (field)
197 {
199 return ProcessSigA(event, status); // U-SIG is similar to SIG-A
201 return ProcessSigB(event, status); // EHT-SIG is similar to SIG-B
202 default:
203 return HePhy::ProcessSig(event, status, field);
204 }
205 return status;
206}
207
210{
211 switch (field)
212 {
214 return U_SIG_FAILURE;
216 return EHT_SIG_FAILURE;
217 default:
218 return HePhy::GetFailureReason(field);
219 }
220}
221
222void
224{
225 for (uint8_t i = 0; i <= 13; ++i)
226 {
227 GetEhtMcs(i);
228 }
229}
230
232EhtPhy::GetEhtMcs(uint8_t index)
233{
234#define CASE(x) \
235 case x: \
236 return GetEhtMcs##x();
237
238 switch (index)
239 {
240 CASE(0)
241 CASE(1)
242 CASE(2)
243 CASE(3)
244 CASE(4)
245 CASE(5)
246 CASE(6)
247 CASE(7)
248 CASE(8)
249 CASE(9)
250 CASE(10)
251 CASE(11)
252 CASE(12)
253 CASE(13)
254 default:
255 NS_ABORT_MSG("Inexistent index (" << +index << ") requested for EHT");
256 return WifiMode();
257 }
258#undef CASE
259}
260
261#define GET_EHT_MCS(x) \
262 WifiMode EhtPhy::GetEhtMcs##x() \
263 { \
264 static WifiMode mcs = CreateEhtMcs(x); \
265 return mcs; \
266 }
267
278GET_EHT_MCS(10)
279GET_EHT_MCS(11)
280GET_EHT_MCS(12)
281GET_EHT_MCS(13)
282#undef GET_EHT_MCS
283
284WifiMode
286{
287 NS_ASSERT_MSG(index <= 13, "EhtMcs index must be <= 13!");
288 return WifiModeFactory::CreateWifiMcs("EhtMcs" + std::to_string(index),
289 index,
291 false,
298}
299
301EhtPhy::GetCodeRate(uint8_t mcsValue)
302{
303 switch (mcsValue)
304 {
305 case 12:
306 return WIFI_CODE_RATE_3_4;
307 case 13:
308 return WIFI_CODE_RATE_5_6;
309 default:
310 return HePhy::GetCodeRate(mcsValue);
311 }
312}
313
314uint16_t
316{
317 switch (mcsValue)
318 {
319 case 12:
320 [[fallthrough]];
321 case 13:
322 return 4096;
323 default:
324 return HePhy::GetConstellationSize(mcsValue);
325 }
326}
327
328uint64_t
329EhtPhy::GetPhyRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
330{
331 const auto codeRate = GetCodeRate(mcsValue);
332 const auto dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
333 return HtPhy::CalculatePhyRate(codeRate, dataRate);
334}
335
336uint64_t
337EhtPhy::GetPhyRateFromTxVector(const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
338{
339 auto bw = txVector.GetChannelWidth();
340 if (txVector.IsMu())
341 {
342 bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
343 }
344 return EhtPhy::GetPhyRate(txVector.GetMode(staId).GetMcsValue(),
345 bw,
346 txVector.GetGuardInterval(),
347 txVector.GetNss(staId));
348}
349
350uint64_t
351EhtPhy::GetDataRateFromTxVector(const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
352{
353 auto bw = txVector.GetChannelWidth();
354 if (txVector.IsMu())
355 {
356 bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
357 }
358 return EhtPhy::GetDataRate(txVector.GetMode(staId).GetMcsValue(),
359 bw,
360 txVector.GetGuardInterval(),
361 txVector.GetNss(staId));
362}
363
364uint64_t
365EhtPhy::GetDataRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
366{
367 [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
368 NS_ASSERT((gi == 800) || (gi == 1600) || (gi == 3200));
369 NS_ASSERT(nss <= 8);
370 return HtPhy::CalculateDataRate(GetSymbolDuration(guardInterval),
371 GetUsableSubcarriers(channelWidth),
372 static_cast<uint16_t>(log2(GetConstellationSize(mcsValue))),
374 nss);
375}
376
377uint64_t
379{
380 WifiCodeRate codeRate = GetCodeRate(mcsValue);
381 uint16_t constellationSize = GetConstellationSize(mcsValue);
382 return CalculateNonHtReferenceRate(codeRate, constellationSize);
383}
384
385uint64_t
386EhtPhy::CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize)
387{
388 uint64_t dataRate;
389 switch (constellationSize)
390 {
391 case 4096:
392 if (codeRate == WIFI_CODE_RATE_3_4 || codeRate == WIFI_CODE_RATE_5_6)
393 {
394 dataRate = 54000000;
395 }
396 else
397 {
398 NS_FATAL_ERROR("Trying to get reference rate for a MCS with wrong combination of "
399 "coding rate and modulation");
400 }
401 break;
402 default:
403 dataRate = HePhy::CalculateNonHtReferenceRate(codeRate, constellationSize);
404 }
405 return dataRate;
406}
407
408} // namespace ns3
409
410namespace
411{
412
413/**
414 * Constructor class for EHT modes
415 */
425
426} // namespace
Constructor class for EHT modes.
Definition eht-phy.cc:417
static const PpduFormats m_ehtPpduFormats
EHT PPDU formats.
Definition eht-phy.h:281
static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize)
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and...
Definition eht-phy.cc:386
PhyFieldRxStatus ProcessSig(Ptr< Event > event, PhyFieldRxStatus status, WifiPpduField field) override
Process SIG-A or SIG-B, perform amendment-specific actions, and provide an updated status of the rece...
Definition eht-phy.cc:193
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied EHT MCS index.
Definition eht-phy.cc:301
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field.
Definition eht-phy.cc:80
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied EHT MCS index.
Definition eht-phy.cc:315
WifiPhyRxfailureReason GetFailureReason(WifiPpduField field) const override
Get the failure reason corresponding to the unsuccessful processing of a given PPDU field.
Definition eht-phy.cc:209
static uint64_t GetPhyRateFromTxVector(const WifiTxVector &txVector, uint16_t staId=SU_STA_ID)
Return the PHY rate corresponding to the supplied TXVECTOR for the STA-ID.
Definition eht-phy.cc:337
static WifiMode GetEhtMcs(uint8_t index)
Return the EHT MCS corresponding to the provided index.
Definition eht-phy.cc:232
void BuildModeList() override
Build mode list.
Definition eht-phy.cc:67
static void InitializeModes()
Initialize all EHT modes.
Definition eht-phy.cc:223
static uint64_t GetDataRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
Return the data rate corresponding to the supplied EHT MCS index, channel width, guard interval,...
Definition eht-phy.cc:365
static WifiMode CreateEhtMcs(uint8_t index)
Create and return the EHT MCS corresponding to the provided index.
Definition eht-phy.cc:285
const PpduFormats & GetPpduFormats() const override
Return the PPDU formats of the PHY.
Definition eht-phy.cc:160
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId=SU_STA_ID)
Return the data rate corresponding to the supplied TXVECTOR for the STA-ID.
Definition eht-phy.cc:351
~EhtPhy() override
Destructor for EHT PHY.
Definition eht-phy.cc:61
uint32_t GetSigBSize(const WifiTxVector &txVector) const override
Definition eht-phy.cc:125
static uint64_t GetPhyRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
Return the PHY rate corresponding to the supplied EHT MCS index, channel width, guard interval,...
Definition eht-phy.cc:329
Time CalculateNonHeDurationForHeTb(const WifiTxVector &txVector) const override
Definition eht-phy.cc:141
EhtPhy(bool buildModeList=true)
Constructor for EHT PHY.
Definition eht-phy.cc:48
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.
Definition eht-phy.cc:166
static uint64_t GetNonHtReferenceRate(uint8_t mcsValue)
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied HE MCS index.
Definition eht-phy.cc:378
Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const override
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
Definition eht-phy.cc:107
Time CalculateNonHeDurationForHeMu(const WifiTxVector &txVector) const override
Definition eht-phy.cc:150
WifiMode GetSigBMode(const WifiTxVector &txVector) const override
Definition eht-phy.cc:94
PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event) override
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition eht-phy.cc:178
static uint32_t GetEhtSigFieldSize(MHz_u channelWidth, const std::vector< uint8_t > &ruAllocation, uint8_t ehtPpduType, bool compression, std::size_t numMuMimoUsers)
Get variable length EHT-SIG field size.
Definition eht-ppdu.cc:192
PHY entity for HE (11ax)
Definition he-phy.h:58
virtual PhyFieldRxStatus ProcessSigB(Ptr< Event > event, PhyFieldRxStatus status)
Process SIG-B, perform amendment-specific actions, and provide an updated status of the reception.
Definition he-phy.cc:721
Time GetSigBDuration(const WifiTxVector &txVector) const override
Definition he-phy.cc:228
virtual uint32_t GetSigBSize(const WifiTxVector &txVector) const
Definition he-phy.cc:212
static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize)
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and...
Definition he-phy.cc:1751
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied HE MCS index.
Definition he-phy.cc:1638
PhyFieldRxStatus ProcessSig(Ptr< Event > event, PhyFieldRxStatus status, WifiPpduField field) override
Process SIG-A or SIG-B, perform amendment-specific actions, and provide an updated status of the rece...
Definition he-phy.cc:583
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field.
Definition he-phy.cc:109
uint64_t ObtainNextUid(const WifiTxVector &txVector) override
Obtain the next UID for the PPDU to transmit.
Definition he-phy.cc:1289
static bool IsAllowed(const WifiTxVector &txVector)
Check whether the combination in TXVECTOR is allowed.
Definition he-phy.cc:1774
static Time GetSymbolDuration(Time guardInterval)
Definition he-phy.cc:1737
WifiMode GetSigBMode(const WifiTxVector &txVector) const override
Definition he-phy.cc:138
virtual PhyFieldRxStatus ProcessSigA(Ptr< Event > event, PhyFieldRxStatus status)
Process SIG-A, perform amendment-specific actions, and provide an updated status of the reception.
Definition he-phy.cc:600
WifiMode GetSigAMode() const override
Definition he-phy.cc:132
Time GetSigADuration(WifiPreamble preamble) const override
Definition he-phy.cc:204
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied HE MCS index.
Definition he-phy.cc:1652
@ PSD_NON_HE_PORTION
Non-HE portion of an HE PPDU.
Definition he-ppdu.h:105
RuType GetRuType() const
Get the RU type.
Definition he-ru.cc:447
static MHz_u GetBandwidth(RuType ruType)
Get the approximate bandwidth occupied by a RU.
Definition he-ru.cc:756
static uint64_t CalculatePhyRate(WifiCodeRate codeRate, uint64_t dataRate)
Return the PHY rate corresponding to the supplied code rate and data rate.
Definition ht-phy.cc:651
uint8_t m_bssMembershipSelector
the BSS membership selector
Definition ht-phy.h:544
PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event) override
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition ht-phy.cc:383
uint8_t m_maxMcsIndexPerSs
the maximum MCS index per spatial stream as defined by the standard
Definition ht-phy.h:542
Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const override
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
Definition ht-phy.cc:202
static uint64_t CalculateDataRate(Time symbolDuration, uint16_t usableSubCarriers, uint16_t numberOfBitsPerSubcarrier, double codingRate, uint8_t nss)
Calculates data rate from the supplied parameters.
Definition ht-phy.cc:700
static double GetCodeRatio(WifiCodeRate codeRate)
Convert WifiCodeRate to a ratio, e.g., code ratio of WIFI_CODE_RATE_1_2 is 0.5.
Definition ht-phy.cc:666
uint8_t m_maxSupportedMcsIndexPerSs
the maximum supported MCS index per spatial stream
Definition ht-phy.h:543
static uint16_t GetUsableSubcarriers()
Definition ofdm-phy.cc:624
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition phy-entity.h:939
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition phy-entity.h:529
std::list< WifiMode > m_modeList
the list of supported modes
Definition phy-entity.h:943
Smart pointer class similar to boost::intrusive_ptr.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
int64_t GetNanoSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
Definition nstime.h:407
PhyFieldRxStatus EndReceiveSig(Ptr< Event > event, WifiPpduField field)
End receiving the SIG-A or SIG-B, perform VHT-specific actions, and provide the status of the recepti...
Definition vht-phy.cc:266
static WifiMode GetVhtMcs(uint8_t index)
Return the VHT MCS corresponding to the provided index.
Definition vht-phy.cc:334
virtual WifiPhyRxfailureReason GetFailureReason(WifiPpduField field) const
Get the failure reason corresponding to the unsuccessful processing of a given PPDU field.
Definition vht-phy.cc:291
static WifiMode CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, DataRateCallback dataRateCallback, NonHtReferenceRateCallback nonHtReferenceRateCallback, AllowedCallback isAllowedCallback)
Definition wifi-mode.cc:307
represent a single transmission mode
Definition wifi-mode.h:40
uint8_t GetMcsValue() const
Definition wifi-mode.cc:152
static void AddStaticPhyEntity(WifiModulationClass modulation, Ptr< PhyEntity > phyEntity)
Add the PHY entity to the map of implemented PHY entities for the given modulation class.
Definition wifi-phy.cc:795
const WifiPhyOperatingChannel & GetOperatingChannel() const
Get a const reference to the operating channel.
Definition wifi-phy.cc:1075
uint8_t GetPrimaryChannelIndex(MHz_u primaryChannelWidth) const
If the operating channel width is a multiple of 20 MHz, return the index of the primary channel of th...
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.
const RuAllocation & GetRuAllocation(uint8_t p20Index) const
Get RU_ALLOCATION field.
WifiMode GetMode(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the selected payload transmission mode.
WifiPreamble GetPreambleType() const
HeRu::RuSpec GetRu(uint16_t staId) const
Get the RU specification for the STA-ID.
const HeMuUserInfoMap & GetHeMuUserInfoMap() const
Get a const reference to the map HE MU user-specific transmission information indexed by STA-ID.
uint8_t GetEhtPpduType() const
Get the EHT_PPDU_TYPE parameter.
uint8_t GetNss(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the number of spatial streams.
MHz_u GetChannelWidth() const
Time GetGuardInterval() const
#define GET_EHT_MCS(x)
Definition eht-phy.cc:261
#define CASE(x)
Declaration of ns3::EhtPhy class.
#define EHT_PHY
This defines the BSS membership value for EHT PHY.
Definition eht-phy.h:26
Declaration of ns3::EhtPpdu class.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition assert.h:55
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition assert.h:75
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition abort.h:38
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition log.h:271
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
Definition callback.h:745
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition nstime.h:1344
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
WifiPpduField
The type of PPDU field (grouped for convenience)
@ U_SIG_FAILURE
@ EHT_SIG_FAILURE
@ WIFI_PREAMBLE_EHT_TB
@ WIFI_PREAMBLE_EHT_MU
@ WIFI_MOD_CLASS_EHT
EHT (Clause 36)
@ WIFI_PPDU_FIELD_SIG_B
SIG-B field.
@ WIFI_PPDU_FIELD_TRAINING
STF + LTF fields (excluding those in preamble for HT-GF)
@ WIFI_PPDU_FIELD_NON_HT_HEADER
PHY header field for DSSS or ERP, short PHY header field for HR/DSSS or ERP, field not present for HT...
@ WIFI_PPDU_FIELD_EHT_SIG
EHT-SIG field.
@ WIFI_PPDU_FIELD_PREAMBLE
SYNC + SFD fields for DSSS or ERP, shortSYNC + shortSFD fields for HR/DSSS or ERP,...
@ WIFI_PPDU_FIELD_U_SIG
U-SIG field.
@ WIFI_PPDU_FIELD_DATA
data field
@ WIFI_PPDU_FIELD_SIG_A
SIG-A field.
class anonymous_namespace{eht-phy.cc}::ConstructorEht g_constructor_eht
the constructor for EHT modes
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
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...
Definition callback.h:684
bool IsEht(WifiPreamble preamble)
Return true if a preamble corresponds to an EHT transmission.
bool IsDlMu(WifiPreamble preamble)
Return true if a preamble corresponds to a downlink multi-user transmission.
WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
@ WIFI_CODE_RATE_3_4
3/4 coding rate
@ WIFI_CODE_RATE_5_6
5/6 coding rate
Status of the reception of the PPDU field.
Definition phy-entity.h:80