A Discrete-Event Network Simulator
API
he-capabilities.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2016
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  * Author: S├ębastien Deronne <sebastien.deronne@gmail.com>
19  */
20 
21 #include "he-capabilities.h"
22 
23 namespace ns3 {
24 
26  : m_plusHtcHeSupport (0),
27  m_twtRequesterSupport (0),
28  m_twtResponderSupport (0),
29  m_fragmentationSupport (0),
30  m_maximumNumberOfFragmentedMsdus (0),
31  m_minimumFragmentSize (0),
32  m_triggerFrameMacPaddingDuration (0),
33  m_multiTidAggregationSupport (0),
34  m_heLinkAdaptation (0),
35  m_allAckSupport (0),
36  m_ulMuResponseSchedulingSupport (0),
37  m_aBsrSupport (0),
38  m_broadcastTwtSupport (0),
39  m_32bitBaBitmapSupport (0),
40  m_muCascadeSupport (0),
41  m_ackEnabledMultiTidAggregationSupport (0),
42  m_groupAddressedMultiStaBlockAckInDlMuSupport (0),
43  m_omControlSupport (0),
44  m_ofdmaRaSupport (0),
45  m_maxAmpduLengthExponent (0),
46  m_amsduFragmentationSupport (0),
47  m_flexibleTwtScheduleSupport (0),
48  m_rxControlFrameToMultiBss (0),
49  m_bsrpAmpduAggregation (0),
50  m_qtpSupport (0),
51  m_aBqrSupport (0),
52  m_dualBandSupport (0),
53  m_channelWidthSet (0),
54  m_preamblePuncturingRx (0),
55  m_deviceClass (0),
56  m_ldpcCodingInPayload (0),
57  m_heLtfAndGiForHePpdus (0),
58  m_heLtfAndGiForNdp (0),
59  m_stbcTxAndRx (0),
60  m_doppler (0),
61  m_ulMu (0),
62  m_dcmEncodingTx (0),
63  m_dcmEncodingRx (0),
64  m_ulHeMuPpduPayloadSupport (0),
65  m_suBeamformer (0),
66  m_suBeamformee (0),
67  m_muBeamformer (0),
68  m_beamformeeStsForSmallerOrEqualThan80Mhz (0),
69  m_nstsTotalForSmallerOrEqualThan80Mhz (0),
70  m_beamformeeStsForLargerThan80Mhz (0),
71  m_nstsTotalForLargerThan80Mhz (0),
72  m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz (0),
73  m_numberOfSoundingDimensionsForLargerThan80Mhz (0),
74  m_ngEqual16ForSuFeedbackSupport (0),
75  m_ngEqual16ForMuFeedbackSupport (0),
76  m_codebookSize42ForSuSupport (0),
77  m_codebookSize75ForSuSupport (0),
78  m_beamformingFeedbackWithTriggerFrame (0),
79  m_heErSuPpduPayload (0),
80  m_dlMuMimoOnPartialBandwidth (0),
81  m_ppeThresholdPresent (0),
82  m_srpBasedSrSupport (0),
83  m_powerBoostFactorAlphaSupport (0),
84  m_4TimesHeLtfAnd800NsGiSupportForHePpdus (0),
85  m_highestNssSupportedM1 (0),
86  m_highestMcsSupported (0),
87  m_heSupported (0)
88 {
89  m_txBwMap.resize (8,0);
90  m_rxBwMap.resize (8,0);
91 }
92 
95 {
96  return IE_EXTENSION;
97 }
98 
101 {
102  return IE_EXT_HE_CAPABILITIES;
103 }
104 
105 void
106 HeCapabilities::SetHeSupported (uint8_t heSupported)
107 {
108  m_heSupported = heSupported;
109 }
110 
111 uint8_t
113 {
114  //we should not be here if HE is not supported
115  NS_ASSERT (m_heSupported > 0);
116  return 19; //todo: variable length!
117 }
118 
121 {
122  if (m_heSupported < 1)
123  {
124  return i;
125  }
127 }
128 
129 uint16_t
131 {
132  if (m_heSupported < 1)
133  {
134  return 0;
135  }
137 }
138 
139 void
141 {
142  if (m_heSupported == 1)
143  {
144  //write the corresponding value for each bit
145  start.WriteHtolsbU32 (GetHeMacCapabilitiesInfo1 ());
146  start.WriteU8 (GetHeMacCapabilitiesInfo2 ());
147  start.WriteHtolsbU64 (GetHePhyCapabilitiesInfo1 ());
148  start.WriteU8 (GetHePhyCapabilitiesInfo2 ());
149  start.WriteHtolsbU32 (GetSupportedMcsAndNss ());
150  //todo: add another 32-bits field if 160 MHz channel is supported (variable length)
151  //todo: optional PPE Threshold field (variable length)
152  }
153 }
154 
155 uint8_t
157 {
159  uint32_t macCapabilities1 = i.ReadLsbtohU32 ();
160  uint8_t macCapabilities2 = i.ReadU8 ();
161  uint64_t phyCapabilities1 = i.ReadLsbtohU64 ();
162  uint8_t phyCapabilities2 = i.ReadU8 ();
163  uint32_t mcsset = i.ReadU32 ();
164  SetHeMacCapabilitiesInfo (macCapabilities1, macCapabilities2);
165  SetHePhyCapabilitiesInfo (phyCapabilities1, phyCapabilities2);
166  SetSupportedMcsAndNss (mcsset);
167  //todo: add another 32-bits field if 160 MHz channel is supported (variable length)
168  //todo: optional PPE Threshold field (variable length)
169  return length;
170 }
171 
172 void
173 HeCapabilities::SetHeMacCapabilitiesInfo (uint32_t ctrl1, uint8_t ctrl2)
174 {
175  m_plusHtcHeSupport = ctrl1 & 0x01;
176  m_twtRequesterSupport = (ctrl1 >> 1) & 0x01;
177  m_twtResponderSupport = (ctrl1 >> 2) & 0x01;
178  m_fragmentationSupport = (ctrl1 >> 3) & 0x03;
179  m_maximumNumberOfFragmentedMsdus = (ctrl1 >> 5) & 0x07;
180  m_minimumFragmentSize = (ctrl1 >> 8) & 0x03;
181  m_triggerFrameMacPaddingDuration = (ctrl1 >> 10) & 0x03;
182  m_multiTidAggregationSupport = (ctrl1 >> 12) & 0x07;
183  m_heLinkAdaptation = (ctrl1 >> 15) & 0x03;
184  m_allAckSupport = (ctrl1 >> 17) & 0x01;
185  m_ulMuResponseSchedulingSupport = (ctrl1 >> 18) & 0x01;
186  m_aBsrSupport = (ctrl1 >> 19) & 0x01;
187  m_broadcastTwtSupport = (ctrl1 >> 20) & 0x01;
188  m_32bitBaBitmapSupport = (ctrl1 >> 21) & 0x01;
189  m_muCascadeSupport = (ctrl1 >> 22) & 0x01;
190  m_ackEnabledMultiTidAggregationSupport = (ctrl1 >> 23) & 0x01;
191  m_groupAddressedMultiStaBlockAckInDlMuSupport = (ctrl1 >> 24) & 0x01;
192  m_omControlSupport = (ctrl1 >> 25) & 0x03;
193  m_ofdmaRaSupport = (ctrl1 >> 26) & 0x01;
194  m_maxAmpduLengthExponent = (ctrl1 >> 27) & 0x03;
195  m_amsduFragmentationSupport = (ctrl1 >> 29) & 0x01;
196  m_flexibleTwtScheduleSupport = (ctrl1 >> 30) & 0x01;
197  m_rxControlFrameToMultiBss = (ctrl1 >> 31) & 0x01;
198  m_bsrpAmpduAggregation = ctrl2 & 0x01;
199  m_qtpSupport = (ctrl2 >> 1) & 0x01;
200  m_aBqrSupport = (ctrl2 >> 2) & 0x01;
201 }
202 
203 uint32_t
205 {
206  uint32_t val = 0;
207  val |= m_plusHtcHeSupport & 0x01;
208  val |= (m_twtRequesterSupport & 0x01) << 1;
209  val |= (m_twtResponderSupport & 0x01) << 2;
210  val |= (m_fragmentationSupport & 0x03) << 3;
211  val |= (m_maximumNumberOfFragmentedMsdus & 0x07) << 5;
212  val |= (m_minimumFragmentSize & 0x03) << 8;
213  val |= (m_triggerFrameMacPaddingDuration & 0x03) << 10;
214  val |= (m_multiTidAggregationSupport & 0x07) << 12;
215  val |= (m_heLinkAdaptation & 0x03) << 15;
216  val |= (m_allAckSupport & 0x01) << 17;
217  val |= (m_ulMuResponseSchedulingSupport & 0x01) << 18;
218  val |= (m_aBsrSupport & 0x01) << 19;
219  val |= (m_broadcastTwtSupport & 0x01) << 20;
220  val |= (m_32bitBaBitmapSupport & 0x01) << 21;
221  val |= (m_muCascadeSupport & 0x01) << 22;
222  val |= (m_ackEnabledMultiTidAggregationSupport & 0x01) << 23;
223  val |= (m_groupAddressedMultiStaBlockAckInDlMuSupport & 0x01) << 24;
224  val |= (m_omControlSupport & 0x03) << 25;
225  val |= (m_ofdmaRaSupport & 0x01) << 26;
226  val |= (m_maxAmpduLengthExponent & 0x03) << 27;
227  val |= (m_amsduFragmentationSupport & 0x01) << 29;
228  val |= (m_flexibleTwtScheduleSupport & 0x01) << 30;
229  val |= (m_rxControlFrameToMultiBss & 0x01) << 31;
230  return val;
231 }
232 
233 uint8_t
235 {
236  uint8_t val = 0;
237  val |= m_bsrpAmpduAggregation & 0x01;
238  val |= (m_qtpSupport & 0x01) << 1;
239  val |= (m_aBqrSupport & 0x01) << 2;
240  return val;
241 }
242 
243 void
244 HeCapabilities::SetHePhyCapabilitiesInfo (uint64_t ctrl1, uint8_t ctrl2)
245 {
246  m_dualBandSupport = ctrl1 & 0x01;
247  m_channelWidthSet = (ctrl1 >> 1) & 0x7f;
248  m_preamblePuncturingRx = (ctrl1 >> 8) & 0x0f;
249  m_deviceClass = (ctrl1 >> 12) & 0x01;
250  m_ldpcCodingInPayload = (ctrl1 >> 13) & 0x01;
251  m_heLtfAndGiForHePpdus = (ctrl1 >> 14) & 0x03;
252  m_heLtfAndGiForNdp = (ctrl1 >> 16) & 0x03;
253  m_stbcTxAndRx = (ctrl1 >> 18) & 0x03;
254  m_doppler = (ctrl1 >> 20) & 0x03;
255  m_ulMu = (ctrl1 >> 22) & 0x03;
256  m_dcmEncodingTx = (ctrl1 >> 24) & 0x0f;
257  m_dcmEncodingRx = (ctrl1 >> 27) & 0x0f;
258  m_ulHeMuPpduPayloadSupport = (ctrl1 >> 30) & 0x01;
259  m_suBeamformer = (ctrl1 >> 31) & 0x01;
260  m_suBeamformee = (ctrl1 >> 32) & 0x01;
261  m_muBeamformer = (ctrl1 >> 33) & 0x01;
262  m_beamformeeStsForSmallerOrEqualThan80Mhz = (ctrl1 >> 34) & 0x07;
263  m_nstsTotalForSmallerOrEqualThan80Mhz = (ctrl1 >> 37) & 0x07;
264  m_beamformeeStsForLargerThan80Mhz = (ctrl1 >> 40) & 0x07;
265  m_nstsTotalForLargerThan80Mhz = (ctrl1 >> 43) & 0x07;
267  m_numberOfSoundingDimensionsForLargerThan80Mhz = (ctrl1 >> 49) & 0x07;
268  m_ngEqual16ForSuFeedbackSupport = (ctrl1 >> 52) & 0x01;
269  m_ngEqual16ForMuFeedbackSupport = (ctrl1 >> 53) & 0x01;
270  m_codebookSize42ForSuSupport = (ctrl1 >> 54) & 0x01;
271  m_codebookSize75ForSuSupport = (ctrl1 >> 55) & 0x01;
272  m_beamformingFeedbackWithTriggerFrame = (ctrl1 >> 56) & 0x07;
273  m_heErSuPpduPayload = (ctrl1 >> 59) & 0x01;
274  m_dlMuMimoOnPartialBandwidth = (ctrl1 >> 60) & 0x01;
275  m_ppeThresholdPresent = (ctrl1 >> 61) & 0x01;
276  m_srpBasedSrSupport = (ctrl1 >> 62) & 0x01;
277  m_powerBoostFactorAlphaSupport = (ctrl1 >> 63) & 0x01;
279 }
280 
281 uint64_t
283 {
284  uint64_t val = 0;
285  val |= m_dualBandSupport & 0x01;
286  val |= (m_channelWidthSet & 0x7f) << 1;
287  val |= (m_preamblePuncturingRx & 0x0f) << 8;
288  val |= (m_deviceClass & 0x01) << 12;
289  val |= (m_ldpcCodingInPayload & 0x01) << 13;
290  val |= (m_heLtfAndGiForHePpdus & 0x03) << 14;
291  val |= (m_heLtfAndGiForNdp & 0x03) << 16;
292  val |= (m_stbcTxAndRx & 0x03) << 18;
293  val |= (m_doppler & 0x03) << 20;
294  val |= (m_ulMu & 0x03) << 22;
295  val |= (m_dcmEncodingTx & 0x0f) << 24;
296  val |= (m_dcmEncodingRx & 0x0f) << 27;
297  val |= (m_ulHeMuPpduPayloadSupport & 0x01) << 30;
298  val |= (m_suBeamformer & 0x01) << 31;
299  val |= (static_cast<uint64_t> (m_suBeamformee) & 0x01) << 32;
300  val |= (static_cast<uint64_t> (m_muBeamformer) & 0x01) << 33;
301  val |= (static_cast<uint64_t> (m_beamformeeStsForSmallerOrEqualThan80Mhz) & 0x07) << 34;
302  val |= (static_cast<uint64_t> (m_nstsTotalForSmallerOrEqualThan80Mhz) & 0x07) << 37;
303  val |= (static_cast<uint64_t> (m_beamformeeStsForLargerThan80Mhz) & 0x07) << 40;
304  val |= (static_cast<uint64_t> (m_nstsTotalForLargerThan80Mhz) & 0x07) << 43;
305  val |= (static_cast<uint64_t> (m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz) & 0x07) << 46;
306  val |= (static_cast<uint64_t> (m_numberOfSoundingDimensionsForLargerThan80Mhz) & 0x07) << 49;
307  val |= (static_cast<uint64_t> (m_ngEqual16ForSuFeedbackSupport) & 0x01) << 52;
308  val |= (static_cast<uint64_t> (m_ngEqual16ForMuFeedbackSupport) & 0x01) << 53;
309  val |= (static_cast<uint64_t> (m_codebookSize42ForSuSupport) & 0x01) << 54;
310  val |= (static_cast<uint64_t> (m_codebookSize75ForSuSupport) & 0x01) << 55;
311  val |= (static_cast<uint64_t> (m_beamformingFeedbackWithTriggerFrame) & 0x07) << 56;
312  val |= (static_cast<uint64_t> (m_heErSuPpduPayload) & 0x01) << 59;
313  val |= (static_cast<uint64_t> (m_dlMuMimoOnPartialBandwidth) & 0x01) << 60;
314  val |= (static_cast<uint64_t> (m_ppeThresholdPresent) & 0x01) << 61;
315  val |= (static_cast<uint64_t> (m_srpBasedSrSupport) & 0x01) << 62;
316  val |= (static_cast<uint64_t> (m_powerBoostFactorAlphaSupport) & 0x01) << 63;
317  return val;
318 }
319 
320 uint8_t
322 {
323  uint8_t val = 0;
325  return val;
326 }
327 
328 void
330 {
331  m_highestNssSupportedM1 = ctrl & 0x07;
332  m_highestMcsSupported = (ctrl >> 3) & 0x07;
334  uint8_t i;
335  for (i = 0; i < 5; i++)
336  {
337  m_txBwMap[i] = (ctrl >> (6 + i)) & 0x01;
338  }
339  for (i = 0; i < 5; i++)
340  {
341  m_rxBwMap[i] = (ctrl >> (11 + i)) & 0x01;
342  }
343  //todo: MCS NSS Descriptors
344 }
345 
346 uint16_t
348 {
349  uint16_t val = 0;
350  val |= m_highestNssSupportedM1 & 0x07;
351  val |= (m_highestMcsSupported & 0x07) << 3;
352  uint8_t i;
353  for (i = 0; i < 5; i++)
354  {
355  val |= (m_txBwMap[i] & 0x01) << (6 + 1);
356  }
357  for (i = 0; i < 5; i++)
358  {
359  val |= (m_rxBwMap[i] & 0x01) << (11 + 1);
360  }
361  //todo: MCS NSS Descriptors
362  return val;
363 }
364 
365 //todo: PPE threshold
366 
367 bool
369 {
370  NS_ASSERT (mcs >= 0 && mcs <= 11);
371  if (mcs <= 7)
372  {
373  return true;
374  }
375  if (mcs == 8 && m_highestMcsSupported >= 1)
376  {
377  return true;
378  }
379  if (mcs == 9 && m_highestMcsSupported >= 2)
380  {
381  return true;
382  }
383  if (mcs == 10 && m_highestMcsSupported >= 3)
384  {
385  return true;
386  }
387  if (mcs == 11 && m_highestMcsSupported == 4)
388  {
389  return true;
390  }
391  return false;
392 }
393 
394 bool
396 {
397  NS_ASSERT (mcs >= 0 && mcs <= 11);
398  if (mcs <= 7)
399  {
400  return true;
401  }
402  if (mcs == 8 && m_highestMcsSupported >= 1)
403  {
404  return true;
405  }
406  if (mcs == 9 && m_highestMcsSupported >= 2)
407  {
408  return true;
409  }
410  if (mcs == 10 && m_highestMcsSupported >= 3)
411  {
412  return true;
413  }
414  if (mcs == 11 && m_highestMcsSupported == 4)
415  {
416  return true;
417  }
418  return false;
419 }
420 
421 void
422 HeCapabilities::SetChannelWidthSet (uint8_t channelWidthSet)
423 {
424  NS_ASSERT (channelWidthSet <= 0x2f);
425  m_channelWidthSet = channelWidthSet;
426 }
427 
428 void
429 HeCapabilities::SetHeLtfAndGiForHePpdus (uint8_t heLtfAndGiForHePpdus)
430 {
431  NS_ASSERT (heLtfAndGiForHePpdus <= 0x03);
432  m_heLtfAndGiForHePpdus = heLtfAndGiForHePpdus;
433 }
434 
435 void
436 HeCapabilities::SetMaxAmpduLength (uint32_t maxAmpduLength)
437 {
438  for (uint8_t i = 0; i <= 3; i++)
439  {
440  if ((1ul << (20 + i)) - 1 == maxAmpduLength)
441  {
443  return;
444  }
445  }
446  NS_ABORT_MSG ("Invalid A-MPDU Max Length value");
447 }
448 
449 void
451 {
452  NS_ASSERT (mcs >= 7 && mcs <= 11);
453  m_highestMcsSupported = mcs - 7;
454 }
455 
456 void
458 {
459  NS_ASSERT (nss >= 1 && nss <= 8);
460  m_highestNssSupportedM1 = nss - 1;
461 }
462 
463 uint8_t
465 {
466  return m_channelWidthSet;
467 }
468 
469 uint8_t
471 {
472  return m_heLtfAndGiForHePpdus;
473 }
474 
475 uint8_t
477 {
478  return m_highestMcsSupported + 7;
479 }
480 
481 uint8_t
483 {
484  return m_highestNssSupportedM1 + 1;
485 }
486 
487 uint32_t
489 {
490  return (1ul << (20 + m_maxAmpduLengthExponent)) - 1;
491 }
492 
493 std::ostream &
494 operator << (std::ostream &os, const HeCapabilities &HeCapabilities)
495 {
501  return os;
502 }
503 
504 } //namespace ns3
uint8_t m_4TimesHeLtfAnd800NsGiSupportForHePpdus
4 times HE-LFT and 800ns GI support for HE-PPDUs
uint8_t m_rxControlFrameToMultiBss
receive control frame to multi-BSS
uint8_t m_beamformeeStsForSmallerOrEqualThan80Mhz
beam formee STS for < 80 MHz
uint8_t m_heLtfAndGiForNdp
HE-LTF and GI for NDP.
uint8_t m_srpBasedSrSupport
SRP based SR support.
uint8_t m_bsrpAmpduAggregation
BSRP A-MPDU aggregation.
uint8_t GetChannelWidthSet(void) const
Get channel width set.
uint32_t ReadU32(void)
Definition: buffer.cc:972
uint8_t m_ngEqual16ForMuFeedbackSupport
equal 16 for MU feedback
Buffer::Iterator Serialize(Buffer::Iterator i) const
Serialize entire IE including Element ID and length fields.
uint8_t m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz
of sounding dimensions for < 80 MHz
uint8_t m_ackEnabledMultiTidAggregationSupport
ack enabled multi-TID aggregation support
uint8_t m_minimumFragmentSize
minimum fragment size
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition: abort.h:50
uint8_t m_beamformeeStsForLargerThan80Mhz
beamformee STS for > 80MHz
uint8_t m_ulMuResponseSchedulingSupport
UL MU response scheduling support.
bool IsSupportedRxMcs(uint8_t mcs) const
Is RX MCS supported.
uint8_t m_muCascadeSupport
MU cascade support.
uint8_t GetHePhyCapabilitiesInfo2() const
Return the last octet of the HE PHY Capabilities Info field in the HE Capabilities information elemen...
uint16_t GetSupportedMcsAndNss() const
Return the MCS and NSS field in the HE Capabilities information element.
void SetHeSupported(uint8_t heSupported)
Set HE supported.
WifiInformationElementId ElementId() const
def start()
Definition: core.py:1855
uint8_t m_broadcastTwtSupport
broadcast TXT support
uint8_t m_twtResponderSupport
TWT responder support.
uint8_t m_heLinkAdaptation
HE link adaptation.
uint8_t m_maximumNumberOfFragmentedMsdus
maximum number of fragmentation MSDUs
#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
void SetHighestNssSupported(uint8_t nss)
Set highest NSS supported.
uint8_t m_qtpSupport
QTP support.
uint8_t m_highestNssSupportedM1
highest NSS support M1
uint8_t m_dcmEncodingTx
DCM encoding transmit.
uint8_t DeserializeInformationField(Buffer::Iterator start, uint8_t length)
Deserialize information (i.e., the body of the IE, not including the Element ID and length octets) ...
uint8_t m_plusHtcHeSupport
HTC HE support.
iterator in a Buffer instance
Definition: buffer.h:98
uint8_t m_dualBandSupport
dual band support
void SetChannelWidthSet(uint8_t channelWidthSet)
Set channel width set.
uint8_t m_nstsTotalForLargerThan80Mhz
STS total for > 80 MHz.
void SetHeLtfAndGiForHePpdus(uint8_t heLtfAndGiForHePpdus)
Set HE LTF and GI for HE PDPUs.
void SetHePhyCapabilitiesInfo(uint64_t ctrl1, uint8_t ctrl2)
Set the HE PHY Capabilities Info field in the HE Capabilities information element.
uint16_t GetSerializedSize() const
uint8_t m_deviceClass
device class
uint8_t m_aBqrSupport
ABQR support.
uint8_t m_ulMu
UL MU.
void SetHighestMcsSupported(uint8_t mcs)
Set highest MCS supported.
uint64_t GetHePhyCapabilitiesInfo1() const
Return the 8 first octets of the HE PHY Capabilities Info field in the HE Capabilities information el...
uint8_t m_omControlSupport
operation mode control support
uint8_t m_suBeamformee
SU beamformee.
uint8_t m_stbcTxAndRx
STBC transmit and receive.
uint8_t m_multiTidAggregationSupport
multi-TID aggregation support
uint8_t m_heSupported
This is used to decide if this element should be added to the frame or not.
uint8_t m_fragmentationSupport
fragmentation support
uint8_t m_beamformingFeedbackWithTriggerFrame
beamforming feedback with trigger frame
uint8_t GetInformationFieldSize() const
Length of serialized information (i.e., the length of the body of the IE, not including the Element I...
WifiInformationElementId ElementIdExt() const
std::vector< uint8_t > m_txBwMap
transmit BW map
uint8_t m_32bitBaBitmapSupport
32-bit BA bitmap support
uint8_t m_ngEqual16ForSuFeedbackSupport
equal 16 for SU feedback
void SetHeMacCapabilitiesInfo(uint32_t ctrl1, uint8_t ctrl2)
Set the HE MAC Capabilities Info field in the HE Capabilities information element.
uint8_t m_doppler
Doppler.
uint8_t m_allAckSupport
all Ack support
uint8_t m_ldpcCodingInPayload
LDPC coding in payload.
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Definition: angles.cc:42
uint8_t m_muBeamformer
MU beamformer.
uint8_t m_heErSuPpduPayload
HE-ER-SU-PPDU payload.
uint8_t m_ulHeMuPpduPayloadSupport
UL HE-MU-PDPU payload support.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t m_preamblePuncturingRx
preamble puncturing receive
uint32_t GetHeMacCapabilitiesInfo1() const
Return the 4 first octets of the HE MAC Capabilities Info field in the HE Capabilities information el...
#define IE_EXT_HE_CAPABILITIES
uint16_t GetSerializedSize() const
Get the size of the serialized IE including Element ID and length fields.
bool IsSupportedTxMcs(uint8_t mcs) const
Is RX MCS supported.
uint8_t GetHeMacCapabilitiesInfo2() const
Return the last octet of the HE MAC Capabilities Info field in the HE Capabilities information elemen...
uint8_t GetHighestMcsSupported(void) const
Get highest MCS supported.
uint8_t GetHeLtfAndGiForHePpdus(void) const
Get HE LTF and GI for HE PDPUs.
uint32_t GetMaxAmpduLength(void) const
Return the maximum A-MPDU length.
uint8_t m_codebookSize42ForSuSupport
codebook size 42 for SU
uint8_t m_channelWidthSet
channel width set
uint8_t m_codebookSize75ForSuSupport
codebook size 75 for SU
uint8_t m_triggerFrameMacPaddingDuration
trigger frame MAC padding duration
uint8_t m_amsduFragmentationSupport
A-MSDU fragmentation support.
void SetMaxAmpduLength(uint32_t maxAmpduLength)
Set the maximum AMPDU length.
void SerializeInformationField(Buffer::Iterator start) const
Serialize information (i.e., the body of the IE, not including the Element ID and length octets) ...
uint8_t m_maxAmpduLengthExponent
maximum A-MPDU length exponent
uint8_t m_heLtfAndGiForHePpdus
HE-LTF and GI for HE-PPDUs.
#define IE_EXTENSION
uint8_t m_highestMcsSupported
highest MCS support
uint8_t m_flexibleTwtScheduleSupport
flexible TWT schedule support
uint8_t m_dlMuMimoOnPartialBandwidth
DL MU-MIMO on partial bandwidth.
uint8_t ReadU8(void)
Definition: buffer.h:1021
uint8_t WifiInformationElementId
This type is used to represent an Information Element ID.
uint8_t m_powerBoostFactorAlphaSupport
power boost factor alpha support
Buffer::Iterator Serialize(Buffer::Iterator start) const
uint64_t ReadLsbtohU64(void)
Definition: buffer.cc:1093
void SetSupportedMcsAndNss(uint16_t ctrl)
Set the MCS and NSS field in the HE Capabilities information element.
uint8_t m_ofdmaRaSupport
OFDMA RA support.
uint8_t m_aBsrSupport
BSR support.
uint8_t m_twtRequesterSupport
TWT requester support.
uint8_t m_dcmEncodingRx
DCM encoding receive.
uint8_t m_suBeamformer
SU beamformer.
The IEEE 802.11ax HE Capabilities.
std::vector< uint8_t > m_rxBwMap
receive BW map
uint8_t m_groupAddressedMultiStaBlockAckInDlMuSupport
group addressed multi-STA BlockAck in DL support
uint32_t ReadLsbtohU32(void)
Definition: buffer.cc:1076
uint8_t GetHighestNssSupported(void) const
Get highest NSS supported.
uint8_t m_ppeThresholdPresent
PPE threshold present.
uint8_t m_numberOfSoundingDimensionsForLargerThan80Mhz
of sounding dimensions for > 80 MHz
uint8_t m_nstsTotalForSmallerOrEqualThan80Mhz
STS total for < 80 MHz.