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 #include <algorithm>
23 
24 namespace ns3 {
25 
27  : m_plusHtcHeSupport (0),
28  m_twtRequesterSupport (0),
29  m_twtResponderSupport (0),
30  m_fragmentationSupport (0),
31  m_maximumNumberOfFragmentedMsdus (0),
32  m_minimumFragmentSize (0),
33  m_triggerFrameMacPaddingDuration (0),
34  m_multiTidAggregationSupport (0),
35  m_heLinkAdaptation (0),
36  m_allAckSupport (0),
37  m_ulMuResponseSchedulingSupport (0),
38  m_aBsrSupport (0),
39  m_broadcastTwtSupport (0),
40  m_32bitBaBitmapSupport (0),
41  m_muCascadeSupport (0),
42  m_ackEnabledMultiTidAggregationSupport (0),
43  m_groupAddressedMultiStaBlockAckInDlMuSupport (0),
44  m_omControlSupport (0),
45  m_ofdmaRaSupport (0),
46  m_maxAmpduLengthExponent (0),
47  m_amsduFragmentationSupport (0),
48  m_flexibleTwtScheduleSupport (0),
49  m_rxControlFrameToMultiBss (0),
50  m_bsrpAmpduAggregation (0),
51  m_qtpSupport (0),
52  m_aBqrSupport (0),
53  m_dualBandSupport (0),
54  m_channelWidthSet (0),
55  m_preamblePuncturingRx (0),
56  m_deviceClass (0),
57  m_ldpcCodingInPayload (0),
58  m_heLtfAndGiForHePpdus (0),
59  m_heLtfAndGiForNdp (0),
60  m_stbcTxAndRx (0),
61  m_doppler (0),
62  m_ulMu (0),
63  m_dcmEncodingTx (0),
64  m_dcmEncodingRx (0),
65  m_ulHeMuPpduPayloadSupport (0),
66  m_suBeamformer (0),
67  m_suBeamformee (0),
68  m_muBeamformer (0),
69  m_beamformeeStsForSmallerOrEqualThan80Mhz (0),
70  m_nstsTotalForSmallerOrEqualThan80Mhz (0),
71  m_beamformeeStsForLargerThan80Mhz (0),
72  m_nstsTotalForLargerThan80Mhz (0),
73  m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz (0),
74  m_numberOfSoundingDimensionsForLargerThan80Mhz (0),
75  m_ngEqual16ForSuFeedbackSupport (0),
76  m_ngEqual16ForMuFeedbackSupport (0),
77  m_codebookSize42ForSuSupport (0),
78  m_codebookSize75ForSuSupport (0),
79  m_beamformingFeedbackWithTriggerFrame (0),
80  m_heErSuPpduPayload (0),
81  m_dlMuMimoOnPartialBandwidth (0),
82  m_ppeThresholdPresent (0),
83  m_srpBasedSrSupport (0),
84  m_powerBoostFactorAlphaSupport (0),
85  m_4TimesHeLtfAnd800NsGiSupportForHePpdus (0),
86  m_highestNssSupportedM1 (0),
87  m_highestMcsSupported (0),
88  m_heSupported (0)
89 {
90  m_txBwMap.resize (8,0);
91  m_rxBwMap.resize (8,0);
92 }
93 
96 {
97  return IE_EXTENSION;
98 }
99 
102 {
103  return IE_EXT_HE_CAPABILITIES;
104 }
105 
106 void
107 HeCapabilities::SetHeSupported (uint8_t heSupported)
108 {
109  m_heSupported = heSupported;
110 }
111 
112 uint8_t
114 {
115  //we should not be here if HE is not supported
116  NS_ASSERT (m_heSupported > 0);
117  return 19; //todo: variable length!
118 }
119 
122 {
123  if (m_heSupported < 1)
124  {
125  return i;
126  }
128 }
129 
130 uint16_t
132 {
133  if (m_heSupported < 1)
134  {
135  return 0;
136  }
138 }
139 
140 void
142 {
143  if (m_heSupported == 1)
144  {
145  //write the corresponding value for each bit
146  start.WriteHtolsbU32 (GetHeMacCapabilitiesInfo1 ());
147  start.WriteU8 (GetHeMacCapabilitiesInfo2 ());
148  start.WriteHtolsbU64 (GetHePhyCapabilitiesInfo1 ());
149  start.WriteU8 (GetHePhyCapabilitiesInfo2 ());
150  start.WriteHtolsbU32 (GetSupportedMcsAndNss ());
151  //todo: add another 32-bits field if 160 MHz channel is supported (variable length)
152  //todo: optional PPE Threshold field (variable length)
153  }
154 }
155 
156 uint8_t
158 {
160  uint32_t macCapabilities1 = i.ReadLsbtohU32 ();
161  uint8_t macCapabilities2 = i.ReadU8 ();
162  uint64_t phyCapabilities1 = i.ReadLsbtohU64 ();
163  uint8_t phyCapabilities2 = i.ReadU8 ();
164  uint32_t mcsset = i.ReadU32 ();
165  SetHeMacCapabilitiesInfo (macCapabilities1, macCapabilities2);
166  SetHePhyCapabilitiesInfo (phyCapabilities1, phyCapabilities2);
167  SetSupportedMcsAndNss (mcsset);
168  //todo: add another 32-bits field if 160 MHz channel is supported (variable length)
169  //todo: optional PPE Threshold field (variable length)
170  return length;
171 }
172 
173 void
174 HeCapabilities::SetHeMacCapabilitiesInfo (uint32_t ctrl1, uint8_t ctrl2)
175 {
176  m_plusHtcHeSupport = ctrl1 & 0x01;
177  m_twtRequesterSupport = (ctrl1 >> 1) & 0x01;
178  m_twtResponderSupport = (ctrl1 >> 2) & 0x01;
179  m_fragmentationSupport = (ctrl1 >> 3) & 0x03;
180  m_maximumNumberOfFragmentedMsdus = (ctrl1 >> 5) & 0x07;
181  m_minimumFragmentSize = (ctrl1 >> 8) & 0x03;
182  m_triggerFrameMacPaddingDuration = (ctrl1 >> 10) & 0x03;
183  m_multiTidAggregationSupport = (ctrl1 >> 12) & 0x07;
184  m_heLinkAdaptation = (ctrl1 >> 15) & 0x03;
185  m_allAckSupport = (ctrl1 >> 17) & 0x01;
186  m_ulMuResponseSchedulingSupport = (ctrl1 >> 18) & 0x01;
187  m_aBsrSupport = (ctrl1 >> 19) & 0x01;
188  m_broadcastTwtSupport = (ctrl1 >> 20) & 0x01;
189  m_32bitBaBitmapSupport = (ctrl1 >> 21) & 0x01;
190  m_muCascadeSupport = (ctrl1 >> 22) & 0x01;
191  m_ackEnabledMultiTidAggregationSupport = (ctrl1 >> 23) & 0x01;
192  m_groupAddressedMultiStaBlockAckInDlMuSupport = (ctrl1 >> 24) & 0x01;
193  m_omControlSupport = (ctrl1 >> 25) & 0x03;
194  m_ofdmaRaSupport = (ctrl1 >> 26) & 0x01;
195  m_maxAmpduLengthExponent = (ctrl1 >> 27) & 0x03;
196  m_amsduFragmentationSupport = (ctrl1 >> 29) & 0x01;
197  m_flexibleTwtScheduleSupport = (ctrl1 >> 30) & 0x01;
198  m_rxControlFrameToMultiBss = (ctrl1 >> 31) & 0x01;
199  m_bsrpAmpduAggregation = ctrl2 & 0x01;
200  m_qtpSupport = (ctrl2 >> 1) & 0x01;
201  m_aBqrSupport = (ctrl2 >> 2) & 0x01;
202 }
203 
204 uint32_t
206 {
207  uint32_t val = 0;
208  val |= m_plusHtcHeSupport & 0x01;
209  val |= (m_twtRequesterSupport & 0x01) << 1;
210  val |= (m_twtResponderSupport & 0x01) << 2;
211  val |= (m_fragmentationSupport & 0x03) << 3;
212  val |= (m_maximumNumberOfFragmentedMsdus & 0x07) << 5;
213  val |= (m_minimumFragmentSize & 0x03) << 8;
214  val |= (m_triggerFrameMacPaddingDuration & 0x03) << 10;
215  val |= (m_multiTidAggregationSupport & 0x07) << 12;
216  val |= (m_heLinkAdaptation & 0x03) << 15;
217  val |= (m_allAckSupport & 0x01) << 17;
218  val |= (m_ulMuResponseSchedulingSupport & 0x01) << 18;
219  val |= (m_aBsrSupport & 0x01) << 19;
220  val |= (m_broadcastTwtSupport & 0x01) << 20;
221  val |= (m_32bitBaBitmapSupport & 0x01) << 21;
222  val |= (m_muCascadeSupport & 0x01) << 22;
223  val |= (m_ackEnabledMultiTidAggregationSupport & 0x01) << 23;
224  val |= (m_groupAddressedMultiStaBlockAckInDlMuSupport & 0x01) << 24;
225  val |= (m_omControlSupport & 0x03) << 25;
226  val |= (m_ofdmaRaSupport & 0x01) << 26;
227  val |= (m_maxAmpduLengthExponent & 0x03) << 27;
228  val |= (m_amsduFragmentationSupport & 0x01) << 29;
229  val |= (m_flexibleTwtScheduleSupport & 0x01) << 30;
230  val |= (m_rxControlFrameToMultiBss & 0x01) << 31;
231  return val;
232 }
233 
234 uint8_t
236 {
237  uint8_t val = 0;
238  val |= m_bsrpAmpduAggregation & 0x01;
239  val |= (m_qtpSupport & 0x01) << 1;
240  val |= (m_aBqrSupport & 0x01) << 2;
241  return val;
242 }
243 
244 void
245 HeCapabilities::SetHePhyCapabilitiesInfo (uint64_t ctrl1, uint8_t ctrl2)
246 {
247  m_dualBandSupport = ctrl1 & 0x01;
248  m_channelWidthSet = (ctrl1 >> 1) & 0x7f;
249  m_preamblePuncturingRx = (ctrl1 >> 8) & 0x0f;
250  m_deviceClass = (ctrl1 >> 12) & 0x01;
251  m_ldpcCodingInPayload = (ctrl1 >> 13) & 0x01;
252  m_heLtfAndGiForHePpdus = (ctrl1 >> 14) & 0x03;
253  m_heLtfAndGiForNdp = (ctrl1 >> 16) & 0x03;
254  m_stbcTxAndRx = (ctrl1 >> 18) & 0x03;
255  m_doppler = (ctrl1 >> 20) & 0x03;
256  m_ulMu = (ctrl1 >> 22) & 0x03;
257  m_dcmEncodingTx = (ctrl1 >> 24) & 0x0f;
258  m_dcmEncodingRx = (ctrl1 >> 27) & 0x0f;
259  m_ulHeMuPpduPayloadSupport = (ctrl1 >> 30) & 0x01;
260  m_suBeamformer = (ctrl1 >> 31) & 0x01;
261  m_suBeamformee = (ctrl1 >> 32) & 0x01;
262  m_muBeamformer = (ctrl1 >> 33) & 0x01;
263  m_beamformeeStsForSmallerOrEqualThan80Mhz = (ctrl1 >> 34) & 0x07;
264  m_nstsTotalForSmallerOrEqualThan80Mhz = (ctrl1 >> 37) & 0x07;
265  m_beamformeeStsForLargerThan80Mhz = (ctrl1 >> 40) & 0x07;
266  m_nstsTotalForLargerThan80Mhz = (ctrl1 >> 43) & 0x07;
268  m_numberOfSoundingDimensionsForLargerThan80Mhz = (ctrl1 >> 49) & 0x07;
269  m_ngEqual16ForSuFeedbackSupport = (ctrl1 >> 52) & 0x01;
270  m_ngEqual16ForMuFeedbackSupport = (ctrl1 >> 53) & 0x01;
271  m_codebookSize42ForSuSupport = (ctrl1 >> 54) & 0x01;
272  m_codebookSize75ForSuSupport = (ctrl1 >> 55) & 0x01;
273  m_beamformingFeedbackWithTriggerFrame = (ctrl1 >> 56) & 0x07;
274  m_heErSuPpduPayload = (ctrl1 >> 59) & 0x01;
275  m_dlMuMimoOnPartialBandwidth = (ctrl1 >> 60) & 0x01;
276  m_ppeThresholdPresent = (ctrl1 >> 61) & 0x01;
277  m_srpBasedSrSupport = (ctrl1 >> 62) & 0x01;
278  m_powerBoostFactorAlphaSupport = (ctrl1 >> 63) & 0x01;
280 }
281 
282 uint64_t
284 {
285  uint64_t val = 0;
286  val |= m_dualBandSupport & 0x01;
287  val |= (m_channelWidthSet & 0x7f) << 1;
288  val |= (m_preamblePuncturingRx & 0x0f) << 8;
289  val |= (m_deviceClass & 0x01) << 12;
290  val |= (m_ldpcCodingInPayload & 0x01) << 13;
291  val |= (m_heLtfAndGiForHePpdus & 0x03) << 14;
292  val |= (m_heLtfAndGiForNdp & 0x03) << 16;
293  val |= (m_stbcTxAndRx & 0x03) << 18;
294  val |= (m_doppler & 0x03) << 20;
295  val |= (m_ulMu & 0x03) << 22;
296  val |= (m_dcmEncodingTx & 0x0f) << 24;
297  val |= (m_dcmEncodingRx & 0x0f) << 27;
298  val |= (m_ulHeMuPpduPayloadSupport & 0x01) << 30;
299  val |= (m_suBeamformer & 0x01) << 31;
300  val |= (static_cast<uint64_t> (m_suBeamformee) & 0x01) << 32;
301  val |= (static_cast<uint64_t> (m_muBeamformer) & 0x01) << 33;
302  val |= (static_cast<uint64_t> (m_beamformeeStsForSmallerOrEqualThan80Mhz) & 0x07) << 34;
303  val |= (static_cast<uint64_t> (m_nstsTotalForSmallerOrEqualThan80Mhz) & 0x07) << 37;
304  val |= (static_cast<uint64_t> (m_beamformeeStsForLargerThan80Mhz) & 0x07) << 40;
305  val |= (static_cast<uint64_t> (m_nstsTotalForLargerThan80Mhz) & 0x07) << 43;
306  val |= (static_cast<uint64_t> (m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz) & 0x07) << 46;
307  val |= (static_cast<uint64_t> (m_numberOfSoundingDimensionsForLargerThan80Mhz) & 0x07) << 49;
308  val |= (static_cast<uint64_t> (m_ngEqual16ForSuFeedbackSupport) & 0x01) << 52;
309  val |= (static_cast<uint64_t> (m_ngEqual16ForMuFeedbackSupport) & 0x01) << 53;
310  val |= (static_cast<uint64_t> (m_codebookSize42ForSuSupport) & 0x01) << 54;
311  val |= (static_cast<uint64_t> (m_codebookSize75ForSuSupport) & 0x01) << 55;
312  val |= (static_cast<uint64_t> (m_beamformingFeedbackWithTriggerFrame) & 0x07) << 56;
313  val |= (static_cast<uint64_t> (m_heErSuPpduPayload) & 0x01) << 59;
314  val |= (static_cast<uint64_t> (m_dlMuMimoOnPartialBandwidth) & 0x01) << 60;
315  val |= (static_cast<uint64_t> (m_ppeThresholdPresent) & 0x01) << 61;
316  val |= (static_cast<uint64_t> (m_srpBasedSrSupport) & 0x01) << 62;
317  val |= (static_cast<uint64_t> (m_powerBoostFactorAlphaSupport) & 0x01) << 63;
318  return val;
319 }
320 
321 uint8_t
323 {
324  uint8_t val = 0;
326  return val;
327 }
328 
329 void
331 {
332  m_highestNssSupportedM1 = ctrl & 0x07;
333  m_highestMcsSupported = (ctrl >> 3) & 0x07;
335  uint8_t i;
336  for (i = 0; i < 5; i++)
337  {
338  m_txBwMap[i] = (ctrl >> (6 + i)) & 0x01;
339  }
340  for (i = 0; i < 5; i++)
341  {
342  m_rxBwMap[i] = (ctrl >> (11 + i)) & 0x01;
343  }
344  //todo: MCS NSS Descriptors
345 }
346 
347 uint16_t
349 {
350  uint16_t val = 0;
351  val |= m_highestNssSupportedM1 & 0x07;
352  val |= (m_highestMcsSupported & 0x07) << 3;
353  uint8_t i;
354  for (i = 0; i < 5; i++)
355  {
356  val |= (m_txBwMap[i] & 0x01) << (6 + 1);
357  }
358  for (i = 0; i < 5; i++)
359  {
360  val |= (m_rxBwMap[i] & 0x01) << (11 + 1);
361  }
362  //todo: MCS NSS Descriptors
363  return val;
364 }
365 
366 //todo: PPE threshold
367 
368 bool
370 {
371  NS_ASSERT (mcs >= 0 && mcs <= 11);
372  if (mcs <= 7)
373  {
374  return true;
375  }
376  if (mcs == 8 && m_highestMcsSupported >= 1)
377  {
378  return true;
379  }
380  if (mcs == 9 && m_highestMcsSupported >= 2)
381  {
382  return true;
383  }
384  if (mcs == 10 && m_highestMcsSupported >= 3)
385  {
386  return true;
387  }
388  if (mcs == 11 && m_highestMcsSupported == 4)
389  {
390  return true;
391  }
392  return false;
393 }
394 
395 bool
397 {
398  NS_ASSERT (mcs >= 0 && mcs <= 11);
399  if (mcs <= 7)
400  {
401  return true;
402  }
403  if (mcs == 8 && m_highestMcsSupported >= 1)
404  {
405  return true;
406  }
407  if (mcs == 9 && m_highestMcsSupported >= 2)
408  {
409  return true;
410  }
411  if (mcs == 10 && m_highestMcsSupported >= 3)
412  {
413  return true;
414  }
415  if (mcs == 11 && m_highestMcsSupported == 4)
416  {
417  return true;
418  }
419  return false;
420 }
421 
422 void
423 HeCapabilities::SetChannelWidthSet (uint8_t channelWidthSet)
424 {
425  NS_ASSERT (channelWidthSet <= 0x2f);
426  m_channelWidthSet = channelWidthSet;
427 }
428 
429 void
430 HeCapabilities::SetLdpcCodingInPayload (uint8_t ldpcCodingInPayload)
431 {
432  m_ldpcCodingInPayload = ldpcCodingInPayload;
433 }
434 
435 void
436 HeCapabilities::SetHeLtfAndGiForHePpdus (uint8_t heLtfAndGiForHePpdus)
437 {
438  NS_ASSERT (heLtfAndGiForHePpdus <= 0x03);
439  m_heLtfAndGiForHePpdus = heLtfAndGiForHePpdus;
440 }
441 
442 void
443 HeCapabilities::SetMaxAmpduLength (uint32_t maxAmpduLength)
444 {
445  for (uint8_t i = 0; i <= 3; i++)
446  {
447  if ((1ul << (20 + i)) - 1 == maxAmpduLength)
448  {
450  return;
451  }
452  }
453  NS_ABORT_MSG ("Invalid A-MPDU Max Length value");
454 }
455 
456 void
458 {
459  NS_ASSERT (mcs >= 7 && mcs <= 11);
460  m_highestMcsSupported = mcs - 7;
461 }
462 
463 void
465 {
466  NS_ASSERT (nss >= 1 && nss <= 8);
467  m_highestNssSupportedM1 = nss - 1;
468 }
469 
470 uint8_t
472 {
473  return m_channelWidthSet;
474 }
475 
476 uint8_t
478 {
479  return m_ldpcCodingInPayload;
480 }
481 
482 uint8_t
484 {
485  return m_heLtfAndGiForHePpdus;
486 }
487 
488 uint8_t
490 {
491  return m_highestMcsSupported + 7;
492 }
493 
494 uint8_t
496 {
497  return m_highestNssSupportedM1 + 1;
498 }
499 
500 uint32_t
502 {
503  return std::min<uint32_t> ((1ul << (20 + m_maxAmpduLengthExponent)) - 1, 6500631);
504 }
505 
506 std::ostream &
507 operator << (std::ostream &os, const HeCapabilities &HeCapabilities)
508 {
514  return os;
515 }
516 
517 } //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
virtual Buffer::Iterator Serialize(Buffer::Iterator i) const
Serialize entire IE including Element ID and length fields.
uint8_t m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz
uint8_t m_ackEnabledMultiTidAggregationSupport
ack enabled multi-TID aggregation support
Buffer::Iterator Serialize(Buffer::Iterator start) const override
Serialize entire IE including Element ID and length fields.
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.
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) override
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.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:137
void SetHePhyCapabilitiesInfo(uint64_t ctrl1, uint8_t ctrl2)
Set the HE PHY Capabilities Info field in the HE Capabilities information element.
uint8_t m_deviceClass
device class
uint8_t m_aBqrSupport
ABQR support.
WifiInformationElementId ElementIdExt() const override
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.
uint16_t GetSerializedSize() const override
Get the size of the serialized IE including Element ID and length fields.
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
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.
uint8_t m_muBeamformer
MU beamformer.
uint8_t m_heErSuPpduPayload
HE-ER-SU-PPDU payload.
WifiInformationElementId ElementId() const override
uint8_t m_ulHeMuPpduPayloadSupport
UL HE-MU-PDPU payload support.
void SetLdpcCodingInPayload(uint8_t ldpcCodingInPayload)
Set indication whether the transmission and reception of LDPC encoded packets is supported.
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
virtual uint16_t GetSerializedSize() const
Get the size of the serialized IE including Element ID and length fields.
uint8_t GetInformationFieldSize() const override
Length of serialized information (i.e., the length of the body of the IE, not including the Element I...
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.
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
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 GetLdpcCodingInPayload(void) const
Indicates support for the transmission and reception of LDPC encoded packets.
uint8_t GetHighestNssSupported(void) const
Get highest NSS supported.
uint8_t m_ppeThresholdPresent
PPE threshold present.
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_numberOfSoundingDimensionsForLargerThan80Mhz
uint8_t m_nstsTotalForSmallerOrEqualThan80Mhz
STS total for < 80 MHz.