A Discrete-Event Network Simulator
API
ht-capabilities.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Authors: Ghada Badawy <gbadawy@rim.com>
18  * Sébastien Deronne <sebastien.deronne@gmail.com>
19  */
20 
21 #include "ht-capabilities.h"
22 
23 namespace ns3
24 {
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 
100 void
102 {
103  m_ldpc = ldpc;
104 }
105 
106 void
107 HtCapabilities::SetSupportedChannelWidth(uint8_t supportedChannelWidth)
108 {
109  m_supportedChannelWidth = supportedChannelWidth;
110 }
111 
112 void
113 HtCapabilities::SetShortGuardInterval20(uint8_t shortGuardInterval)
114 {
115  m_shortGuardInterval20 = shortGuardInterval;
116 }
117 
118 void
119 HtCapabilities::SetShortGuardInterval40(uint8_t shortGuardInterval)
120 {
121  m_shortGuardInterval40 = shortGuardInterval;
122 }
123 
124 void
125 HtCapabilities::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 
132 void
134 {
135  m_lsigProtectionSupport = lSigProtection;
136 }
137 
138 void
139 HtCapabilities::SetMaxAmpduLength(uint32_t maxAmpduLength)
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 
152 void
154 {
155  m_rxMcsBitmask[index] = 1;
156 }
157 
158 void
160 {
161  m_rxHighestSupportedDataRate = maxSupportedRate;
162 }
163 
164 void
165 HtCapabilities::SetTxMcsSetDefined(uint8_t txMcsSetDefined)
166 {
167  m_txMcsSetDefined = txMcsSetDefined;
168 }
169 
170 void
171 HtCapabilities::SetTxRxMcsSetUnequal(uint8_t txRxMcsSetUnequal)
172 {
173  m_txRxMcsSetUnequal = txRxMcsSetUnequal;
174 }
175 
176 void
177 HtCapabilities::SetTxMaxNSpatialStreams(uint8_t maxTxSpatialStreams)
178 {
179  m_txMaxNSpatialStreams = maxTxSpatialStreams - 1; // 0 for 1 SS, 1 for 2 SSs, etc
180 }
181 
182 void
183 HtCapabilities::SetTxUnequalModulation(uint8_t txUnequalModulation)
184 {
185  m_txUnequalModulation = txUnequalModulation;
186 }
187 
188 uint8_t
190 {
191  return m_ldpc;
192 }
193 
194 uint8_t
196 {
198 }
199 
200 uint8_t
202 {
203  return m_shortGuardInterval20;
204 }
205 
206 uint16_t
208 {
209  if (m_maxAmsduLength == 0)
210  {
211  return 3839;
212  }
213  return 7935;
214 }
215 
216 uint32_t
218 {
219  return (1UL << (13 + m_maxAmpduLengthExponent)) - 1;
220 }
221 
222 bool
224 {
225  if (m_rxMcsBitmask[mcs] == 1)
226  {
227  return true;
228  }
229  return false;
230 }
231 
232 uint8_t
234 {
235  for (uint8_t nRx = 2; nRx <= 4; nRx++)
236  {
237  uint8_t maxMcs = (7 * nRx) + (nRx - 1);
238 
239  for (uint8_t mcs = (nRx - 1) * 8; mcs <= maxMcs; mcs++)
240  {
241  if (IsSupportedMcs(mcs) == false)
242  {
243  return (nRx - 1);
244  }
245  }
246  }
247  return 4;
248 }
249 
250 uint16_t
252 {
253  return 26;
254 }
255 
256 uint16_t
258 {
259  uint16_t val = 0;
260  val |= m_ldpc & 0x01;
261  val |= (m_supportedChannelWidth & 0x01) << 1;
262  val |= (m_smPowerSave & 0x03) << 2;
263  val |= (m_greenField & 0x01) << 4;
264  val |= (m_shortGuardInterval20 & 0x01) << 5;
265  val |= (m_shortGuardInterval40 & 0x01) << 6;
266  val |= (m_txStbc & 0x01) << 7;
267  val |= (m_rxStbc & 0x03) << 8;
268  val |= (m_htDelayedBlockAck & 0x01) << 10;
269  val |= (m_maxAmsduLength & 0x01) << 11;
270  val |= (m_dssMode40 & 0x01) << 12;
271  val |= (m_psmpSupport & 0x01) << 13;
272  val |= (m_fortyMhzIntolerant & 0x01) << 14;
273  val |= (m_lsigProtectionSupport & 0x01) << 15;
274  return val;
275 }
276 
277 void
279 {
280  m_ldpc = ctrl & 0x01;
281  m_supportedChannelWidth = (ctrl >> 1) & 0x01;
282  m_smPowerSave = (ctrl >> 2) & 0x03;
283  m_greenField = (ctrl >> 4) & 0x01;
284  m_shortGuardInterval20 = (ctrl >> 5) & 0x01;
285  m_shortGuardInterval40 = (ctrl >> 6) & 0x01;
286  m_txStbc = (ctrl >> 7) & 0x01;
287  m_rxStbc = (ctrl >> 8) & 0x03;
288  m_htDelayedBlockAck = (ctrl >> 10) & 0x01;
289  m_maxAmsduLength = (ctrl >> 11) & 0x01;
290  m_dssMode40 = (ctrl >> 12) & 0x01;
291  m_psmpSupport = (ctrl >> 13) & 0x01;
292  m_fortyMhzIntolerant = (ctrl >> 14) & 0x01;
293  m_lsigProtectionSupport = (ctrl >> 15) & 0x01;
294 }
295 
296 void
298 {
299  m_maxAmpduLengthExponent = ctrl & 0x03;
300  m_minMpduStartSpace = (ctrl >> 2) & 0x1b;
301  m_ampduReserved = (ctrl >> 5) & 0xe0;
302 }
303 
304 uint8_t
306 {
307  uint8_t val = 0;
308  val |= m_maxAmpduLengthExponent & 0x03;
309  val |= (m_minMpduStartSpace & 0x1b) << 2;
310  val |= (m_ampduReserved & 0xe0) << 5;
311  return val;
312 }
313 
314 void
315 HtCapabilities::SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2)
316 {
317  for (uint64_t i = 0; i < 77; i++)
318  {
319  if (i < 64)
320  {
321  m_rxMcsBitmask[i] = (ctrl1 >> i) & 0x01;
322  }
323  else
324  {
325  m_rxMcsBitmask[i] = (ctrl2 >> (i - 64)) & 0x01;
326  }
327  }
328  m_reservedMcsSet1 = (ctrl2 >> 13) & 0x07;
329  m_rxHighestSupportedDataRate = (ctrl2 >> 16) & 0x03ff;
330  m_reservedMcsSet2 = (ctrl2 >> 26) & 0x3f;
331  m_txMcsSetDefined = (ctrl2 >> 32) & 0x01;
332  m_txRxMcsSetUnequal = (ctrl2 >> 33) & 0x01;
333  m_txMaxNSpatialStreams = (ctrl2 >> 34) & 0x03;
334  m_txUnequalModulation = (ctrl2 >> 36) & 0x01;
335  m_reservedMcsSet3 = (ctrl2 >> 37) & 0x07ffffff;
336 }
337 
338 uint64_t
340 {
341  uint64_t val = 0;
342  for (uint64_t i = 63; i > 0; i--)
343  {
344  val = (val << 1) | (m_rxMcsBitmask[i] & 0x01);
345  }
346  val = (val << 1) | (m_rxMcsBitmask[0] & 0x01);
347  return val;
348 }
349 
350 uint64_t
352 {
353  uint64_t val = 0;
354  val = val | (m_reservedMcsSet3 & 0x07ffffff);
355  val = (val << 1) | (m_txUnequalModulation & 0x01);
356  val = (val << 2) | (m_txMaxNSpatialStreams & 0x03);
357  val = (val << 1) | (m_txRxMcsSetUnequal & 0x01);
358  val = (val << 1) | (m_txMcsSetDefined & 0x01);
359  val = (val << 6) | (m_reservedMcsSet2 & 0x3f);
360  val = (val << 10) | (m_rxHighestSupportedDataRate & 0x3ff);
361  val = (val << 3) | (m_reservedMcsSet1 & 0x07);
362 
363  for (uint64_t i = 13; i > 0; i--)
364  {
365  val = (val << 1) | (m_rxMcsBitmask[i + 63] & 0x01);
366  }
367  return val;
368 }
369 
370 uint16_t
372 {
373  uint16_t val = 0;
374  val |= m_pco & 0x01;
375  val |= (m_pcoTransitionTime & 0x03) << 1;
376  val |= (m_reservedExtendedCapabilities & 0x1f) << 3;
377  val |= (m_mcsFeedback & 0x03) << 8;
378  val |= (m_htcSupport & 0x01) << 10;
379  val |= (m_reverseDirectionResponder & 0x01) << 11;
380  val |= (m_reservedExtendedCapabilities2 & 0x0f) << 12;
381  return val;
382 }
383 
384 void
386 {
387  m_pco = ctrl & 0x01;
388  m_pcoTransitionTime = (ctrl >> 1) & 0x03;
389  m_reservedExtendedCapabilities = (ctrl >> 3) & 0x1f;
390  m_mcsFeedback = (ctrl >> 8) & 0x03;
391  m_htcSupport = (ctrl >> 10) & 0x01;
392  m_reverseDirectionResponder = (ctrl >> 11) & 0x01;
393  m_reservedExtendedCapabilities2 = (ctrl >> 12) & 0x0f;
394 }
395 
396 uint32_t
398 {
399  uint32_t val = 0;
400  val |= m_implicitRxBfCapable & 0x01;
401  val |= (m_rxStaggeredSoundingCapable & 0x01) << 1;
402  val |= (m_txStaggeredSoundingCapable & 0x01) << 2;
403  val |= (m_rxNdpCapable & 0x01) << 3;
404  val |= (m_txNdpCapable & 0x01) << 4;
405  val |= (m_implicitTxBfCapable & 0x01) << 5;
406  val |= (m_calibration & 0x03) << 6;
407  val |= (m_explicitCsiTxBfCapable & 0x01) << 8;
408  val |= (m_explicitNoncompressedSteeringCapable & 0x01) << 9;
409  val |= (m_explicitCompressedSteeringCapable & 0x01) << 10;
410  val |= (m_explicitTxBfCsiFeedback & 0x03) << 11;
411  val |= (m_explicitNoncompressedBfFeedbackCapable & 0x03) << 13;
412  val |= (m_explicitCompressedBfFeedbackCapable & 0x03) << 15;
413  val |= (m_minimalGrouping & 0x03) << 17;
414  val |= (m_csiNBfAntennasSupported & 0x03) << 19;
415  val |= (m_noncompressedSteeringNBfAntennasSupported & 0x03) << 21;
416  val |= (m_compressedSteeringNBfAntennasSupported & 0x03) << 23;
417  val |= (m_csiMaxNRowsBfSupported & 0x03) << 25;
418  val |= (m_channelEstimationCapability & 0x03) << 27;
419  val |= (m_reservedTxBf & 0x07) << 29;
420  return val;
421 }
422 
423 void
425 {
426  m_implicitRxBfCapable = ctrl & 0x01;
427  m_rxStaggeredSoundingCapable = (ctrl >> 1) & 0x01;
428  m_txStaggeredSoundingCapable = (ctrl >> 2) & 0x01;
429  m_rxNdpCapable = (ctrl >> 3) & 0x01;
430  m_txNdpCapable = (ctrl >> 4) & 0x01;
431  m_implicitTxBfCapable = (ctrl >> 5) & 0x01;
432  m_calibration = (ctrl >> 6) & 0x03;
433  m_explicitCsiTxBfCapable = (ctrl >> 8) & 0x01;
434  m_explicitNoncompressedSteeringCapable = (ctrl >> 9) & 0x01;
435  m_explicitCompressedSteeringCapable = (ctrl >> 10) & 0x01;
436  m_explicitTxBfCsiFeedback = (ctrl >> 11) & 0x03;
437  m_explicitNoncompressedBfFeedbackCapable = (ctrl >> 13) & 0x03;
438  m_explicitCompressedBfFeedbackCapable = (ctrl >> 15) & 0x03;
439  m_minimalGrouping = (ctrl >> 17) & 0x03;
440  m_csiNBfAntennasSupported = (ctrl >> 19) & 0x03;
441  m_noncompressedSteeringNBfAntennasSupported = (ctrl >> 21) & 0x03;
442  m_compressedSteeringNBfAntennasSupported = (ctrl >> 23) & 0x03;
443  m_csiMaxNRowsBfSupported = (ctrl >> 25) & 0x03;
444  m_channelEstimationCapability = (ctrl >> 27) & 0x03;
445  m_reservedTxBf = (ctrl >> 29) & 0x07;
446 }
447 
448 uint8_t
450 {
451  uint8_t val = 0;
452  val |= m_antennaSelectionCapability & 0x01;
453  val |= (m_explicitCsiFeedbackBasedTxASelCapable & 0x01) << 1;
454  val |= (m_antennaIndicesFeedbackBasedTxASelCapable & 0x01) << 2;
455  val |= (m_explicitCsiFeedbackCapable & 0x01) << 3;
456  val |= (m_antennaIndicesFeedbackCapable & 0x01) << 4;
457  val |= (m_rxASelCapable & 0x01) << 5;
458  val |= (m_txSoundingPpdusCapable & 0x01) << 6;
459  val |= (m_reservedASel & 0x01) << 7;
460  return val;
461 }
462 
463 void
465 {
466  m_antennaSelectionCapability = ctrl & 0x01;
467  m_explicitCsiFeedbackBasedTxASelCapable = (ctrl >> 1) & 0x01;
468  m_antennaIndicesFeedbackBasedTxASelCapable = (ctrl >> 2) & 0x01;
469  m_explicitCsiFeedbackCapable = (ctrl >> 3) & 0x01;
470  m_antennaIndicesFeedbackCapable = (ctrl >> 4) & 0x01;
471  m_rxASelCapable = (ctrl >> 5) & 0x01;
472  m_txSoundingPpdusCapable = (ctrl >> 6) & 0x01;
473  m_reservedASel = (ctrl >> 7) & 0x01;
474 }
475 
476 void
478 {
479  // write the corresponding value for each bit
480  start.WriteHtolsbU16(GetHtCapabilitiesInfo());
481  start.WriteU8(GetAmpduParameters());
482  start.WriteHtolsbU64(GetSupportedMcsSet1());
483  start.WriteHtolsbU64(GetSupportedMcsSet2());
484  start.WriteU16(GetExtendedHtCapabilities());
485  start.WriteU32(GetTxBfCapabilities());
487 }
488 
489 uint16_t
491 {
493  uint16_t htinfo = i.ReadLsbtohU16();
494  uint8_t ampduparam = i.ReadU8();
495  uint64_t mcsset1 = i.ReadLsbtohU64();
496  uint64_t mcsset2 = i.ReadLsbtohU64();
497  uint16_t extendedcapabilities = i.ReadU16();
498  uint32_t txbfcapabilities = i.ReadU32();
499  uint8_t aselcapabilities = i.ReadU8();
500  SetHtCapabilitiesInfo(htinfo);
501  SetAmpduParameters(ampduparam);
502  SetSupportedMcsSet(mcsset1, mcsset2);
503  SetExtendedHtCapabilities(extendedcapabilities);
504  SetTxBfCapabilities(txbfcapabilities);
505  SetAntennaSelectionCapabilities(aselcapabilities);
506  return length;
507 }
508 
509 std::ostream&
510 operator<<(std::ostream& os, const HtCapabilities& htcapabilities)
511 {
512  os << bool(htcapabilities.GetLdpc()) << "|" << 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:100
uint8_t ReadU8()
Definition: buffer.h:1027
uint16_t ReadLsbtohU16()
Definition: buffer.cc:1067
uint64_t ReadLsbtohU64()
Definition: buffer.cc:1097
uint32_t ReadU32()
Definition: buffer.cc:969
uint16_t ReadU16()
Definition: buffer.h:1035
The HT Capabilities Information Element.
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
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 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 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 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:49
#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:129
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
#define IE_HT_CAPABILITIES