A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
he-ppdu.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Orange Labs
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Rediet <getachew.redieteab@orange.com>
7 * Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
8 * Sébastien Deronne <sebastien.deronne@gmail.com> (HeSigHeader)
9 */
10
11#ifndef HE_PPDU_H
12#define HE_PPDU_H
13
14#include "ns3/ofdm-ppdu.h"
15
16#include <variant>
17
18/**
19 * @file
20 * @ingroup wifi
21 * Declaration of ns3::HePpdu class.
22 */
23
24namespace ns3
25{
26
27/// HE SIG-B Content Channels
29
30class WifiPsdu;
31
32/**
33 * @brief HE PPDU (11ax)
34 * @ingroup wifi
35 *
36 * HePpdu stores a preamble, PHY headers and a map of PSDUs of a PPDU with HE header
37 */
38class HePpdu : public OfdmPpdu
39{
40 public:
41 /// User Specific Fields in HE-SIG-Bs.
43 {
44 uint16_t staId : 11; ///< STA-ID
45 uint8_t nss : 4; ///< number of spatial streams
46 uint8_t mcs : 4; ///< MCS index
47 };
48
49 /// HE SIG-B Content Channels
50 using HeSigBContentChannels = std::vector<std::vector<HeSigBUserSpecificField>>;
51
52 /**
53 * HE-SIG PHY header for HE SU PPDUs (HE-SIG-A1/A2)
54 */
56 {
57 uint8_t m_format{1}; ///< Format bit
58 uint8_t m_bssColor{0}; ///< BSS color field
59 uint8_t m_mcs{0}; ///< MCS field
60 uint8_t m_bandwidth{0}; ///< Bandwidth field
61 uint8_t m_giLtfSize{0}; ///< GI+LTF Size field
62 uint8_t m_nsts{0}; ///< NSTS
63 };
64
65 /**
66 * HE-SIG PHY header for HE TB PPDUs (HE-SIG-A1/A2)
67 */
69 {
70 uint8_t m_format{0}; ///< Format bit
71 uint8_t m_bssColor{0}; ///< BSS color field
72 uint8_t m_bandwidth{0}; ///< Bandwidth field
73 };
74
75 /**
76 * HE-SIG PHY header for HE MU PPDUs (HE-SIG-A1/A2/B)
77 */
79 {
80 // HE-SIG-A fields
81 uint8_t m_bssColor{0}; ///< BSS color field
82 uint8_t m_bandwidth{0}; ///< Bandwidth field
83 uint8_t m_sigBMcs{0}; ///< HE-SIG-B MCS
84 uint8_t m_muMimoUsers{0}; ///< MU-MIMO users
85 uint8_t m_sigBCompression{0}; ///< SIG-B compression
86 uint8_t m_giLtfSize{0}; ///< GI+LTF Size field
87
88 // HE-SIG-B fields
89 RuAllocation m_ruAllocation; //!< RU allocations that are going to be carried in SIG-B
90 //!< common subfields
91 HeSigBContentChannels m_contentChannels; //!< HE SIG-B Content Channels
92 std::optional<Center26ToneRuIndication>
93 m_center26ToneRuIndication; //!< center 26 tone RU indication in SIG-B common subfields
94 };
95
96 /// type of the HE-SIG PHY header
97 using HeSigHeader = std::variant<std::monostate, HeSuSigHeader, HeTbSigHeader, HeMuSigHeader>;
98
99 /**
100 * The transmit power spectral density flag, namely used
101 * to correctly build PSDs for pre-HE and HE portions.
102 */
104 {
105 PSD_NON_HE_PORTION, //!< Non-HE portion of an HE PPDU
106 PSD_HE_PORTION //!< HE portion of an HE PPDU
107 };
108
109 /**
110 * Create an SU HE PPDU, storing a PSDU.
111 *
112 * @param psdu the PHY payload (PSDU)
113 * @param txVector the TXVECTOR that was used for this PPDU
114 * @param channel the operating channel of the PHY used to transmit this PPDU
115 * @param ppduDuration the transmission duration of this PPDU
116 * @param uid the unique ID of this PPDU
117 * @param instantiateHeaders flag used to instantiate HE header, should be disabled by child
118 * classes
119 */
121 const WifiTxVector& txVector,
122 const WifiPhyOperatingChannel& channel,
123 Time ppduDuration,
124 uint64_t uid,
125 bool instantiateHeaders = true);
126 /**
127 * Create an MU HE PPDU, storing a map of PSDUs.
128 *
129 * This PPDU can either be UL or DL.
130 *
131 * @param psdus the PHY payloads (PSDUs)
132 * @param txVector the TXVECTOR that was used for this PPDU
133 * @param channel the operating channel of the PHY used to transmit this PPDU
134 * @param ppduDuration the transmission duration of this PPDU
135 * @param uid the unique ID of this PPDU or of the triggering PPDU if this is an HE TB PPDU
136 * @param flag the flag indicating the type of Tx PSD to build
137 * @param instantiateHeaders flag used to instantiate HE header, should be disabled by child
138 * classes
139 */
140 HePpdu(const WifiConstPsduMap& psdus,
141 const WifiTxVector& txVector,
142 const WifiPhyOperatingChannel& channel,
143 Time ppduDuration,
144 uint64_t uid,
145 TxPsdFlag flag,
146 bool instantiateHeaders = true);
147
148 Time GetTxDuration() const override;
149 Ptr<WifiPpdu> Copy() const override;
150 WifiPpduType GetType() const override;
151 uint16_t GetStaId() const override;
152 MHz_u GetTxChannelWidth() const override;
153
154 /**
155 * Get the payload of the PPDU.
156 *
157 * @param bssColor the BSS color of the PHY calling this function.
158 * @param staId the STA-ID of the PHY calling this function.
159 * @return the PSDU
160 */
161 virtual Ptr<const WifiPsdu> GetPsdu(uint8_t bssColor, uint16_t staId = SU_STA_ID) const;
162
163 /**
164 * @return the transmit PSD flag set for this PPDU
165 *
166 * @see TxPsdFlag
167 */
168 TxPsdFlag GetTxPsdFlag() const;
169
170 /**
171 * @param flag the transmit PSD flag set for this PPDU
172 *
173 * @see TxPsdFlag
174 */
175 void SetTxPsdFlag(TxPsdFlag flag) const;
176
177 /**
178 * Update the TXVECTOR for HE TB PPDUs, since the information to decode HE TB PPDUs
179 * is not available from the PHY headers but it requires information from the TRIGVECTOR
180 * of the AP expecting these HE TB PPDUs.
181 *
182 * @param trigVector the TRIGVECTOR or std::nullopt if no TRIGVECTOR is available at the caller
183 */
184 void UpdateTxVectorForUlMu(const std::optional<WifiTxVector>& trigVector) const;
185
186 /**
187 * Get the number of STAs per HE-SIG-B content channel.
188 * This is applicable only for MU.
189 * See section 27.3.10.8.3 of IEEE 802.11ax draft 4.0.
190 *
191 * @param channelWidth the channel width occupied by the PPDU
192 * @param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
193 * @param center26ToneRuIndication the center 26 tone RU indication
194 * @param sigBCompression flag whether SIG-B compression is used by the PPDU
195 * @param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
196 * @return a pair containing the number of RUs in each HE-SIG-B content channel (resp. 1 and 2)
197 */
198 static std::pair<std::size_t, std::size_t> GetNumRusPerHeSigBContentChannel(
199 MHz_u channelWidth,
200 const RuAllocation& ruAllocation,
201 std::optional<Center26ToneRuIndication> center26ToneRuIndication,
202 bool sigBCompression,
203 uint8_t numMuMimoUsers);
204
205 /**
206 * Get the HE SIG-B content channels for a given PPDU
207 * IEEE 802.11ax-2021 27.3.11.8.2 HE-SIG-B content channels
208 *
209 * @param txVector the TXVECTOR used for the PPDU
210 * @param p20Index the index of the primary20 channel
211 * @return HE-SIG-B content channels
212 */
213 static HeSigBContentChannels GetHeSigBContentChannels(const WifiTxVector& txVector,
214 uint8_t p20Index);
215
216 /**
217 * Get variable length HE SIG-B field size
218 * @param channelWidth the channel width occupied by the PPDU
219 * @param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
220 * @param center26ToneRuIndication the center 26 tone RU indication
221 * @param sigBCompression flag whether SIG-B compression is used by the PPDU
222 * @param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
223 * @return field size in bytes
224 */
226 MHz_u channelWidth,
227 const RuAllocation& ruAllocation,
228 std::optional<Center26ToneRuIndication> center26ToneRuIndication,
229 bool sigBCompression,
230 std::size_t numMuMimoUsers);
231
232 protected:
233 /**
234 * Fill in the TXVECTOR from PHY headers.
235 *
236 * @param txVector the TXVECTOR to fill in
237 */
238 virtual void SetTxVectorFromPhyHeaders(WifiTxVector& txVector) const;
239
240 /**
241 * Fill in the L-SIG header.
242 *
243 * @param ppduDuration the transmission duration of this PPDU
244 */
245 void SetLSigHeader(Time ppduDuration);
246
247 /**
248 * Reconstruct HeMuUserInfoMap from HE-SIG-B header.
249 *
250 * @param txVector the TXVECTOR to set its HeMuUserInfoMap
251 * @param ruAllocation the RU_ALLOCATION per 20 MHz
252 * @param center26ToneRuIndication the center 26 tone RU indication
253 * @param contentChannels the HE-SIG-B content channels
254 * @param sigBCompression flag whether SIG-B compression is used by the PPDU
255 * @param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
256 */
257 void SetHeMuUserInfos(WifiTxVector& txVector,
258 const RuAllocation& ruAllocation,
259 std::optional<Center26ToneRuIndication> center26ToneRuIndication,
260 const HeSigBContentChannels& contentChannels,
261 bool sigBCompression,
262 uint8_t numMuMimoUsers) const;
263
264 /**
265 * Get the RU specification that has been assigned a given user.
266 *
267 * @param ruAllocIndex the index of the RU allocation
268 * @param ruSpecs RU specs deduced from the RU allocation
269 * @param ruType RU type of the user to be assigned
270 * @param ruIndex RU index of the user to be assigned
271 * @param bw the total bandwidth used for the transmission
272 * @return the value used to encode the bandwidth field in HE-SIG-A
273 */
274 virtual WifiRu::RuSpec GetRuSpec(std::size_t ruAllocIndex,
275 const std::vector<WifiRu::RuSpec>& ruSpecs,
276 RuType ruType,
277 std::size_t ruIndex,
278 MHz_u bw) const;
279
280 /**
281 * Convert channel width expressed in MHz to bandwidth field encoding in HE-SIG-A.
282 *
283 * @param channelWidth the channel width in MHz
284 * @return the value used to encode the bandwidth field in HE-SIG-A
285 */
286 static uint8_t GetChannelWidthEncodingFromMhz(MHz_u channelWidth);
287
288 /**
289 * Convert number of spatial streams to NSTS field encoding in HE-SIG-A.
290 *
291 * @param nss the number of spatial streams
292 * @return the value used to encode the NSTS field in HE-SIG-A
293 */
294 static uint8_t GetNstsEncodingFromNss(uint8_t nss);
295
296 /**
297 * Convert guard interval and NLTF to its encoding in HE-SIG-A.
298 *
299 * @param guardInterval the guard interval
300 * @param nltf the the number of long training symbols
301 * @return the value used to encode the NSTS field in HE-SIG-A
302 */
303 static uint8_t GetGuardIntervalAndNltfEncoding(Time guardInterval, uint8_t nltf);
304
305 /**
306 * Convert number of spatial streams from NSTS field encoding in HE-SIG-A.
307 *
308 * @param nsts the value of the NSTS field in HE-SIG-A
309 * @return the number of spatial streams
310 */
311 static uint8_t GetNssFromNstsEncoding(uint8_t nsts);
312
313 /**
314 * Convert channel width expressed in MHz from bandwidth field encoding in HE-SIG-A.
315 *
316 * @param bandwidth the value of the bandwidth field in HE-SIG-A
317 * @return the channel width in MHz
318 */
319 static MHz_u GetChannelWidthMhzFromEncoding(uint8_t bandwidth);
320
321 /**
322 * Convert guard interval from its encoding in HE-SIG-A.
323 *
324 * @param giAndNltfSize the value used to encode the guard interval and NLTF field in HE-SIG-A
325 * @return the guard interval
326 */
327 static Time GetGuardIntervalFromEncoding(uint8_t giAndNltfSize);
328
329 /**
330 * Convert number of MU-MIMO users to its encoding in HE-SIG-A.
331 *
332 * @param nUsers the number of MU-MIMO users
333 * @return the number of MU-MIMO users to its encoding in HE-SIG-A
334 */
335 static uint8_t GetMuMimoUsersEncoding(uint8_t nUsers);
336
337 /**
338 * Convert number of MU-MIMO users from its encoding in HE-SIG-A.
339 *
340 * @param encoding the number of MU-MIMO users encoded in HE-SIG-A
341 * @return the number of MU-MIMO users from its encoding in HE-SIG-A
342 */
343 static uint8_t GetMuMimoUsersFromEncoding(uint8_t encoding);
344
345 mutable TxPsdFlag m_txPsdFlag; //!< the transmit power spectral density flag
346
347 private:
348 std::string PrintPayload() const override;
349 WifiTxVector DoGetTxVector() const override;
350
351 /**
352 * Fill in the PHY headers.
353 *
354 * @param txVector the TXVECTOR that was used for this PPDU
355 * @param ppduDuration the transmission duration of this PPDU
356 */
357 virtual void SetPhyHeaders(const WifiTxVector& txVector, Time ppduDuration);
358
359 /**
360 * Fill in the HE-SIG header.
361 *
362 * @param txVector the TXVECTOR that was used for this PPDU
363 */
364 void SetHeSigHeader(const WifiTxVector& txVector);
365
366 /**
367 * Return true if the PPDU is a MU PPDU
368 * @return true if the PPDU is a MU PPDU
369 */
370 virtual bool IsMu() const;
371
372 /**
373 * Return true if the PPDU is a DL MU PPDU
374 * @return true if the PPDU is a DL MU PPDU
375 */
376 virtual bool IsDlMu() const;
377
378 /**
379 * Return true if the PPDU is an UL MU PPDU
380 * @return true if the PPDU is an UL MU PPDU
381 */
382 virtual bool IsUlMu() const;
383
384 HeSigHeader m_heSig; //!< the HE-SIG PHY header
385};
386
387/**
388 * @brief Stream insertion operator.
389 *
390 * @param os the stream
391 * @param flag the transmit power spectral density flag
392 * @returns a reference to the stream
393 */
394std::ostream& operator<<(std::ostream& os, const HePpdu::TxPsdFlag& flag);
395
396} // namespace ns3
397
398#endif /* HE_PPDU_H */
HE PPDU (11ax)
Definition he-ppdu.h:39
HeSigHeader m_heSig
the HE-SIG PHY header
Definition he-ppdu.h:384
void SetTxPsdFlag(TxPsdFlag flag) const
Definition he-ppdu.cc:511
WifiTxVector DoGetTxVector() const override
Get the TXVECTOR used to send the PPDU.
Definition he-ppdu.cc:167
virtual void SetTxVectorFromPhyHeaders(WifiTxVector &txVector) const
Fill in the TXVECTOR from PHY headers.
Definition he-ppdu.cc:176
void UpdateTxVectorForUlMu(const std::optional< WifiTxVector > &trigVector) const
Update the TXVECTOR for HE TB PPDUs, since the information to decode HE TB PPDUs is not available fro...
Definition he-ppdu.cc:518
Ptr< WifiPpdu > Copy() const override
Copy this instance.
Definition he-ppdu.cc:403
MHz_u GetTxChannelWidth() const override
Get the channel width over which the PPDU will effectively be transmitted.
Definition he-ppdu.cc:485
TxPsdFlag
The transmit power spectral density flag, namely used to correctly build PSDs for pre-HE and HE porti...
Definition he-ppdu.h:104
@ PSD_HE_PORTION
HE portion of an HE PPDU.
Definition he-ppdu.h:106
@ PSD_NON_HE_PORTION
Non-HE portion of an HE PPDU.
Definition he-ppdu.h:105
virtual bool IsDlMu() const
Return true if the PPDU is a DL MU PPDU.
Definition he-ppdu.cc:429
void SetHeMuUserInfos(WifiTxVector &txVector, const RuAllocation &ruAllocation, std::optional< Center26ToneRuIndication > center26ToneRuIndication, const HeSigBContentChannels &contentChannels, bool sigBCompression, uint8_t numMuMimoUsers) const
Reconstruct HeMuUserInfoMap from HE-SIG-B header.
Definition he-ppdu.cc:259
Time GetTxDuration() const override
Get the total transmission duration of the PPDU.
Definition he-ppdu.cc:381
virtual bool IsUlMu() const
Return true if the PPDU is an UL MU PPDU.
Definition he-ppdu.cc:435
static uint8_t GetNstsEncodingFromNss(uint8_t nss)
Convert number of spatial streams to NSTS field encoding in HE-SIG-A.
Definition he-ppdu.cc:969
static uint32_t GetSigBFieldSize(MHz_u channelWidth, const RuAllocation &ruAllocation, std::optional< Center26ToneRuIndication > center26ToneRuIndication, bool sigBCompression, std::size_t numMuMimoUsers)
Get variable length HE SIG-B field size.
Definition he-ppdu.cc:828
virtual WifiRu::RuSpec GetRuSpec(std::size_t ruAllocIndex, const std::vector< WifiRu::RuSpec > &ruSpecs, RuType ruType, std::size_t ruIndex, MHz_u bw) const
Get the RU specification that has been assigned a given user.
Definition he-ppdu.cc:226
void SetHeSigHeader(const WifiTxVector &txVector)
Fill in the HE-SIG header.
Definition he-ppdu.cc:121
static uint8_t GetNssFromNstsEncoding(uint8_t nsts)
Convert number of spatial streams from NSTS field encoding in HE-SIG-A.
Definition he-ppdu.cc:976
static Time GetGuardIntervalFromEncoding(uint8_t giAndNltfSize)
Convert guard interval from its encoding in HE-SIG-A.
Definition he-ppdu.cc:951
std::variant< std::monostate, HeSuSigHeader, HeTbSigHeader, HeMuSigHeader > HeSigHeader
type of the HE-SIG PHY header
Definition he-ppdu.h:97
virtual void SetPhyHeaders(const WifiTxVector &txVector, Time ppduDuration)
Fill in the PHY headers.
Definition he-ppdu.cc:94
std::string PrintPayload() const override
Print the payload of the PPDU.
Definition he-ppdu.cc:871
uint16_t GetStaId() const override
Get the ID of the STA that transmitted the PPDU for UL MU, SU_STA_ID otherwise.
Definition he-ppdu.cc:478
static HeSigBContentChannels GetHeSigBContentChannels(const WifiTxVector &txVector, uint8_t p20Index)
Get the HE SIG-B content channels for a given PPDU IEEE 802.11ax-2021 27.3.11.8.2 HE-SIG-B content ch...
Definition he-ppdu.cc:665
std::vector< std::vector< HeSigBUserSpecificField > > HeSigBContentChannels
HE SIG-B Content Channels.
Definition he-ppdu.h:50
WifiPpduType GetType() const override
Return the PPDU type (.
Definition he-ppdu.cc:409
TxPsdFlag GetTxPsdFlag() const
Definition he-ppdu.cc:505
static uint8_t GetMuMimoUsersEncoding(uint8_t nUsers)
Convert number of MU-MIMO users to its encoding in HE-SIG-A.
Definition he-ppdu.cc:982
static MHz_u GetChannelWidthMhzFromEncoding(uint8_t bandwidth)
Convert channel width expressed in MHz from bandwidth field encoding in HE-SIG-A.
Definition he-ppdu.cc:908
virtual bool IsMu() const
Return true if the PPDU is a MU PPDU.
Definition he-ppdu.cc:423
static std::pair< std::size_t, std::size_t > GetNumRusPerHeSigBContentChannel(MHz_u channelWidth, const RuAllocation &ruAllocation, std::optional< Center26ToneRuIndication > center26ToneRuIndication, bool sigBCompression, uint8_t numMuMimoUsers)
Get the number of STAs per HE-SIG-B content channel.
Definition he-ppdu.cc:554
HePpdu(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector, const WifiPhyOperatingChannel &channel, Time ppduDuration, uint64_t uid, bool instantiateHeaders=true)
Create an SU HE PPDU, storing a PSDU.
Definition he-ppdu.cc:71
static uint8_t GetChannelWidthEncodingFromMhz(MHz_u channelWidth)
Convert channel width expressed in MHz to bandwidth field encoding in HE-SIG-A.
Definition he-ppdu.cc:887
void SetLSigHeader(Time ppduDuration)
Fill in the L-SIG header.
Definition he-ppdu.cc:102
static uint8_t GetGuardIntervalAndNltfEncoding(Time guardInterval, uint8_t nltf)
Convert guard interval and NLTF to its encoding in HE-SIG-A.
Definition he-ppdu.cc:929
TxPsdFlag m_txPsdFlag
the transmit power spectral density flag
Definition he-ppdu.h:345
static uint8_t GetMuMimoUsersFromEncoding(uint8_t encoding)
Convert number of MU-MIMO users from its encoding in HE-SIG-A.
Definition he-ppdu.cc:989
OFDM PPDU (11a)
Definition ofdm-ppdu.h:36
Smart pointer class similar to boost::intrusive_ptr.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
Class that keeps track of all information about the current PHY operating channel.
Ptr< const WifiPsdu > GetPsdu() const
Get the payload of the PPDU.
Definition wifi-ppdu.cc:142
WifiPsdu stores an MPDU, S-MPDU or A-MPDU, by keeping header(s) and payload(s) separate for each cons...
Definition wifi-psdu.h:33
std::variant< HeRu::RuSpec, EhtRu::RuSpec > RuSpec
variant of the RU specification
Definition wifi-ru.h:27
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPpduType
The type of PPDU (SU, DL MU, or UL MU)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition angles.cc:148
RuType
The different Resource Unit (RU) types.
Definition wifi-types.h:98
double MHz_u
MHz weak type.
Definition wifi-units.h:31
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Definition wifi-ppdu.h:38
static constexpr uint16_t SU_STA_ID
STA_ID to identify a single user (SU)
Definition wifi-mode.h:24
constexpr size_t WIFI_MAX_NUM_HE_SIGB_CONTENT_CHANNELS
HE SIG-B Content Channels.
Definition he-ppdu.h:28
std::vector< uint16_t > RuAllocation
9 bits RU_ALLOCATION per 20 MHz
HE-SIG PHY header for HE MU PPDUs (HE-SIG-A1/A2/B)
Definition he-ppdu.h:79
uint8_t m_giLtfSize
GI+LTF Size field.
Definition he-ppdu.h:86
uint8_t m_bssColor
BSS color field.
Definition he-ppdu.h:81
HeSigBContentChannels m_contentChannels
HE SIG-B Content Channels.
Definition he-ppdu.h:91
RuAllocation m_ruAllocation
RU allocations that are going to be carried in SIG-B common subfields.
Definition he-ppdu.h:89
uint8_t m_sigBMcs
HE-SIG-B MCS.
Definition he-ppdu.h:83
uint8_t m_sigBCompression
SIG-B compression.
Definition he-ppdu.h:85
std::optional< Center26ToneRuIndication > m_center26ToneRuIndication
center 26 tone RU indication in SIG-B common subfields
Definition he-ppdu.h:93
uint8_t m_muMimoUsers
MU-MIMO users.
Definition he-ppdu.h:84
uint8_t m_bandwidth
Bandwidth field.
Definition he-ppdu.h:82
User Specific Fields in HE-SIG-Bs.
Definition he-ppdu.h:43
uint8_t nss
number of spatial streams
Definition he-ppdu.h:45
HE-SIG PHY header for HE SU PPDUs (HE-SIG-A1/A2)
Definition he-ppdu.h:56
uint8_t m_bssColor
BSS color field.
Definition he-ppdu.h:58
uint8_t m_mcs
MCS field.
Definition he-ppdu.h:59
uint8_t m_giLtfSize
GI+LTF Size field.
Definition he-ppdu.h:61
uint8_t m_bandwidth
Bandwidth field.
Definition he-ppdu.h:60
uint8_t m_format
Format bit.
Definition he-ppdu.h:57
HE-SIG PHY header for HE TB PPDUs (HE-SIG-A1/A2)
Definition he-ppdu.h:69
uint8_t m_format
Format bit.
Definition he-ppdu.h:70
uint8_t m_bandwidth
Bandwidth field.
Definition he-ppdu.h:72
uint8_t m_bssColor
BSS color field.
Definition he-ppdu.h:71