A Discrete-Event Network Simulator
API
eht-phy.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: S├ębastien Deronne <sebastien.deronne@gmail.com>
19 */
20
21#include "ns3/wifi-phy.h"
22#include "ns3/wifi-psdu.h"
23#include "ns3/wifi-utils.h"
24#include "ns3/interference-helper.h"
25#include "eht-phy.h"
26#include "eht-ppdu.h"
27
28namespace ns3 {
29
31
32/*******************************************************
33 * EHT PHY (P802.11be/D1.5)
34 *******************************************************/
35
36/* *NS_CHECK_STYLE_OFF* */
39 WIFI_PPDU_FIELD_NON_HT_HEADER, //L-SIG + RL-SIG
42 WIFI_PPDU_FIELD_TRAINING, //EHT-STF + EHT-LTFs
45 WIFI_PPDU_FIELD_NON_HT_HEADER, //L-SIG + RL-SIG
47 WIFI_PPDU_FIELD_TRAINING, //EHT-STF + EHT-LTFs
49};
50/* *NS_CHECK_STYLE_ON* */
51
52EhtPhy::EhtPhy (bool buildModeList /* = true */)
53 : HePhy (false) //don't add HE modes to list
54{
55 NS_LOG_FUNCTION (this << buildModeList);
59 if (buildModeList)
60 {
62 }
63}
64
66{
67 NS_LOG_FUNCTION (this);
68}
69
70void
72{
73 NS_LOG_FUNCTION (this);
74 NS_ASSERT (m_modeList.empty ());
76 for (uint8_t index = 0; index <= m_maxSupportedMcsIndexPerSs; ++index)
77 {
78 NS_LOG_LOGIC ("Add EhtMcs" << +index << " to list");
79 m_modeList.emplace_back (CreateEhtMcs (index));
80 }
81}
82
84EhtPhy::GetSigMode (WifiPpduField field, const WifiTxVector& txVector) const
85{
86 switch (field)
87 {
89 return GetSigAMode (); //U-SIG is similar to SIG-A
91 return GetSigBMode (txVector); //EHT-SIG is similar to SIG-B
92 default:
93 return HePhy::GetSigMode (field, txVector);
94 }
95}
96
97Time
98EhtPhy::GetDuration (WifiPpduField field, const WifiTxVector& txVector) const
99{
100 switch (field)
101 {
103 return GetSigADuration (txVector.GetPreambleType ()); //U-SIG is similar to SIG-A
105 return GetSigBDuration (txVector); //EHT-SIG is similar to SIG-B
107 [[fallthrough]];
109 return NanoSeconds (0);
110 default:
111 return HePhy::GetDuration (field, txVector);
112 }
113}
114
117{
118 return m_ehtPpduFormats;
119}
120
122EhtPhy::BuildPpdu (const WifiConstPsduMap & psdus, const WifiTxVector& txVector, Time ppduDuration)
123{
124 NS_LOG_FUNCTION (this << psdus << txVector << ppduDuration);
125 return Create<EhtPpdu> (psdus, txVector,
127 ppduDuration, m_wifiPhy->GetPhyBand (),
130}
131
134{
135 NS_LOG_FUNCTION (this << field << *event);
136 switch (field)
137 {
139 [[fallthrough]];
141 return EndReceiveSig (event, field);
142 default:
143 return HePhy::DoEndReceiveField (field, event);
144 }
145}
146
149{
150 NS_LOG_FUNCTION (this << *event << status << field);
151 switch (field)
152 {
154 return ProcessSigA (event, status); //U-SIG is similar to SIG-A
156 return ProcessSigB (event, status); //EHT-SIG is similar to SIG-B
157 default:
158 return HePhy::ProcessSig (event, status, field);
159 }
160 return status;
161}
162
165{
166 switch (field)
167 {
169 return U_SIG_FAILURE;
171 return EHT_SIG_FAILURE;
172 default:
173 return HePhy::GetFailureReason (field);
174 }
175}
176
177void
179{
180 for (uint8_t i = 0; i <= 13; ++i)
181 {
182 GetEhtMcs (i);
183 }
184}
185
187EhtPhy::GetEhtMcs (uint8_t index)
188{
189#define CASE(x) \
190case x: \
191 return GetEhtMcs ## x (); \
192
193 switch (index)
194 {
195 CASE ( 0)
196 CASE ( 1)
197 CASE ( 2)
198 CASE ( 3)
199 CASE ( 4)
200 CASE ( 5)
201 CASE ( 6)
202 CASE ( 7)
203 CASE ( 8)
204 CASE ( 9)
205 CASE (10)
206 CASE (11)
207 CASE (12)
208 CASE (13)
209 default:
210 NS_ABORT_MSG ("Inexistent index (" << +index << ") requested for EHT");
211 return WifiMode ();
212 }
213#undef CASE
214}
215
216#define GET_EHT_MCS(x) \
217WifiMode \
218EhtPhy::GetEhtMcs ## x (void) \
219{ \
220 static WifiMode mcs = CreateEhtMcs (x); \
221 return mcs; \
222}; \
223
224GET_EHT_MCS (0)
225GET_EHT_MCS (1)
226GET_EHT_MCS (2)
227GET_EHT_MCS (3)
228GET_EHT_MCS (4)
229GET_EHT_MCS (5)
230GET_EHT_MCS (6)
231GET_EHT_MCS (7)
232GET_EHT_MCS (8)
233GET_EHT_MCS (9)
234GET_EHT_MCS (10)
235GET_EHT_MCS (11)
236GET_EHT_MCS (12)
237GET_EHT_MCS (13)
238#undef GET_EHT_MCS
239
240WifiMode
241EhtPhy::CreateEhtMcs (uint8_t index)
242{
243 NS_ASSERT_MSG (index <= 13, "EhtMcs index must be <= 13!");
244 return WifiModeFactory::CreateWifiMcs ("EhtMcs" + std::to_string (index),
245 index,
247 false,
254}
255
257EhtPhy::GetCodeRate (uint8_t mcsValue)
258{
259 switch (mcsValue)
260 {
261 case 12:
262 return WIFI_CODE_RATE_3_4;
263 case 13:
264 return WIFI_CODE_RATE_5_6;
265 default:
266 return HePhy::GetCodeRate (mcsValue);
267 }
268}
269
270uint16_t
272{
273 switch (mcsValue)
274 {
275 case 12:
276 [[fallthrough]];
277 case 13:
278 return 4096;
279 default:
280 return HePhy::GetConstellationSize (mcsValue);
281 }
282}
283
284uint64_t
285EhtPhy::GetPhyRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
286{
287 WifiCodeRate codeRate = GetCodeRate (mcsValue);
288 uint64_t dataRate = GetDataRate (mcsValue, channelWidth, guardInterval, nss);
289 return HtPhy::CalculatePhyRate (codeRate, dataRate);
290}
291
292uint64_t
293EhtPhy::GetPhyRateFromTxVector (const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
294{
295 uint16_t bw = txVector.GetChannelWidth ();
296 if (txVector.IsMu ())
297 {
298 bw = HeRu::GetBandwidth (txVector.GetRu (staId).GetRuType ());
299 }
300 return EhtPhy::GetPhyRate (txVector.GetMode (staId).GetMcsValue (),
301 bw,
302 txVector.GetGuardInterval (),
303 txVector.GetNss (staId));
304}
305
306uint64_t
307EhtPhy::GetDataRateFromTxVector (const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
308{
309 uint16_t bw = txVector.GetChannelWidth ();
310 if (txVector.IsMu ())
311 {
312 bw = HeRu::GetBandwidth (txVector.GetRu (staId).GetRuType ());
313 }
314 return EhtPhy::GetDataRate (txVector.GetMode (staId).GetMcsValue (),
315 bw,
316 txVector.GetGuardInterval (),
317 txVector.GetNss (staId));
318}
319
320uint64_t
321EhtPhy::GetDataRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
322{
323 NS_ASSERT (guardInterval == 800 || guardInterval == 1600 || guardInterval == 3200);
324 NS_ASSERT (nss <= 8);
326 GetUsableSubcarriers (channelWidth),
327 static_cast<uint16_t> (log2 (GetConstellationSize (mcsValue))),
328 HtPhy::GetCodeRatio (GetCodeRate (mcsValue)), nss);
329}
330
331uint64_t
333{
334 WifiCodeRate codeRate = GetCodeRate (mcsValue);
335 uint16_t constellationSize = GetConstellationSize (mcsValue);
336 return CalculateNonHtReferenceRate (codeRate, constellationSize);
337}
338
339uint64_t
340EhtPhy::CalculateNonHtReferenceRate (WifiCodeRate codeRate, uint16_t constellationSize)
341{
342 uint64_t dataRate;
343 switch (constellationSize)
344 {
345 case 4096:
346 if (codeRate == WIFI_CODE_RATE_3_4 || codeRate == WIFI_CODE_RATE_5_6)
347 {
348 dataRate = 54000000;
349 }
350 else
351 {
352 NS_FATAL_ERROR ("Trying to get reference rate for a MCS with wrong combination of coding rate and modulation");
353 }
354 break;
355 default:
356 dataRate = HePhy::CalculateNonHtReferenceRate (codeRate, constellationSize);
357 }
358 return dataRate;
359}
360
361} //namespace ns3
362
363namespace {
364
368static class ConstructorEht
369{
370public:
372 {
374 ns3::WifiPhy::AddStaticPhyEntity (ns3::WIFI_MOD_CLASS_EHT, ns3::Create<ns3::EhtPhy> ());
375 }
377
378}
Constructor class for EHT modes.
Definition: eht-phy.cc:369
void BuildModeList(void) override
Build mode list.
Definition: eht-phy.cc:71
static const PpduFormats m_ehtPpduFormats
EHT PPDU formats.
Definition: eht-phy.h:275
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:340
const PpduFormats & GetPpduFormats(void) const override
Return the PPDU formats of the PHY.
Definition: eht-phy.cc:116
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:148
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied EHT MCS index.
Definition: eht-phy.cc:257
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:84
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied EHT MCS index.
Definition: eht-phy.cc:271
WifiPhyRxfailureReason GetFailureReason(WifiPpduField field) const override
Get the failure reason corresponding to the unsuccessful processing of a given PPDU field.
Definition: eht-phy.cc:164
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:293
static WifiMode GetEhtMcs(uint8_t index)
Return the EHT MCS corresponding to the provided index.
Definition: eht-phy.cc:187
static WifiMode CreateEhtMcs(uint8_t index)
Create and return the EHT MCS corresponding to the provided index.
Definition: eht-phy.cc:241
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:307
static void InitializeModes(void)
Initialize all EHT modes.
Definition: eht-phy.cc:178
virtual ~EhtPhy()
Destructor for EHT PHY.
Definition: eht-phy.cc:65
EhtPhy(bool buildModeList=true)
Constructor for EHT PHY.
Definition: eht-phy.cc:52
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.
Definition: eht-phy.cc:122
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:332
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:98
static uint64_t GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the data rate corresponding to the supplied EHT MCS index, channel width, guard interval,...
Definition: eht-phy.cc:321
static uint64_t GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the PHY rate corresponding to the supplied EHT MCS index, channel width, guard interval,...
Definition: eht-phy.cc:285
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:133
PHY entity for HE (11ax)
Definition: he-phy.h:63
WifiMode GetSigAMode(void) const override
Definition: he-phy.cc:132
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:677
Time GetSigBDuration(const WifiTxVector &txVector) const override
Definition: he-phy.cc:209
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:1541
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied HE MCS index.
Definition: he-phy.cc:1430
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:561
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:110
uint64_t ObtainNextUid(const WifiTxVector &txVector) override
Obtain the next UID for the PPDU to transmit.
Definition: he-phy.cc:1169
static bool IsAllowed(const WifiTxVector &txVector)
Check whether the combination in TXVECTOR is allowed.
Definition: he-phy.cc:1563
static Time GetSymbolDuration(Time guardInterval)
Definition: he-phy.cc:1527
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:578
Time GetSigADuration(WifiPreamble preamble) const override
Definition: he-phy.cc:203
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied HE MCS index.
Definition: he-phy.cc:1444
@ PSD_NON_HE_PORTION
Non-HE portion of an HE PPDU.
Definition: he-ppdu.h:159
RuType GetRuType(void) const
Get the RU type.
Definition: he-ru.cc:167
static uint16_t GetBandwidth(RuType ruType)
Get the approximate bandwidth occupied by a RU.
Definition: he-ru.cc:487
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:628
uint8_t m_bssMembershipSelector
the BSS membership selector
Definition: ht-phy.h:540
uint8_t m_maxMcsIndexPerSs
the maximum MCS index per spatial stream as defined by the standard
Definition: ht-phy.h:538
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:675
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:643
uint8_t m_maxSupportedMcsIndexPerSs
the maximum supported MCS index per spatial stream
Definition: ht-phy.h:539
static uint16_t GetUsableSubcarriers(void)
Definition: ofdm-phy.cc:585
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition: phy-entity.h:884
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:489
std::list< WifiMode > m_modeList
the list of supported modes
Definition: phy-entity.h:887
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
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: vht-phy.cc:168
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
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: vht-phy.cc:251
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:305
represent a single transmission mode
Definition: wifi-mode.h:48
uint8_t GetMcsValue(void) const
Definition: wifi-mode.cc:155
const WifiPhyOperatingChannel & GetOperatingChannel(void) const
Get a const reference to the operating channel.
Definition: wifi-phy.cc:951
WifiPhyBand GetPhyBand(void) const
Get the configured Wi-Fi band.
Definition: wifi-phy.cc:938
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:692
uint8_t GetPrimaryChannelIndex(uint16_t primaryChannelWidth) const
If the operating channel width is a multiple of 20 MHz, return the index of the primary channel of th...
uint16_t GetPrimaryChannelCenterFrequency(uint16_t primaryChannelWidth) const
Get the center frequency of the primary channel of the given width.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
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(void) const
HeRu::RuSpec GetRu(uint16_t staId) const
Get the RU specification for the STA-ID.
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.
bool IsMu(void) const
Return true if this TX vector is used for a multi-user transmission.
uint16_t GetChannelWidth(void) const
uint16_t GetGuardInterval(void) const
#define GET_EHT_MCS(x)
Definition: eht-phy.cc:216
#define CASE(x)
Declaration of ns3::EhtPhy class.
#define EHT_PHY
This defines the BSS membership value for EHT PHY.
Definition: eht-phy.h:37
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:67
#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:88
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition: abort.h:50
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:206
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:290
#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:714
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1269
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.
static 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.
const uint16_t WIFI_CODE_RATE_3_4
3/4 coding rate
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:661
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
const uint16_t WIFI_CODE_RATE_5_6
5/6 coding rate
Status of the reception of the PPDU field.
Definition: phy-entity.h:113