A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ht-capabilities.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2013
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Authors: Ghada Badawy <gbadawy@rim.com>
7 * Sébastien Deronne <sebastien.deronne@gmail.com>
8 */
9
10#include "ht-capabilities.h"
11
12namespace ns3
13{
14
16 : m_ldpc(0),
17 m_supportedChannelWidth(0),
18 m_smPowerSave(0),
19 m_greenField(0),
20 m_shortGuardInterval20(0),
21 m_shortGuardInterval40(0),
22 m_txStbc(0),
23 m_rxStbc(0),
24 m_htDelayedBlockAck(0),
25 m_maxAmsduLength(0),
26 m_dssMode40(0),
27 m_psmpSupport(0),
28 m_fortyMhzIntolerant(0),
29 m_lsigProtectionSupport(0),
30 m_maxAmpduLengthExponent(0),
31 m_minMpduStartSpace(0),
32 m_ampduReserved(0),
33 m_reservedMcsSet1(0),
34 m_rxHighestSupportedDataRate(0),
35 m_reservedMcsSet2(0),
36 m_txMcsSetDefined(0),
37 m_txRxMcsSetUnequal(0),
38 m_txMaxNSpatialStreams(0),
39 m_txUnequalModulation(0),
40 m_reservedMcsSet3(0),
41 m_pco(0),
42 m_pcoTransitionTime(0),
43 m_reservedExtendedCapabilities(0),
44 m_mcsFeedback(0),
45 m_htcSupport(0),
46 m_reverseDirectionResponder(0),
47 m_reservedExtendedCapabilities2(0),
48 m_implicitRxBfCapable(0),
49 m_rxStaggeredSoundingCapable(0),
50 m_txStaggeredSoundingCapable(0),
51 m_rxNdpCapable(0),
52 m_txNdpCapable(0),
53 m_implicitTxBfCapable(0),
54 m_calibration(0),
55 m_explicitCsiTxBfCapable(0),
56 m_explicitNoncompressedSteeringCapable(0),
57 m_explicitCompressedSteeringCapable(0),
58 m_explicitTxBfCsiFeedback(0),
59 m_explicitNoncompressedBfFeedbackCapable(0),
60 m_explicitCompressedBfFeedbackCapable(0),
61 m_minimalGrouping(0),
62 m_csiNBfAntennasSupported(0),
63 m_noncompressedSteeringNBfAntennasSupported(0),
64 m_compressedSteeringNBfAntennasSupported(0),
65 m_csiMaxNRowsBfSupported(0),
66 m_channelEstimationCapability(0),
67 m_reservedTxBf(0),
68 m_antennaSelectionCapability(0),
69 m_explicitCsiFeedbackBasedTxASelCapable(0),
70 m_antennaIndicesFeedbackBasedTxASelCapable(0),
71 m_explicitCsiFeedbackCapable(0),
72 m_antennaIndicesFeedbackCapable(0),
73 m_rxASelCapable(0),
74 m_txSoundingPpdusCapable(0),
75 m_reservedASel(0)
76{
77 for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
78 {
79 m_rxMcsBitmask[i] = 0;
80 }
81}
82
88
89void
90HtCapabilities::Print(std::ostream& os) const
91{
92 os << "HT Capabilities=[LDPC: " << +m_ldpc
93 << ", Supported Channel Width: " << +m_supportedChannelWidth
94 << ", SGI 20MHz: " << +m_shortGuardInterval20 << ", SGI 40MHz: " << +m_shortGuardInterval40
95 << ", Supported MCS Set: {";
96 for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
97 {
98 if (IsSupportedMcs(i))
99 {
100 os << +i << " ";
101 }
102 }
103 os << "}]";
104}
105
106void
108{
109 m_ldpc = ldpc;
110}
111
112void
113HtCapabilities::SetSupportedChannelWidth(uint8_t supportedChannelWidth)
114{
115 m_supportedChannelWidth = supportedChannelWidth;
116}
117
118void
120{
121 m_shortGuardInterval20 = shortGuardInterval;
122}
123
124void
126{
127 m_shortGuardInterval40 = shortGuardInterval;
128}
129
130void
131HtCapabilities::SetMaxAmsduLength(uint16_t maxAmsduLength)
132{
133 NS_ABORT_MSG_IF(maxAmsduLength != 3839 && maxAmsduLength != 7935,
134 "Invalid A-MSDU Max Length value");
135 m_maxAmsduLength = (maxAmsduLength == 3839 ? 0 : 1);
136}
137
138void
140{
141 m_lsigProtectionSupport = lSigProtection;
142}
143
144void
146{
147 for (uint8_t i = 0; i <= 3; i++)
148 {
149 if ((1UL << (13 + i)) - 1 == maxAmpduLength)
150 {
152 return;
153 }
154 }
155 NS_ABORT_MSG("Invalid A-MPDU Max Length value");
156}
157
158void
160{
161 m_rxMcsBitmask[index] = 1;
162}
163
164void
166{
167 m_rxHighestSupportedDataRate = maxSupportedRate;
168}
169
170void
172{
173 m_txMcsSetDefined = txMcsSetDefined;
174}
175
176void
177HtCapabilities::SetTxRxMcsSetUnequal(uint8_t txRxMcsSetUnequal)
178{
179 m_txRxMcsSetUnequal = txRxMcsSetUnequal;
180}
181
182void
183HtCapabilities::SetTxMaxNSpatialStreams(uint8_t maxTxSpatialStreams)
184{
185 m_txMaxNSpatialStreams = maxTxSpatialStreams - 1; // 0 for 1 SS, 1 for 2 SSs, etc
186}
187
188void
189HtCapabilities::SetTxUnequalModulation(uint8_t txUnequalModulation)
190{
191 m_txUnequalModulation = txUnequalModulation;
192}
193
194uint8_t
196{
197 return m_ldpc;
198}
199
200uint8_t
205
206uint8_t
211
212uint16_t
214{
215 if (m_maxAmsduLength == 0)
216 {
217 return 3839;
218 }
219 return 7935;
220}
221
224{
225 return (1UL << (13 + m_maxAmpduLengthExponent)) - 1;
226}
227
228bool
230{
231 return m_rxMcsBitmask[mcs] == 1;
232}
233
234uint8_t
236{
237 for (uint8_t nRx = 2; nRx <= 4; nRx++)
238 {
239 uint8_t maxMcs = (7 * nRx) + (nRx - 1);
240
241 for (uint8_t mcs = (nRx - 1) * 8; mcs <= maxMcs; mcs++)
242 {
243 if (!IsSupportedMcs(mcs))
244 {
245 return (nRx - 1);
246 }
247 }
248 }
249 return 4;
250}
251
252uint16_t
254{
255 return 26;
256}
257
258uint16_t
260{
261 uint16_t val = 0;
262 val |= m_ldpc & 0x01;
263 val |= (m_supportedChannelWidth & 0x01) << 1;
264 val |= (m_smPowerSave & 0x03) << 2;
265 val |= (m_greenField & 0x01) << 4;
266 val |= (m_shortGuardInterval20 & 0x01) << 5;
267 val |= (m_shortGuardInterval40 & 0x01) << 6;
268 val |= (m_txStbc & 0x01) << 7;
269 val |= (m_rxStbc & 0x03) << 8;
270 val |= (m_htDelayedBlockAck & 0x01) << 10;
271 val |= (m_maxAmsduLength & 0x01) << 11;
272 val |= (m_dssMode40 & 0x01) << 12;
273 val |= (m_psmpSupport & 0x01) << 13;
274 val |= (m_fortyMhzIntolerant & 0x01) << 14;
275 val |= (m_lsigProtectionSupport & 0x01) << 15;
276 return val;
277}
278
279void
281{
282 m_ldpc = ctrl & 0x01;
283 m_supportedChannelWidth = (ctrl >> 1) & 0x01;
284 m_smPowerSave = (ctrl >> 2) & 0x03;
285 m_greenField = (ctrl >> 4) & 0x01;
286 m_shortGuardInterval20 = (ctrl >> 5) & 0x01;
287 m_shortGuardInterval40 = (ctrl >> 6) & 0x01;
288 m_txStbc = (ctrl >> 7) & 0x01;
289 m_rxStbc = (ctrl >> 8) & 0x03;
290 m_htDelayedBlockAck = (ctrl >> 10) & 0x01;
291 m_maxAmsduLength = (ctrl >> 11) & 0x01;
292 m_dssMode40 = (ctrl >> 12) & 0x01;
293 m_psmpSupport = (ctrl >> 13) & 0x01;
294 m_fortyMhzIntolerant = (ctrl >> 14) & 0x01;
295 m_lsigProtectionSupport = (ctrl >> 15) & 0x01;
296}
297
298void
300{
301 m_maxAmpduLengthExponent = ctrl & 0x03;
302 m_minMpduStartSpace = (ctrl >> 2) & 0x1b;
303 m_ampduReserved = (ctrl >> 5) & 0xe0;
304}
305
306uint8_t
308{
309 uint8_t val = 0;
310 val |= m_maxAmpduLengthExponent & 0x03;
311 val |= (m_minMpduStartSpace & 0x1b) << 2;
312 val |= (m_ampduReserved & 0xe0) << 5;
313 return val;
314}
315
316void
317HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2)
318{
319 for (uint64_t i = 0; i < 77; i++)
320 {
321 if (i < 64)
322 {
323 m_rxMcsBitmask[i] = (ctrl1 >> i) & 0x01;
324 }
325 else
326 {
327 m_rxMcsBitmask[i] = (ctrl2 >> (i - 64)) & 0x01;
328 }
329 }
330 m_reservedMcsSet1 = (ctrl2 >> 13) & 0x07;
331 m_rxHighestSupportedDataRate = (ctrl2 >> 16) & 0x03ff;
332 m_reservedMcsSet2 = (ctrl2 >> 26) & 0x3f;
333 m_txMcsSetDefined = (ctrl2 >> 32) & 0x01;
334 m_txRxMcsSetUnequal = (ctrl2 >> 33) & 0x01;
335 m_txMaxNSpatialStreams = (ctrl2 >> 34) & 0x03;
336 m_txUnequalModulation = (ctrl2 >> 36) & 0x01;
337 m_reservedMcsSet3 = (ctrl2 >> 37) & 0x07ffffff;
338}
339
340uint64_t
342{
343 uint64_t val = 0;
344 for (uint64_t i = 63; i > 0; i--)
345 {
346 val = (val << 1) | (m_rxMcsBitmask[i] & 0x01);
347 }
348 val = (val << 1) | (m_rxMcsBitmask[0] & 0x01);
349 return val;
350}
351
352uint64_t
354{
355 uint64_t val = 0;
356 val = val | (m_reservedMcsSet3 & 0x07ffffff);
357 val = (val << 1) | (m_txUnequalModulation & 0x01);
358 val = (val << 2) | (m_txMaxNSpatialStreams & 0x03);
359 val = (val << 1) | (m_txRxMcsSetUnequal & 0x01);
360 val = (val << 1) | (m_txMcsSetDefined & 0x01);
361 val = (val << 6) | (m_reservedMcsSet2 & 0x3f);
362 val = (val << 10) | (m_rxHighestSupportedDataRate & 0x3ff);
363 val = (val << 3) | (m_reservedMcsSet1 & 0x07);
364
365 for (uint64_t i = 13; i > 0; i--)
366 {
367 val = (val << 1) | (m_rxMcsBitmask[i + 63] & 0x01);
368 }
369 return val;
370}
371
372uint16_t
374{
375 uint16_t val = 0;
376 val |= m_pco & 0x01;
377 val |= (m_pcoTransitionTime & 0x03) << 1;
378 val |= (m_reservedExtendedCapabilities & 0x1f) << 3;
379 val |= (m_mcsFeedback & 0x03) << 8;
380 val |= (m_htcSupport & 0x01) << 10;
381 val |= (m_reverseDirectionResponder & 0x01) << 11;
382 val |= (m_reservedExtendedCapabilities2 & 0x0f) << 12;
383 return val;
384}
385
386void
388{
389 m_pco = ctrl & 0x01;
390 m_pcoTransitionTime = (ctrl >> 1) & 0x03;
391 m_reservedExtendedCapabilities = (ctrl >> 3) & 0x1f;
392 m_mcsFeedback = (ctrl >> 8) & 0x03;
393 m_htcSupport = (ctrl >> 10) & 0x01;
394 m_reverseDirectionResponder = (ctrl >> 11) & 0x01;
395 m_reservedExtendedCapabilities2 = (ctrl >> 12) & 0x0f;
396}
397
400{
401 uint32_t val = 0;
402 val |= m_implicitRxBfCapable & 0x01;
403 val |= (m_rxStaggeredSoundingCapable & 0x01) << 1;
404 val |= (m_txStaggeredSoundingCapable & 0x01) << 2;
405 val |= (m_rxNdpCapable & 0x01) << 3;
406 val |= (m_txNdpCapable & 0x01) << 4;
407 val |= (m_implicitTxBfCapable & 0x01) << 5;
408 val |= (m_calibration & 0x03) << 6;
409 val |= (m_explicitCsiTxBfCapable & 0x01) << 8;
410 val |= (m_explicitNoncompressedSteeringCapable & 0x01) << 9;
411 val |= (m_explicitCompressedSteeringCapable & 0x01) << 10;
412 val |= (m_explicitTxBfCsiFeedback & 0x03) << 11;
413 val |= (m_explicitNoncompressedBfFeedbackCapable & 0x03) << 13;
414 val |= (m_explicitCompressedBfFeedbackCapable & 0x03) << 15;
415 val |= (m_minimalGrouping & 0x03) << 17;
416 val |= (m_csiNBfAntennasSupported & 0x03) << 19;
418 val |= (m_compressedSteeringNBfAntennasSupported & 0x03) << 23;
419 val |= (m_csiMaxNRowsBfSupported & 0x03) << 25;
420 val |= (m_channelEstimationCapability & 0x03) << 27;
421 val |= (m_reservedTxBf & 0x07) << 29;
422 return val;
423}
424
425void
427{
428 m_implicitRxBfCapable = ctrl & 0x01;
429 m_rxStaggeredSoundingCapable = (ctrl >> 1) & 0x01;
430 m_txStaggeredSoundingCapable = (ctrl >> 2) & 0x01;
431 m_rxNdpCapable = (ctrl >> 3) & 0x01;
432 m_txNdpCapable = (ctrl >> 4) & 0x01;
433 m_implicitTxBfCapable = (ctrl >> 5) & 0x01;
434 m_calibration = (ctrl >> 6) & 0x03;
435 m_explicitCsiTxBfCapable = (ctrl >> 8) & 0x01;
436 m_explicitNoncompressedSteeringCapable = (ctrl >> 9) & 0x01;
437 m_explicitCompressedSteeringCapable = (ctrl >> 10) & 0x01;
438 m_explicitTxBfCsiFeedback = (ctrl >> 11) & 0x03;
439 m_explicitNoncompressedBfFeedbackCapable = (ctrl >> 13) & 0x03;
440 m_explicitCompressedBfFeedbackCapable = (ctrl >> 15) & 0x03;
441 m_minimalGrouping = (ctrl >> 17) & 0x03;
442 m_csiNBfAntennasSupported = (ctrl >> 19) & 0x03;
444 m_compressedSteeringNBfAntennasSupported = (ctrl >> 23) & 0x03;
445 m_csiMaxNRowsBfSupported = (ctrl >> 25) & 0x03;
446 m_channelEstimationCapability = (ctrl >> 27) & 0x03;
447 m_reservedTxBf = (ctrl >> 29) & 0x07;
448}
449
450uint8_t
452{
453 uint8_t val = 0;
454 val |= m_antennaSelectionCapability & 0x01;
455 val |= (m_explicitCsiFeedbackBasedTxASelCapable & 0x01) << 1;
457 val |= (m_explicitCsiFeedbackCapable & 0x01) << 3;
458 val |= (m_antennaIndicesFeedbackCapable & 0x01) << 4;
459 val |= (m_rxASelCapable & 0x01) << 5;
460 val |= (m_txSoundingPpdusCapable & 0x01) << 6;
461 val |= (m_reservedASel & 0x01) << 7;
462 return val;
463}
464
465void
467{
468 m_antennaSelectionCapability = ctrl & 0x01;
469 m_explicitCsiFeedbackBasedTxASelCapable = (ctrl >> 1) & 0x01;
471 m_explicitCsiFeedbackCapable = (ctrl >> 3) & 0x01;
472 m_antennaIndicesFeedbackCapable = (ctrl >> 4) & 0x01;
473 m_rxASelCapable = (ctrl >> 5) & 0x01;
474 m_txSoundingPpdusCapable = (ctrl >> 6) & 0x01;
475 m_reservedASel = (ctrl >> 7) & 0x01;
476}
477
478void
480{
481 // write the corresponding value for each bit
482 start.WriteHtolsbU16(GetHtCapabilitiesInfo());
483 start.WriteU8(GetAmpduParameters());
484 start.WriteHtolsbU64(GetSupportedMcsSet1());
485 start.WriteHtolsbU64(GetSupportedMcsSet2());
486 start.WriteU16(GetExtendedHtCapabilities());
487 start.WriteU32(GetTxBfCapabilities());
488 start.WriteU8(GetAntennaSelectionCapabilities());
489}
490
491uint16_t
493{
494 Buffer::Iterator i = start;
495 uint16_t htinfo = i.ReadLsbtohU16();
496 uint8_t ampduparam = i.ReadU8();
497 uint64_t mcsset1 = i.ReadLsbtohU64();
498 uint64_t mcsset2 = i.ReadLsbtohU64();
499 uint16_t extendedcapabilities = i.ReadU16();
500 uint32_t txbfcapabilities = i.ReadU32();
501 uint8_t aselcapabilities = i.ReadU8();
502 SetHtCapabilitiesInfo(htinfo);
503 SetAmpduParameters(ampduparam);
504 SetSupportedMcsSet(mcsset1, mcsset2);
505 SetExtendedHtCapabilities(extendedcapabilities);
506 SetTxBfCapabilities(txbfcapabilities);
507 SetAntennaSelectionCapabilities(aselcapabilities);
508 return length;
509}
510
511} // namespace ns3
iterator in a Buffer instance
Definition buffer.h:89
uint16_t ReadLsbtohU16()
Definition buffer.cc:1053
uint64_t ReadLsbtohU64()
Definition buffer.cc:1083
uint32_t ReadU32()
Definition buffer.cc:955
uint16_t ReadU16()
Definition buffer.h:1024
uint8_t m_calibration
calibration
void SetLdpc(uint8_t ldpc)
Set the LDPC field.
uint8_t m_reservedExtendedCapabilities2
reserver extended capabilities 2
uint8_t m_htcSupport
HTC support.
uint8_t m_shortGuardInterval40
short guard interval 40 MHz
void SetTxRxMcsSetUnequal(uint8_t txRxMcsSetUnequal)
Set the transmit / receive MCS set unequal.
uint8_t m_shortGuardInterval20
short guard interval 20 MHz
uint16_t GetMaxAmsduLength() const
Return the maximum A-MSDU length.
void SetRxHighestSupportedDataRate(uint16_t maxSupportedRate)
Set the receive highest supported data rate.
uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override
Deserialize information (i.e., the body of the IE, not including the Element ID and length octets)
void SetLSigProtectionSupport(uint8_t lSigProtection)
Set the LSIG protection support.
uint16_t GetInformationFieldSize() const override
Length of serialized information (i.e., the length of the body of the IE, not including the Element I...
void SetMaxAmsduLength(uint16_t maxAmsduLength)
Set the maximum AMSDU length.
void SetExtendedHtCapabilities(uint16_t ctrl)
Set the Extended HT Capabilities field in the HT Capabilities information element.
void SetAmpduParameters(uint8_t ctrl)
Set the A-MPDU Parameters field in the HT Capabilities information element.
uint8_t GetSupportedChannelWidth() const
Return the supported channel width.
uint8_t GetRxHighestSupportedAntennas() const
Return the receive highest supported antennas.
uint8_t m_explicitCompressedBfFeedbackCapable
explicit compressed BF feedback capable
uint8_t m_compressedSteeringNBfAntennasSupported
compressed steering NBF antenna supported
void SetTxMaxNSpatialStreams(uint8_t maxTxSpatialStreams)
Set the transmit maximum N spatial streams.
uint8_t m_rxStaggeredSoundingCapable
receive staggered sounding capable
uint8_t m_reservedTxBf
reserved transmit BF
uint8_t m_txMcsSetDefined
transmit MCS set defined
uint8_t m_maxAmpduLengthExponent
maximum A-MPDU length
void Print(std::ostream &os) const override
Generate human-readable form of IE.
uint64_t GetSupportedMcsSet1() const
Return the first 64 bytes of the Supported MCS Set field in the HT Capabilities information element.
uint8_t m_txSoundingPpdusCapable
sounding PPDUS capable
void SetAntennaSelectionCapabilities(uint8_t ctrl)
Set the the Antenna Selection (ASEL) Capabilities field in the HT Capabilities information element.
void SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2)
Set the Supported MCS Set field in the HT Capabilities information element.
uint8_t m_dssMode40
DSS mode 40.
WifiInformationElementId ElementId() const override
Get the wifi information element ID.
uint8_t m_minimalGrouping
minimal grouping
uint8_t m_minMpduStartSpace
minimum MPDU start space
uint8_t m_txRxMcsSetUnequal
transmit / receive MCS set unequal
void SetTxBfCapabilities(uint32_t ctrl)
Set the Transmit Beamforming (TxBF) Capabilities field in the HT Capabilities information element.
uint8_t m_txStaggeredSoundingCapable
transmit staggered sounding capable
uint8_t m_maxAmsduLength
maximum A-MSDU length
uint8_t m_implicitTxBfCapable
implicit transmit BF capable
uint8_t m_htDelayedBlockAck
HT delayed block ack.
void SetShortGuardInterval20(uint8_t shortGuardInterval)
Set the short guard interval 20 field.
uint8_t m_csiMaxNRowsBfSupported
CSI maximum number rows BF supported.
uint8_t m_explicitTxBfCsiFeedback
explicit transmit BF CSI feedback
uint8_t GetLdpc() const
Return LDPC.
uint8_t m_rxNdpCapable
receive NDP capable
uint8_t m_rxMcsBitmask[MAX_SUPPORTED_MCS]
receive MCS bitmask
void SetHtCapabilitiesInfo(uint16_t ctrl)
Set the HT Capabilities Info field in the HT Capabilities information element.
void SetTxUnequalModulation(uint8_t txUnequalModulation)
Set the transmit unequal modulation.
uint8_t m_reverseDirectionResponder
reverse direction responder
uint8_t m_txNdpCapable
transmit NDP capable
void SetTxMcsSetDefined(uint8_t txMcsSetDefined)
Set the transmit MCS set defined.
uint8_t m_txUnequalModulation
transmit unequal modulation
uint8_t m_reservedExtendedCapabilities
reserved extended capabilities
uint8_t m_lsigProtectionSupport
L-SIG protection support.
uint16_t GetHtCapabilitiesInfo() const
Return the HT Capabilities Info field in the HT Capabilities information element.
uint8_t GetAntennaSelectionCapabilities() const
Return the Antenna Selection (ASEL) Capabilities field in the HT Capabilities information element.
uint8_t m_explicitCsiFeedbackCapable
explicit CSI feedback capable
uint8_t m_txMaxNSpatialStreams
transmit maximum number spatial streams
uint8_t m_explicitNoncompressedBfFeedbackCapable
explicit non compressed BF feedback capable
void SerializeInformationField(Buffer::Iterator start) const override
Serialize information (i.e., the body of the IE, not including the Element ID and length octets)
uint8_t m_pcoTransitionTime
PCO transition time.
uint64_t GetSupportedMcsSet2() const
Return the last 64 bytes of the Supported MCS Set field in the HT Capabilities information element.
uint8_t m_reservedMcsSet2
reserved MCS set 2
uint32_t GetTxBfCapabilities() const
Return the Transmit Beamforming (TxBF) Capabilities field in the HT Capabilities information element.
uint8_t m_antennaIndicesFeedbackBasedTxASelCapable
antenna indices feedback based transmit antenna selection capable
uint8_t m_explicitNoncompressedSteeringCapable
explicit non compressed steering capable
void SetRxMcsBitmask(uint8_t index)
Set the receive MCS bitmask.
uint8_t m_implicitRxBfCapable
implicit receive BF capable
void SetSupportedChannelWidth(uint8_t supportedChannelWidth)
Set the supported channel width field.
bool IsSupportedMcs(uint8_t mcs) const
Return the is MCS supported flag.
uint8_t GetAmpduParameters() const
Return the A-MPDU Parameters field in the HT Capabilities information element.
uint8_t m_mcsFeedback
MCS feedback.
uint8_t m_fortyMhzIntolerant
40 MHz intolerant
uint8_t m_channelEstimationCapability
channel estimation capability
uint8_t m_rxASelCapable
receive antenna selection capable
uint16_t m_rxHighestSupportedDataRate
receive highest supported data rate
uint8_t m_csiNBfAntennasSupported
CSI NBF antenna supported.
uint8_t m_antennaSelectionCapability
antenna selection capability
uint8_t m_txStbc
transmit STBC
uint16_t GetExtendedHtCapabilities() const
Return the Extended HT Capabilities field in the HT Capabilities information element.
uint8_t m_ampduReserved
A-MPDU reserved.
uint8_t m_antennaIndicesFeedbackCapable
antenna indices feedback capable
uint8_t m_supportedChannelWidth
supported channel width
uint32_t m_reservedMcsSet3
reserved MCS set 3
uint8_t m_greenField
Greenfield.
uint32_t GetMaxAmpduLength() const
Return the maximum A-MPDU length.
uint8_t GetShortGuardInterval20() const
Return the short guard interval 20 value.
uint8_t m_noncompressedSteeringNBfAntennasSupported
non compressed steering NBF antenna supported
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
uint8_t m_explicitCsiFeedbackBasedTxASelCapable
explicit CSI feedback based transmit antenna selection capable
void SetShortGuardInterval40(uint8_t shortGuardInterval)
Set the short guard interval 40 field.
uint8_t m_psmpSupport
PSMP support.
uint8_t m_reservedMcsSet1
reserved MCS set 1
uint8_t m_explicitCsiTxBfCapable
explicit CSI transmit BF capable
uint8_t m_explicitCompressedSteeringCapable
explicit compressed steering capable
uint8_t m_reservedASel
reserved ASEL
uint8_t m_rxStbc
receive STBC
uint8_t m_smPowerSave
SM power save.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition abort.h:38
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition abort.h:97
#define MAX_SUPPORTED_MCS
This defines the maximum number of supported MCSs that a STA is allowed to have.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
#define IE_HT_CAPABILITIES