A Discrete-Event Network Simulator
API
ht-capabilities.cc
Go to the documentation of this file.
1/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2013
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 * Authors: Ghada Badawy <gbadawy@rim.com>
19 * S├ębastien Deronne <sebastien.deronne@gmail.com>
20 */
21
22#include "ht-capabilities.h"
23
24namespace ns3 {
25
27 : m_ldpc (0),
28 m_supportedChannelWidth (0),
29 m_smPowerSave (0),
30 m_greenField (0),
31 m_shortGuardInterval20 (0),
32 m_shortGuardInterval40 (0),
33 m_txStbc (0),
34 m_rxStbc (0),
35 m_htDelayedBlockAck (0),
36 m_maxAmsduLength (0),
37 m_dssMode40 (0),
38 m_psmpSupport (0),
39 m_fortyMhzIntolerant (0),
40 m_lsigProtectionSupport (0),
41 m_maxAmpduLengthExponent (0),
42 m_minMpduStartSpace (0),
43 m_ampduReserved (0),
44 m_reservedMcsSet1 (0),
45 m_rxHighestSupportedDataRate (0),
46 m_reservedMcsSet2 (0),
47 m_txMcsSetDefined (0),
48 m_txRxMcsSetUnequal (0),
49 m_txMaxNSpatialStreams (0),
50 m_txUnequalModulation (0),
51 m_reservedMcsSet3 (0),
52 m_pco (0),
53 m_pcoTransitionTime (0),
54 m_reservedExtendedCapabilities (0),
55 m_mcsFeedback (0),
56 m_htcSupport (0),
57 m_reverseDirectionResponder (0),
58 m_reservedExtendedCapabilities2 (0),
59 m_implicitRxBfCapable (0),
60 m_rxStaggeredSoundingCapable (0),
61 m_txStaggeredSoundingCapable (0),
62 m_rxNdpCapable (0),
63 m_txNdpCapable (0),
64 m_implicitTxBfCapable (0),
65 m_calibration (0),
66 m_explicitCsiTxBfCapable (0),
67 m_explicitNoncompressedSteeringCapable (0),
68 m_explicitCompressedSteeringCapable (0),
69 m_explicitTxBfCsiFeedback (0),
70 m_explicitNoncompressedBfFeedbackCapable (0),
71 m_explicitCompressedBfFeedbackCapable (0),
72 m_minimalGrouping (0),
73 m_csiNBfAntennasSupported (0),
74 m_noncompressedSteeringNBfAntennasSupported (0),
75 m_compressedSteeringNBfAntennasSupported (0),
76 m_csiMaxNRowsBfSupported (0),
77 m_channelEstimationCapability (0),
78 m_reservedTxBf (0),
79 m_antennaSelectionCapability (0),
80 m_explicitCsiFeedbackBasedTxASelCapable (0),
81 m_antennaIndicesFeedbackBasedTxASelCapable (0),
82 m_explicitCsiFeedbackCapable (0),
83 m_antennaIndicesFeedbackCapable (0),
84 m_rxASelCapable (0),
85 m_txSoundingPpdusCapable (0),
86 m_reservedASel (0)
87{
88 for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
89 {
90 m_rxMcsBitmask[i] = 0;
91 }
92}
93
96{
97 return IE_HT_CAPABILITIES;
98}
99
100void
102{
103 m_ldpc = ldpc;
104}
105
106void
107HtCapabilities::SetSupportedChannelWidth (uint8_t supportedChannelWidth)
108{
109 m_supportedChannelWidth = supportedChannelWidth;
110}
111
112void
113HtCapabilities::SetShortGuardInterval20 (uint8_t shortGuardInterval)
114{
115 m_shortGuardInterval20 = shortGuardInterval;
116}
117
118void
119HtCapabilities::SetShortGuardInterval40 (uint8_t shortGuardInterval)
120{
121 m_shortGuardInterval40 = shortGuardInterval;
122}
123
124void
125HtCapabilities::SetMaxAmsduLength (uint16_t maxAmsduLength)
126{
127 NS_ABORT_MSG_IF (maxAmsduLength != 3839 && maxAmsduLength != 7935,
128 "Invalid A-MSDU Max Length value");
129 m_maxAmsduLength = (maxAmsduLength == 3839 ? 0 : 1);
130}
131
132void
134{
135 m_lsigProtectionSupport = lSigProtection;
136}
137
138void
140{
141 for (uint8_t i = 0; i <= 3; i++)
142 {
143 if ((1ul << (13 + i)) - 1 == maxAmpduLength)
144 {
146 return;
147 }
148 }
149 NS_ABORT_MSG ("Invalid A-MPDU Max Length value");
150}
151
152void
154{
155 m_rxMcsBitmask[index] = 1;
156}
157
158void
160{
161 m_rxHighestSupportedDataRate = maxSupportedRate;
162}
163
164void
165HtCapabilities::SetTxMcsSetDefined (uint8_t txMcsSetDefined)
166{
167 m_txMcsSetDefined = txMcsSetDefined;
168}
169
170void
171HtCapabilities::SetTxRxMcsSetUnequal (uint8_t txRxMcsSetUnequal)
172{
173 m_txRxMcsSetUnequal = txRxMcsSetUnequal;
174}
175
176void
177HtCapabilities::SetTxMaxNSpatialStreams (uint8_t maxTxSpatialStreams)
178{
179 m_txMaxNSpatialStreams = maxTxSpatialStreams - 1; //0 for 1 SS, 1 for 2 SSs, etc
180}
181
182void
183HtCapabilities::SetTxUnequalModulation (uint8_t txUnequalModulation)
184{
185 m_txUnequalModulation = txUnequalModulation;
186}
187
188uint8_t
190{
191 return m_ldpc;
192}
193
194uint8_t
196{
198}
199
200uint8_t
202{
204}
205
206uint16_t
208{
209 if (m_maxAmsduLength == 0)
210 {
211 return 3839;
212 }
213 return 7935;
214}
215
218{
219 return (1ul << (13 + m_maxAmpduLengthExponent)) - 1;
220}
221
222bool
224{
225 if (m_rxMcsBitmask[mcs] == 1)
226 {
227 return true;
228 }
229 return false;
230}
231
232uint8_t
234{
235 for (uint8_t nRx = 2; nRx <= 4; nRx++)
236 {
237 for (uint8_t mcs = (nRx - 1) * 8; mcs <= ((7 * nRx) + (nRx - 1)); mcs++)
238 {
239 if (IsSupportedMcs (mcs) == false)
240 {
241 return (nRx - 1);
242 }
243 }
244 }
245 return 4;
246}
247
248uint16_t
250{
251 return 26;
252}
253
254uint16_t
256{
257 uint16_t val = 0;
258 val |= m_ldpc & 0x01;
259 val |= (m_supportedChannelWidth & 0x01) << 1;
260 val |= (m_smPowerSave & 0x03) << 2;
261 val |= (m_greenField & 0x01) << 4;
262 val |= (m_shortGuardInterval20 & 0x01) << 5;
263 val |= (m_shortGuardInterval40 & 0x01) << 6;
264 val |= (m_txStbc & 0x01) << 7;
265 val |= (m_rxStbc & 0x03) << 8;
266 val |= (m_htDelayedBlockAck & 0x01) << 10;
267 val |= (m_maxAmsduLength & 0x01) << 11;
268 val |= (m_dssMode40 & 0x01) << 12;
269 val |= (m_psmpSupport & 0x01) << 13;
270 val |= (m_fortyMhzIntolerant & 0x01) << 14;
271 val |= (m_lsigProtectionSupport & 0x01) << 15;
272 return val;
273}
274
275void
277{
278 m_ldpc = ctrl & 0x01;
279 m_supportedChannelWidth = (ctrl >> 1) & 0x01;
280 m_smPowerSave = (ctrl >> 2) & 0x03;
281 m_greenField = (ctrl >> 4) & 0x01;
282 m_shortGuardInterval20 = (ctrl >> 5) & 0x01;
283 m_shortGuardInterval40 = (ctrl >> 6) & 0x01;
284 m_txStbc = (ctrl >> 7) & 0x01;
285 m_rxStbc = (ctrl >> 8) & 0x03;
286 m_htDelayedBlockAck = (ctrl >> 10) & 0x01;
287 m_maxAmsduLength = (ctrl >> 11) & 0x01;
288 m_dssMode40 = (ctrl >> 12) & 0x01;
289 m_psmpSupport = (ctrl >> 13) & 0x01;
290 m_fortyMhzIntolerant = (ctrl >> 14) & 0x01;
291 m_lsigProtectionSupport = (ctrl >> 15) & 0x01;
292}
293
294void
296{
297 m_maxAmpduLengthExponent = ctrl & 0x03;
298 m_minMpduStartSpace = (ctrl >> 2) & 0x1b;
299 m_ampduReserved = (ctrl >> 5) & 0xe0;
300}
301
302uint8_t
304{
305 uint8_t val = 0;
306 val |= m_maxAmpduLengthExponent & 0x03;
307 val |= (m_minMpduStartSpace & 0x1b) << 2;
308 val |= (m_ampduReserved & 0xe0) << 5;
309 return val;
310}
311
312void
313HtCapabilities::SetSupportedMcsSet (uint64_t ctrl1, uint64_t ctrl2)
314{
315 for (uint64_t i = 0; i < 77; i++)
316 {
317 if (i < 64)
318 {
319 m_rxMcsBitmask[i] = (ctrl1 >> i) & 0x01;
320 }
321 else
322 {
323 m_rxMcsBitmask[i] = (ctrl2 >> (i - 64)) & 0x01;
324 }
325 }
326 m_reservedMcsSet1 = (ctrl2 >> 13) & 0x07;
327 m_rxHighestSupportedDataRate = (ctrl2 >> 16) & 0x03ff;
328 m_reservedMcsSet2 = (ctrl2 >> 26) & 0x3f;
329 m_txMcsSetDefined = (ctrl2 >> 32) & 0x01;
330 m_txRxMcsSetUnequal = (ctrl2 >> 33) & 0x01;
331 m_txMaxNSpatialStreams = (ctrl2 >> 34) & 0x03;
332 m_txUnequalModulation = (ctrl2 >> 36) & 0x01;
333 m_reservedMcsSet3 = (ctrl2 >> 37) & 0x07ffffff;
334}
335
336uint64_t
338{
339 uint64_t val = 0;
340 for (uint64_t i = 63; i > 0; i--)
341 {
342 val = (val << 1) | (m_rxMcsBitmask[i] & 0x01);
343 }
344 val = (val << 1) | (m_rxMcsBitmask[0] & 0x01);
345 return val;
346}
347
348uint64_t
350{
351 uint64_t val = 0;
352 val = val | (m_reservedMcsSet3 & 0x07ffffff);
353 val = (val << 1) | (m_txUnequalModulation & 0x01);
354 val = (val << 2) | (m_txMaxNSpatialStreams & 0x03);
355 val = (val << 1) | (m_txRxMcsSetUnequal & 0x01);
356 val = (val << 1) | (m_txMcsSetDefined & 0x01);
357 val = (val << 6) | (m_reservedMcsSet2 & 0x3f);
358 val = (val << 10) | (m_rxHighestSupportedDataRate & 0x3ff);
359 val = (val << 3) | (m_reservedMcsSet1 & 0x07);
360
361 for (uint64_t i = 13; i > 0; i--)
362 {
363 val = (val << 1) | ( m_rxMcsBitmask[i + 63] & 0x01);
364 }
365 return val;
366}
367
368uint16_t
370{
371 uint16_t val = 0;
372 val |= m_pco & 0x01;
373 val |= (m_pcoTransitionTime & 0x03) << 1;
374 val |= (m_reservedExtendedCapabilities & 0x1f) << 3;
375 val |= (m_mcsFeedback & 0x03) << 8;
376 val |= (m_htcSupport & 0x01) << 10;
377 val |= (m_reverseDirectionResponder & 0x01) << 11;
378 val |= (m_reservedExtendedCapabilities2 & 0x0f) << 12;
379 return val;
380}
381
382void
384{
385 m_pco = ctrl & 0x01;
386 m_pcoTransitionTime = (ctrl >> 1) & 0x03;
387 m_reservedExtendedCapabilities = (ctrl >> 3) & 0x1f;
388 m_mcsFeedback = (ctrl >> 8) & 0x03;
389 m_htcSupport = (ctrl >> 10) & 0x01;
390 m_reverseDirectionResponder = (ctrl >> 11) & 0x01;
391 m_reservedExtendedCapabilities2 = (ctrl >> 12) & 0x0f;
392}
393
396{
397 uint32_t val = 0;
398 val |= m_implicitRxBfCapable & 0x01;
399 val |= (m_rxStaggeredSoundingCapable & 0x01) << 1;
400 val |= (m_txStaggeredSoundingCapable & 0x01) << 2;
401 val |= (m_rxNdpCapable & 0x01) << 3;
402 val |= (m_txNdpCapable & 0x01) << 4;
403 val |= (m_implicitTxBfCapable & 0x01) << 5;
404 val |= (m_calibration & 0x03) << 6;
405 val |= (m_explicitCsiTxBfCapable & 0x01) << 8;
406 val |= (m_explicitNoncompressedSteeringCapable & 0x01) << 9;
407 val |= (m_explicitCompressedSteeringCapable & 0x01) << 10;
408 val |= (m_explicitTxBfCsiFeedback & 0x03) << 11;
409 val |= (m_explicitNoncompressedBfFeedbackCapable & 0x03) << 13;
410 val |= (m_explicitCompressedBfFeedbackCapable & 0x03) << 15;
411 val |= (m_minimalGrouping & 0x03) << 17;
412 val |= (m_csiNBfAntennasSupported & 0x03) << 19;
414 val |= (m_compressedSteeringNBfAntennasSupported & 0x03) << 23;
415 val |= (m_csiMaxNRowsBfSupported & 0x03) << 25;
416 val |= (m_channelEstimationCapability & 0x03) << 27;
417 val |= (m_reservedTxBf & 0x07) << 29;
418 return val;
419}
420
421void
423{
424 m_implicitRxBfCapable = ctrl & 0x01;
425 m_rxStaggeredSoundingCapable = (ctrl >> 1) & 0x01;
426 m_txStaggeredSoundingCapable = (ctrl >> 2) & 0x01;
427 m_rxNdpCapable = (ctrl >> 3) & 0x01;
428 m_txNdpCapable = (ctrl >> 4) & 0x01;
429 m_implicitTxBfCapable = (ctrl >> 5) & 0x01;
430 m_calibration = (ctrl >> 6) & 0x03;
431 m_explicitCsiTxBfCapable = (ctrl >> 8) & 0x01;
432 m_explicitNoncompressedSteeringCapable = (ctrl >> 9) & 0x01;
433 m_explicitCompressedSteeringCapable = (ctrl >> 10) & 0x01;
434 m_explicitTxBfCsiFeedback = (ctrl >> 11) & 0x03;
435 m_explicitNoncompressedBfFeedbackCapable = (ctrl >> 13) & 0x03;
436 m_explicitCompressedBfFeedbackCapable = (ctrl >> 15) & 0x03;
437 m_minimalGrouping = (ctrl >> 17) & 0x03;
438 m_csiNBfAntennasSupported = (ctrl >> 19) & 0x03;
440 m_compressedSteeringNBfAntennasSupported = (ctrl >> 23) & 0x03;
441 m_csiMaxNRowsBfSupported = (ctrl >> 25) & 0x03;
442 m_channelEstimationCapability = (ctrl >> 27) & 0x03;
443 m_reservedTxBf = (ctrl >> 29) & 0x07;
444}
445
446uint8_t
448{
449 uint8_t val = 0;
450 val |= m_antennaSelectionCapability & 0x01;
451 val |= (m_explicitCsiFeedbackBasedTxASelCapable & 0x01) << 1;
453 val |= (m_explicitCsiFeedbackCapable & 0x01) << 3;
454 val |= (m_antennaIndicesFeedbackCapable & 0x01) << 4;
455 val |= (m_rxASelCapable & 0x01) << 5;
456 val |= (m_txSoundingPpdusCapable & 0x01) << 6;
457 val |= (m_reservedASel & 0x01) << 7;
458 return val;
459}
460
461void
463{
464 m_antennaSelectionCapability = ctrl & 0x01;
465 m_explicitCsiFeedbackBasedTxASelCapable = (ctrl >> 1) & 0x01;
467 m_explicitCsiFeedbackCapable = (ctrl >> 3) & 0x01;
468 m_antennaIndicesFeedbackCapable = (ctrl >> 4) & 0x01;
469 m_rxASelCapable = (ctrl >> 5) & 0x01;
470 m_txSoundingPpdusCapable = (ctrl >> 6) & 0x01;
471 m_reservedASel = (ctrl >> 7) & 0x01;
472}
473
474void
476{
477 //write the corresponding value for each bit
478 start.WriteHtolsbU16 (GetHtCapabilitiesInfo ());
479 start.WriteU8 (GetAmpduParameters ());
480 start.WriteHtolsbU64 (GetSupportedMcsSet1 ());
481 start.WriteHtolsbU64 (GetSupportedMcsSet2 ());
482 start.WriteU16 (GetExtendedHtCapabilities ());
483 start.WriteU32 (GetTxBfCapabilities ());
485}
486
487uint16_t
489 uint16_t length)
490{
492 uint16_t htinfo = i.ReadLsbtohU16 ();
493 uint8_t ampduparam = i.ReadU8 ();
494 uint64_t mcsset1 = i.ReadLsbtohU64 ();
495 uint64_t mcsset2 = i.ReadLsbtohU64 ();
496 uint16_t extendedcapabilities = i.ReadU16 ();
497 uint32_t txbfcapabilities = i.ReadU32 ();
498 uint8_t aselcapabilities = i.ReadU8 ();
499 SetHtCapabilitiesInfo (htinfo);
500 SetAmpduParameters (ampduparam);
501 SetSupportedMcsSet (mcsset1, mcsset2);
502 SetExtendedHtCapabilities (extendedcapabilities);
503 SetTxBfCapabilities (txbfcapabilities);
504 SetAntennaSelectionCapabilities (aselcapabilities);
505 return length;
506}
507
508std::ostream &
509operator << (std::ostream &os, const HtCapabilities &htcapabilities)
510{
511 os << bool (htcapabilities.GetLdpc ())
512 << "|" << bool (htcapabilities.GetSupportedChannelWidth ())
513 << "|" << bool (htcapabilities.GetShortGuardInterval20 ()) << "|";
514 for (uint8_t i = 0; i < MAX_SUPPORTED_MCS; i++)
515 {
516 os << htcapabilities.IsSupportedMcs (i) << " ";
517 }
518 return os;
519}
520
521} //namespace ns3
iterator in a Buffer instance
Definition: buffer.h:99
uint16_t ReadU16(void)
Definition: buffer.h:1029
uint8_t ReadU8(void)
Definition: buffer.h:1021
uint16_t ReadLsbtohU16(void)
Definition: buffer.cc:1066
uint64_t ReadLsbtohU64(void)
Definition: buffer.cc:1094
uint32_t ReadU32(void)
Definition: buffer.cc:973
The HT Capabilities Information Element.
uint8_t m_calibration
calibration
uint8_t GetShortGuardInterval20(void) const
Return the short guard interval 20 value.
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 GetAntennaSelectionCapabilities(void) const
Return the Antenna Selection (ASEL) Capabilities field in the HT Capabilities information element.
uint8_t m_shortGuardInterval20
short guard interval 20 MHz
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 m_explicitCompressedBfFeedbackCapable
explicit compressed BF feedback capable
uint8_t m_compressedSteeringNBfAntennasSupported
compressed steering NBF antenna supported
uint64_t GetSupportedMcsSet1(void) const
Return the first 64 bytes of the Supported MCS Set field in the HT Capabilities information element.
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
uint8_t GetAmpduParameters(void) const
Return the A-MPDU Parameters 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.
uint64_t GetSupportedMcsSet2(void) const
Return the last 64 bytes of the Supported MCS Set field in the HT Capabilities information element.
uint32_t GetTxBfCapabilities(void) const
Return the Transmit Beamforming (TxBF) Capabilities field in the HT Capabilities information element.
uint16_t GetExtendedHtCapabilities(void) const
Return the Extended HT Capabilities 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 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
uint32_t GetMaxAmpduLength(void) const
Return the maximum A-MPDU length.
uint16_t GetHtCapabilitiesInfo(void) const
Return the HT Capabilities Info field in the HT Capabilities information element.
uint8_t m_txNdpCapable
transmit NDP capable
uint8_t GetLdpc(void) const
Return LDPC.
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.
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.
uint8_t m_reservedMcsSet2
reserved MCS set 2
uint16_t GetMaxAmsduLength(void) const
Return the maximum A-MSDU length.
uint8_t m_antennaIndicesFeedbackBasedTxASelCapable
antenna indices feedback based transmit antenna selection capable
uint8_t m_explicitNoncompressedSteeringCapable
explicit non compressed steeering 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 GetSupportedChannelWidth(void) const
Return the supported channel width.
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
uint8_t m_ampduReserved
A-MPDU reserved.
uint8_t m_antennaIndicesFeedbackCapable
antenna indices feedback capable
uint8_t m_supportedChannelWidth
supported channel width
uint8_t GetRxHighestSupportedAntennas(void) const
Return the receive highest supported antennas.
uint32_t m_reservedMcsSet3
reserved MCS set 3
uint8_t m_greenField
Greenfield.
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 steeering 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:50
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition: abort.h:108
#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.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
def start()
Definition: core.py:1852
#define IE_HT_CAPABILITIES