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 
24 namespace 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_maxAmpduLength (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_reverzeDirectionResponder (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  m_htSupported (0)
88 {
89  for (uint32_t k = 0; k < MAX_SUPPORTED_MCS; k++)
90  {
91  m_rxMcsBitmask[k] = 0;
92  }
93 }
94 
97 {
98  return IE_HT_CAPABILITIES;
99 }
100 
101 void
102 HtCapabilities::SetHtSupported (uint8_t htsupported)
103 {
104  m_htSupported = htsupported;
105 }
106 
107 void
109 {
110  m_ldpc = ldpc;
111 }
112 
113 void
114 HtCapabilities::SetSupportedChannelWidth (uint8_t supportedchannelwidth)
115 {
116  m_supportedChannelWidth = supportedchannelwidth;
117 }
118 
119 void
120 HtCapabilities::SetGreenfield (uint8_t greenfield)
121 {
122  m_greenField = greenfield;
123 }
124 
125 void
126 HtCapabilities::SetShortGuardInterval20 (uint8_t shortguardinterval)
127 {
128  m_shortGuardInterval20 = shortguardinterval;
129 }
130 
131 void
132 HtCapabilities::SetShortGuardInterval40 (uint8_t shortguardinterval)
133 {
134  m_shortGuardInterval40 = shortguardinterval;
135 }
136 
137 void
138 HtCapabilities::SetMaxAmsduLength (uint8_t maxamsdulength)
139 {
140  m_maxAmsduLength = maxamsdulength;
141 }
142 
143 void
145 {
146  m_lsigProtectionSupport = lsigprotection;
147 }
148 
149 void
150 HtCapabilities::SetMaxAmpduLength (uint8_t maxampdulength)
151 {
152  m_maxAmpduLength = maxampdulength;
153 }
154 
155 void
157 {
158  m_rxMcsBitmask[index] = 1;
159 }
160 
161 void
163 {
164  m_rxHighestSupportedDataRate = maxsupportedrate;
165 }
166 
167 void
168 HtCapabilities::SetTxMcsSetDefined (uint8_t txmcssetdefined)
169 {
170  m_txMcsSetDefined = txmcssetdefined;
171 }
172 
173 void
174 HtCapabilities::SetTxRxMcsSetUnequal (uint8_t txrxmcssetunequal)
175 {
176  m_txRxMcsSetUnequal = txrxmcssetunequal;
177 }
178 
179 void
180 HtCapabilities::SetTxMaxNSpatialStreams (uint8_t maxtxspatialstreams)
181 {
182  m_txMaxNSpatialStreams = maxtxspatialstreams - 1; //0 for 1 SS, 1 for 2 SSs, etc
183 }
184 
185 void
186 HtCapabilities::SetTxUnequalModulation (uint8_t txunequalmodulation)
187 {
188  m_txUnequalModulation = txunequalmodulation;
189 }
190 
191 uint8_t
193 {
194  return m_ldpc;
195 }
196 
197 uint8_t
199 {
201 }
202 
203 uint8_t
205 {
206  return m_greenField;
207 }
208 
209 uint8_t
211 {
212  return m_shortGuardInterval20;
213 }
214 
215 uint8_t
217 {
218  return m_shortGuardInterval40;
219 }
220 
221 uint8_t
223 {
224  return m_maxAmsduLength;
225 }
226 
227 uint8_t
229 {
231 }
232 
233 uint8_t
235 {
236  return m_maxAmpduLength;
237 }
238 
239 uint8_t
241 {
242  return m_minMpduStartSpace;
243 }
244 
245 uint8_t*
247 {
248  uint8_t* p;
249  p = m_rxMcsBitmask;
250  return p;
251 }
252 
253 bool
255 {
256  if (m_rxMcsBitmask[mcs] == 1)
257  {
258  return true;
259  }
260  return false;
261 }
262 
263 uint8_t
265 {
266  for (uint8_t nRx = 2; nRx <= 4; nRx++)
267  {
268  for (uint8_t mcs = (nRx - 1) * 8; mcs <= ((7 * nRx) + (nRx - 1)); mcs++)
269  {
270  if (IsSupportedMcs (mcs) == false)
271  {
272  return (nRx - 1);
273  }
274  }
275  }
276  return 4;
277 }
278 
279 uint16_t
281 {
283 }
284 
285 uint8_t
287 {
288  return m_txMcsSetDefined;
289 }
290 
291 uint8_t
293 {
294  return m_txRxMcsSetUnequal;
295 }
296 
297 
298 uint8_t
300 {
301  return m_txMaxNSpatialStreams; //0 for 1 SS, 1 for 2 SSs, etc
302 }
303 
304 uint8_t
306 {
307  return m_txUnequalModulation;
308 }
309 
310 uint8_t
312 {
313  //we should not be here if ht is not supported
314  NS_ASSERT (m_htSupported > 0);
315  return 26;
316 }
317 
320 {
321  if (m_htSupported < 1)
322  {
323  return i;
324  }
326 }
327 
328 uint16_t
330 {
331  if (m_htSupported < 1)
332  {
333  return 0;
334  }
336 }
337 
338 uint16_t
340 {
341  uint16_t val = 0;
342  val |= m_ldpc & 0x01;
343  val |= (m_supportedChannelWidth & 0x01) << 1;
344  val |= (m_smPowerSave & 0x03) << 2;
345  val |= (m_greenField & 0x01) << 4;
346  val |= (m_shortGuardInterval20 & 0x01) << 5;
347  val |= (m_shortGuardInterval40 & 0x01) << 6;
348  val |= (m_txStbc & 0x01) << 7;
349  val |= (m_rxStbc & 0x03) << 8;
350  val |= (m_htDelayedBlockAck & 0x01) << 10;
351  val |= (m_maxAmsduLength & 0x01) << 11;
352  val |= (m_dssMode40 & 0x01) << 12;
353  val |= (m_psmpSupport & 0x01) << 13;
354  val |= (m_fortyMhzIntolerant & 0x01) << 14;
355  val |= (m_lsigProtectionSupport & 0x01) << 15;
356  return val;
357 }
358 
359 void
361 {
362  m_ldpc = ctrl & 0x01;
363  m_supportedChannelWidth = (ctrl >> 1) & 0x01;
364  m_smPowerSave = (ctrl >> 2) & 0x03;
365  m_greenField = (ctrl >> 4) & 0x01;
366  m_shortGuardInterval20 = (ctrl >> 5) & 0x01;
367  m_shortGuardInterval40 = (ctrl >> 6) & 0x01;
368  m_txStbc = (ctrl >> 7) & 0x01;
369  m_rxStbc = (ctrl >> 8) & 0x03;
370  m_htDelayedBlockAck = (ctrl >> 10) & 0x01;
371  m_maxAmsduLength = (ctrl >> 11) & 0x01;
372  m_dssMode40 = (ctrl >> 12) & 0x01;
373  m_psmpSupport = (ctrl >> 13) & 0x01;
374  m_fortyMhzIntolerant = (ctrl >> 14) & 0x01;
375  m_lsigProtectionSupport = (ctrl >> 15) & 0x01;
376 }
377 
378 void
380 {
381  m_maxAmpduLength = ctrl & 0x03;
382  m_minMpduStartSpace = (ctrl >> 2) & 0x1b;
383  m_ampduReserved = (ctrl >> 5) & 0xe0;
384 }
385 
386 uint8_t
388 {
389  uint8_t val = 0;
390  val |= m_maxAmpduLength & 0x03;
391  val |= (m_minMpduStartSpace & 0x1b) << 2;
392  val |= (m_ampduReserved & 0xe0) << 5;
393  return val;
394 }
395 
396 void
397 HtCapabilities::SetSupportedMcsSet (uint64_t ctrl1, uint64_t ctrl2)
398 {
399  for (uint64_t i = 0; i < 77; i++)
400  {
401  if (i < 64)
402  {
403  m_rxMcsBitmask[i] = (ctrl1 >> i) & 0x01;
404  }
405  else
406  {
407  m_rxMcsBitmask[i] = (ctrl2 >> (i - 64)) & 0x01;
408  }
409  }
410  m_reservedMcsSet1 = (ctrl2 >> 13) & 0x07;
411  m_rxHighestSupportedDataRate = (ctrl2 >> 16) & 0x03ff;
412  m_reservedMcsSet2 = (ctrl2 >> 26) & 0x3f;
413  m_txMcsSetDefined = (ctrl2 >> 32) & 0x01;
414  m_txRxMcsSetUnequal = (ctrl2 >> 33) & 0x01;
415  m_txMaxNSpatialStreams = (ctrl2 >> 34) & 0x03;
416  m_txUnequalModulation = (ctrl2 >> 36) & 0x01;
417  m_reservedMcsSet3 = (ctrl2 >> 37) & 0x07ffffff;
418 }
419 
420 uint64_t
422 {
423  uint64_t val = 0;
424  for (uint64_t i = 63; i > 0; i--)
425  {
426  val = (val << 1) | (m_rxMcsBitmask[i] & 0x01);
427  }
428  val = (val << 1) | (m_rxMcsBitmask[0] & 0x01);
429  return val;
430 }
431 
432 uint64_t
434 {
435  uint64_t val = 0;
436  val = val | (m_reservedMcsSet3 & 0x07ffffff);
437  val = (val << 1) | (m_txUnequalModulation & 0x01);
438  val = (val << 2) | (m_txMaxNSpatialStreams & 0x03);
439  val = (val << 1) | (m_txRxMcsSetUnequal & 0x01);
440  val = (val << 1) | (m_txMcsSetDefined & 0x01);
441  val = (val << 6) | (m_reservedMcsSet2 & 0x3f);
442  val = (val << 10) | (m_rxHighestSupportedDataRate & 0x3ff);
443  val = (val << 3) | (m_reservedMcsSet1 & 0x07);
444 
445  for (uint64_t i = 13; i > 0; i--)
446  {
447  val = (val << 1) | ( m_rxMcsBitmask[i + 63] & 0x01);
448  }
449  return val;
450 }
451 
452 uint16_t
454 {
455  uint16_t val = 0;
456  val |= m_pco & 0x01;
457  val |= (m_pcoTransitionTime & 0x03) << 1;
458  val |= (m_reservedExtendedCapabilities & 0x1f) << 3;
459  val |= (m_mcsFeedback & 0x03) << 8;
460  val |= (m_htcSupport & 0x01) << 10;
461  val |= (m_reverzeDirectionResponder & 0x01) << 11;
462  val |= (m_reservedExtendedCapabilities2 & 0x0f) << 12;
463  return val;
464 }
465 
466 void
468 {
469  m_pco = ctrl & 0x01;
470  m_pcoTransitionTime = (ctrl >> 1) & 0x03;
471  m_reservedExtendedCapabilities = (ctrl >> 3) & 0x1f;
472  m_mcsFeedback = (ctrl >> 8) & 0x03;
473  m_htcSupport = (ctrl >> 10) & 0x01;
474  m_reverzeDirectionResponder = (ctrl >> 11) & 0x01;
475  m_reservedExtendedCapabilities2 = (ctrl >> 12) & 0x0f;
476 }
477 
478 uint32_t
480 {
481  uint32_t val = 0;
482  val |= m_implicitRxBfCapable & 0x01;
483  val |= (m_rxStaggeredSoundingCapable & 0x01) << 1;
484  val |= (m_txStaggeredSoundingCapable & 0x01) << 2;
485  val |= (m_rxNdpCapable & 0x01) << 3;
486  val |= (m_txNdpCapable & 0x01) << 4;
487  val |= (m_implicitTxBfCapable & 0x01) << 5;
488  val |= (m_calibration & 0x03) << 6;
489  val |= (m_explicitCsiTxBfCapable & 0x01) << 8;
490  val |= (m_explicitNoncompressedSteeringCapable & 0x01) << 9;
491  val |= (m_explicitCompressedSteeringCapable & 0x01) << 10;
492  val |= (m_explicitTxBfCsiFeedback & 0x03) << 11;
493  val |= (m_explicitNoncompressedBfFeedbackCapable & 0x03) << 13;
494  val |= (m_explicitCompressedBfFeedbackCapable & 0x03) << 15;
495  val |= (m_minimalGrouping & 0x03) << 17;
496  val |= (m_csiNBfAntennasSupported & 0x03) << 19;
497  val |= (m_noncompressedSteeringNBfAntennasSupported & 0x03) << 21;
498  val |= (m_compressedSteeringNBfAntennasSupported & 0x03) << 23;
499  val |= (m_csiMaxNRowsBfSupported & 0x03) << 25;
500  val |= (m_channelEstimationCapability & 0x03) << 27;
501  val |= (m_reservedTxBf & 0x07) << 29;
502  return val;
503 }
504 
505 void
507 {
508  m_implicitRxBfCapable = ctrl & 0x01;
509  m_rxStaggeredSoundingCapable = (ctrl >> 1) & 0x01;
510  m_txStaggeredSoundingCapable = (ctrl >> 2) & 0x01;
511  m_rxNdpCapable = (ctrl >> 3) & 0x01;
512  m_txNdpCapable = (ctrl >> 4) & 0x01;
513  m_implicitTxBfCapable = (ctrl >> 5) & 0x01;
514  m_calibration = (ctrl >> 6) & 0x03;
515  m_explicitCsiTxBfCapable = (ctrl >> 8) & 0x01;
516  m_explicitNoncompressedSteeringCapable = (ctrl >> 9) & 0x01;
517  m_explicitCompressedSteeringCapable = (ctrl >> 10) & 0x01;
518  m_explicitTxBfCsiFeedback = (ctrl >> 11) & 0x03;
519  m_explicitNoncompressedBfFeedbackCapable = (ctrl >> 13) & 0x03;
520  m_explicitCompressedBfFeedbackCapable = (ctrl >> 15) & 0x03;
521  m_minimalGrouping = (ctrl >> 17) & 0x03;
522  m_csiNBfAntennasSupported = (ctrl >> 19) & 0x03;
523  m_noncompressedSteeringNBfAntennasSupported = (ctrl >> 21) & 0x03;
524  m_compressedSteeringNBfAntennasSupported = (ctrl >> 23) & 0x03;
525  m_csiMaxNRowsBfSupported = (ctrl >> 25) & 0x03;
526  m_channelEstimationCapability = (ctrl >> 27) & 0x03;
527  m_reservedTxBf = (ctrl >> 29) & 0x07;
528 }
529 
530 uint8_t
532 {
533  uint8_t val = 0;
534  val |= m_antennaSelectionCapability & 0x01;
535  val |= (m_explicitCsiFeedbackBasedTxASelCapable & 0x01) << 1;
536  val |= (m_antennaIndicesFeedbackBasedTxASelCapable & 0x01) << 2;
537  val |= (m_explicitCsiFeedbackCapable & 0x01) << 3;
538  val |= (m_antennaIndicesFeedbackCapable & 0x01) << 4;
539  val |= (m_rxASelCapable & 0x01) << 5;
540  val |= (m_txSoundingPpdusCapable & 0x01) << 6;
541  val |= (m_reservedASel & 0x01) << 7;
542  return val;
543 }
544 
545 void
547 {
548  m_antennaSelectionCapability = ctrl & 0x01;
549  m_explicitCsiFeedbackBasedTxASelCapable = (ctrl >> 1) & 0x01;
550  m_antennaIndicesFeedbackBasedTxASelCapable = (ctrl >> 2) & 0x01;
551  m_explicitCsiFeedbackCapable = (ctrl >> 3) & 0x01;
552  m_antennaIndicesFeedbackCapable = (ctrl >> 4) & 0x01;
553  m_rxASelCapable = (ctrl >> 5) & 0x01;
554  m_txSoundingPpdusCapable = (ctrl >> 6) & 0x01;
555  m_reservedASel = (ctrl >> 7) & 0x01;
556 }
557 
558 void
560 {
561  if (m_htSupported == 1)
562  {
563  //write the corresponding value for each bit
565  start.WriteU8 (GetAmpduParameters ());
569  start.WriteU32 (GetTxBfCapabilities ());
571  }
572 }
573 
574 uint8_t
576  uint8_t length)
577 {
579  uint16_t htinfo = i.ReadLsbtohU16 ();
580  uint8_t ampduparam = i.ReadU8 ();
581  uint64_t mcsset1 = i.ReadLsbtohU64 ();
582  uint64_t mcsset2 = i.ReadLsbtohU64 ();
583  uint16_t extendedcapabilities = i.ReadU16 ();
584  uint32_t txbfcapabilities = i.ReadU32 ();
585  uint8_t aselcapabilities = i.ReadU8 ();
586  SetHtCapabilitiesInfo (htinfo);
587  SetAmpduParameters (ampduparam);
588  SetSupportedMcsSet (mcsset1, mcsset2);
589  SetExtendedHtCapabilities (extendedcapabilities);
590  SetTxBfCapabilities (txbfcapabilities);
591  SetAntennaSelectionCapabilities (aselcapabilities);
592  return length;
593 }
594 
596 
605 std::ostream &
606 operator << (std::ostream &os, const HtCapabilities &htcapabilities)
607 {
608  os << bool (htcapabilities.GetLdpc ())
609  << "|" << bool (htcapabilities.GetSupportedChannelWidth ())
610  << "|" << bool (htcapabilities.GetGreenfield ())
611  << "|" << bool (htcapabilities.GetShortGuardInterval20 ()) << "|";
612  for (uint32_t k = 0; k < MAX_SUPPORTED_MCS; k++)
613  {
614  os << htcapabilities.IsSupportedMcs (k) << " ";
615  }
616  return os;
617 }
618 
627 std::istream &operator >> (std::istream &is, HtCapabilities &htcapabilities)
628 {
629  bool c1, c2, c3, c4;
630  is >> c1 >> c2 >> c3 >> c4;
631  htcapabilities.SetLdpc (c1);
632  htcapabilities.SetSupportedChannelWidth (c2);
633  htcapabilities.SetGreenfield (c3);
634  htcapabilities.SetShortGuardInterval20 (c4);
635 
636  return is;
637 }
638 
639 } //namespace ns3
uint8_t m_psmpSupport
PSMP support.
uint16_t ReadU16(void)
Definition: buffer.h:1029
uint8_t GetMaxAmsduLength(void) const
Return the maximum AMSDU length.
uint8_t m_rxMcsBitmask[MAX_SUPPORTED_MCS]
receive MCS bitmask
uint8_t m_dssMode40
DSS mode 40.
uint8_t m_maxAmpduLength
maximum AMPDU length
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
Definition: angles.cc:48
uint8_t m_reservedTxBf
reserved transmit BF
uint8_t m_mcsFeedback
MCS feedback.
void SetTxMcsSetDefined(uint8_t txmcssetdefined)
Set the transmit MCS set defined.
uint32_t ReadU32(void)
Definition: buffer.cc:975
uint8_t GetTxRxMcsSetUnequal(void) const
Return the transmit / receive MCS set unequal.
uint8_t GetMinMpduStartSpace(void) const
Return the minimum MPDU start space.
uint8_t m_rxStaggeredSoundingCapable
receive staggered sounding capable
uint32_t m_reservedMcsSet3
reserved MCS set 3
uint8_t GetLSigProtectionSupport(void) const
Return the LSIG protection support.
void SetGreenfield(uint8_t greenfield)
Set the green field.
void SetTxBfCapabilities(uint32_t ctrl)
Set the Transmit Beamforming (TxBF) Capabilties field in the HT Capabilities information element...
uint8_t m_explicitNoncompressedSteeringCapable
explicit non compressed steeering capable
uint8_t m_supportedChannelWidth
supported channel width
#define MAX_SUPPORTED_MCS
This defines the maximum number of supported MCSs that a STA is allowed to have.
uint8_t m_antennaIndicesFeedbackCapable
antenna indices feedback capable
void SetHtSupported(uint8_t htsupported)
Set the HT Supported field in the HT Supported information element.
#define ATTRIBUTE_HELPER_CPP(type)
Define the attribute value, accessor and checkers for class type.
uint8_t m_reservedExtendedCapabilities2
reserver extended capabilities 2
uint64_t GetSupportedMcsSet2(void) const
Return the last 64 bytes of the Supported MCS Set field in the HT Capabilities information element...
void SetRxMcsBitmask(uint8_t index)
Set the receive MCS bitmask.
def start()
Definition: core.py:1790
#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
The HT Capabilities Information ElementThis class knows how to serialise and deserialise the HT Capab...
uint8_t GetSupportedChannelWidth(void) const
Return the supported channel width.
uint8_t m_shortGuardInterval40
short guard interval 40
void SetAmpduParameters(uint8_t ctrl)
Set the A-MPDU Parameters field in the HT Capabilities information element.
uint8_t GetShortGuardInterval40(void) const
Return the short guard interval 40 value.
uint8_t m_txSoundingPpdusCapable
sounding PPDUS capable
uint16_t GetSerializedSize() const
Get the size of the serialized IE including Element ID and length fields.
uint8_t m_fortyMhzIntolerant
40 Mhz intolerant
iterator in a Buffer instance
Definition: buffer.h:98
uint8_t GetTxUnequalModulation(void) const
Return the transmit unequal modulation.
uint8_t m_txMcsSetDefined
transmit MCS set defined
uint8_t m_rxNdpCapable
receive NDP capable
void SetLSigProtectionSupport(uint8_t lsigprotection)
Set the LSIG protection support.
uint8_t m_txStbc
transmit STBC
#define IE_HT_CAPABILITIES
uint8_t m_txStaggeredSoundingCapable
transmit staggered soundign capable
void SetShortGuardInterval20(uint8_t shortguardinterval)
Set the short guard interval 20 field.
uint8_t GetGreenfield(void) const
Return the green field.
uint8_t m_txMaxNSpatialStreams
transmit maximum number spatial streams
uint8_t m_csiNBfAntennasSupported
CSI 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...
uint8_t m_htSupported
This is used to decide whether this element should be added to the frame or not.
uint16_t m_rxHighestSupportedDataRate
receive highest supported data rate
uint8_t m_implicitTxBfCapable
implicit transmit BF capable
void WriteU16(uint16_t data)
Definition: buffer.cc:873
void SetMaxAmsduLength(uint8_t maxamsdulength)
Set the maximum AMSDU length.
uint8_t m_greenField
green field
uint8_t m_antennaSelectionCapability
antenna selection capability
uint32_t GetTxBfCapabilities(void) const
Return the Transmit Beamforming (TxBF) Capabilties field in the HT Capabilities information element...
uint8_t GetShortGuardInterval20(void) const
Return the short guard interval 20 value.
void SetMaxAmpduLength(uint8_t maxampdulength)
Set the maximum AMPDU length.
uint8_t m_reservedMcsSet1
reserved MCS set 1
uint16_t GetRxHighestSupportedDataRate(void) const
Return the receive highest supported data rate.
uint8_t m_reservedMcsSet2
reserved MCS set 2
uint8_t m_channelEstimationCapability
channel estimation capability
uint8_t GetTxMaxNSpatialStreams(void) const
Return the transmit maximum spatial streams.
WifiInformationElementId ElementId() const
Return the element ID.
uint8_t GetTxMcsSetDefined(void) const
Return the transmit MCS set defined.
uint8_t m_reservedASel
reserved a sel
uint8_t m_htDelayedBlockAck
HT delayed block ack.
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Definition: angles.cc:42
void SetRxHighestSupportedDataRate(uint16_t maxsupportedrate)
Set the receive highest supported data rate.
uint8_t m_smPowerSave
SM power save.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t m_implicitRxBfCapable
implicit receive BF capable
uint8_t m_explicitCompressedBfFeedbackCapable
explicit compressed BF feedback capable
bool IsSupportedMcs(uint8_t mcs) const
Return the is MCS supported flag.
uint8_t m_maxAmsduLength
maximum AMSDU length
uint8_t GetAmpduParameters(void) const
Return the A-MPDU Parameters field in the HT Capabilities information element.
uint8_t m_ampduReserved
AMPDU reserved.
uint8_t m_htcSupport
HTS support.
uint8_t m_txRxMcsSetUnequal
transmit / receive MCS set unequal
void SerializeInformationField(Buffer::Iterator start) const
Serialize the information field.
uint8_t m_rxASelCapable
receive a sel capable
void SetTxUnequalModulation(uint8_t txunequalmodulation)
Set the transmit unequal modulation.
void SetSupportedMcsSet(uint64_t ctrl1, uint64_t ctrl2)
Set the Supported MCS Set field in the HT Capabilities information element.
void SetExtendedHtCapabilities(uint16_t ctrl)
Set the Extended HT Capabilties field in the HT Capabilities information element. ...
uint8_t GetInformationFieldSize() const
Return the information field size.
void SetAntennaSelectionCapabilities(uint8_t ctrl)
Set the the Antenna Selection (ASEL) Capabilties field in the HT Capabilities information element...
void WriteHtolsbU16(uint16_t data)
Definition: buffer.cc:913
uint8_t GetLdpc(void) const
Return LDPC.
void SetHtCapabilitiesInfo(uint16_t ctrl)
Set the HT Capabilties Info field in the HT Capabilities information element.
uint8_t m_rxStbc
receive STBC
uint16_t GetHtCapabilitiesInfo(void) const
Return the HT Capabilties Info field in the HT Capabilities information element.
void WriteU8(uint8_t data)
Definition: buffer.h:869
uint8_t m_noncompressedSteeringNBfAntennasSupported
non compressed steering NBF antenna supported
uint8_t m_explicitCsiTxBfCapable
explicit CSI transmit BF capable
void WriteHtolsbU64(uint64_t data)
Definition: buffer.cc:929
uint8_t m_compressedSteeringNBfAntennasSupported
compressed steering NBF antenna supported
uint8_t m_explicitCsiFeedbackBasedTxASelCapable
explicit CSI feedback based transmit a sel capable
uint8_t m_minMpduStartSpace
minimum MPDU start space
uint8_t m_explicitCsiFeedbackCapable
explicit CSI feedback capable
uint8_t m_ldpc
LDPC.
void SetLdpc(uint8_t ldpc)
Set the LDPC field.
uint8_t ReadU8(void)
Definition: buffer.h:1021
void SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal)
Set the transmit / receive MCS set unequal.
uint8_t m_csiMaxNRowsBfSupported
CSI maximum number rows BF supported.
uint8_t * GetRxMcsBitmask()
Return the receive MCS bitmask.
uint8_t m_pcoTransitionTime
PCO trnsition time.
uint8_t m_txUnequalModulation
transmit unequal modulation
uint16_t ReadLsbtohU16(void)
Definition: buffer.cc:1068
uint8_t GetRxHighestSupportedAntennas(void) const
Return the receive highest supported antennas.
uint8_t m_explicitTxBfCsiFeedback
explicit transmit BF CSI feedback
uint8_t m_minimalGrouping
minimal grouping
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
void SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams)
Set the transmit maximum N spatial streams.
uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)
Return the information field.
uint64_t ReadLsbtohU64(void)
Definition: buffer.cc:1096
uint16_t GetSerializedSize() const
Return the serialized size of this HT capability information element.
uint8_t m_shortGuardInterval20
short guard interval 20
void WriteU32(uint32_t data)
Definition: buffer.cc:881
uint8_t m_txNdpCapable
transmit NDP capable
uint8_t m_reservedExtendedCapabilities
reserved extended capabilities
Buffer::Iterator Serialize(Buffer::Iterator start) const
This information element is a bit special in that it is only included if the STA is an HT STA...
void SetShortGuardInterval40(uint8_t shortguardinterval)
Set the short guard interval 40 field.
uint8_t GetAntennaSelectionCapabilities(void) const
Return the Antenna Selection (ASEL) Capabilties field in the HT Capabilities information element...
Buffer::Iterator Serialize(Buffer::Iterator i) const
Serialize entire IE including Element ID and length fields.
uint8_t m_lsigProtectionSupport
LSIG protection support.
void SetSupportedChannelWidth(uint8_t supportedchannelwidth)
Set the supported channel width field.
uint8_t m_calibration
calibration
uint8_t m_reverzeDirectionResponder
reverse direction responder
uint8_t GetMaxAmpduLength(void) const
Return the maximum AMPDU length.
uint8_t m_explicitNoncompressedBfFeedbackCapable
eplicit non complressed BF feedback capable
uint8_t m_explicitCompressedSteeringCapable
explicit compressed steeering capable
uint8_t m_antennaIndicesFeedbackBasedTxASelCapable
antenna indices feedback absed transmit a sel capable
uint16_t GetExtendedHtCapabilities(void) const
Return the Extended HT Capabilties field in the HT Capabilities information element.