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_omiAcontrolSupport (0),
44  m_ofdmaRaSupport (0),
45  m_maximumAmpduLengthExponent (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_HE_CAPABILITIES;
97 }
98 
99 void
100 HeCapabilities::SetHeSupported (uint8_t hesupported)
101 {
102  m_heSupported = hesupported;
103 }
104 
105 uint8_t
107 {
108  //we should not be here if ht is not supported
109  NS_ASSERT (m_heSupported > 0);
110  return 16; //todo: variable length!
111 }
112 
115 {
116  if (m_heSupported < 1)
117  {
118  return i;
119  }
121 }
122 
123 uint16_t
125 {
126  if (m_heSupported < 1)
127  {
128  return 0;
129  }
131 }
132 
133 void
135 {
136  if (m_heSupported == 1)
137  {
138  //write the corresponding value for each bit
143  start.WriteU16 (GetSupportedMcsAndNss ()); //todo: variable length
144  //todo: optional PPE Threshold field
145  }
146 }
147 
148 uint8_t
150 {
152  uint32_t macCapabilities1 = i.ReadLsbtohU32 ();
153  uint8_t macCapabilities2 = i.ReadU8 ();
154  uint64_t phyCapabilities1 = i.ReadLsbtohU64 ();
155  uint8_t phyCapabilities2 = i.ReadU8 ();
156  uint16_t mcsset = i.ReadU16 (); //todo: variable length
157  SetHeMacCapabilitiesInfo (macCapabilities1, macCapabilities2);
158  SetHePhyCapabilitiesInfo (phyCapabilities1, phyCapabilities2);
159  SetSupportedMcsAndNss (mcsset);
160  //todo: optional PPE Threshold field
161  return length;
162 }
163 
164 void
165 HeCapabilities::SetHeMacCapabilitiesInfo (uint32_t ctrl1, uint8_t ctrl2)
166 {
167  m_plusHtcHeSupport = ctrl1 & 0x01;
168  m_twtRequesterSupport = (ctrl1 >> 1) & 0x01;
169  m_twtResponderSupport = (ctrl1 >> 2) & 0x01;
170  m_fragmentationSupport = (ctrl1 >> 3) & 0x03;
171  m_maximumNumberOfFragmentedMsdus = (ctrl1 >> 5) & 0x07;
172  m_minimumFragmentSize = (ctrl1 >> 8) & 0x03;
173  m_triggerFrameMacPaddingDuration = (ctrl1 >> 10) & 0x03;
174  m_multiTidAggregationSupport = (ctrl1 >> 12) & 0x07;
175  m_heLinkAdaptation = (ctrl1 >> 15) & 0x03;
176  m_allAckSupport = (ctrl1 >> 17) & 0x01;
177  m_ulMuResponseSchedulingSupport = (ctrl1 >> 18) & 0x01;
178  m_aBsrSupport = (ctrl1 >> 19) & 0x01;
179  m_broadcastTwtSupport = (ctrl1 >> 20) & 0x01;
180  m_32bitBaBitmapSupport = (ctrl1 >> 21) & 0x01;
181  m_muCascadeSupport = (ctrl1 >> 22) & 0x01;
182  m_ackEnabledMultiTidAggregationSupport = (ctrl1 >> 23) & 0x01;
183  m_groupAddressedMultiStaBlockAckInDlMuSupport = (ctrl1 >> 24) & 0x01;
184  m_omiAcontrolSupport = (ctrl1 >> 25) & 0x03;
185  m_ofdmaRaSupport = (ctrl1 >> 26) & 0x01;
186  m_maximumAmpduLengthExponent = (ctrl1 >> 27) & 0x03;
187  m_amsduFragmentationSupport = (ctrl1 >> 29) & 0x01;
188  m_flexibleTwtScheduleSupport = (ctrl1 >> 30) & 0x01;
189  m_rxControlFrameToMultiBss = (ctrl1 >> 31) & 0x01;
190  m_bsrpAmpduAggregation = ctrl2 & 0x01;
191  m_qtpSupport = (ctrl2 >> 1) & 0x01;
192  m_aBqrSupport = (ctrl2 >> 2) & 0x01;
193 }
194 
195 uint32_t
197 {
198  uint32_t val = 0;
199  val |= m_plusHtcHeSupport & 0x01;
200  val |= (m_twtRequesterSupport & 0x01) << 1;
201  val |= (m_twtResponderSupport & 0x01) << 2;
202  val |= (m_fragmentationSupport & 0x03) << 3;
203  val |= (m_maximumNumberOfFragmentedMsdus & 0x07) << 5;
204  val |= (m_minimumFragmentSize & 0x03) << 8;
205  val |= (m_triggerFrameMacPaddingDuration & 0x03) << 10;
206  val |= (m_multiTidAggregationSupport & 0x07) << 12;
207  val |= (m_heLinkAdaptation & 0x03) << 15;
208  val |= (m_allAckSupport & 0x01) << 17;
209  val |= (m_ulMuResponseSchedulingSupport & 0x01) << 18;
210  val |= (m_aBsrSupport & 0x01) << 19;
211  val |= (m_broadcastTwtSupport & 0x01) << 20;
212  val |= (m_32bitBaBitmapSupport & 0x01) << 21;
213  val |= (m_muCascadeSupport & 0x01) << 22;
214  val |= (m_ackEnabledMultiTidAggregationSupport & 0x01) << 23;
215  val |= (m_groupAddressedMultiStaBlockAckInDlMuSupport & 0x01) << 24;
216  val |= (m_omiAcontrolSupport & 0x03) << 25;
217  val |= (m_ofdmaRaSupport & 0x01) << 26;
218  val |= (m_maximumAmpduLengthExponent & 0x03) << 27;
219  val |= (m_amsduFragmentationSupport & 0x01) << 29;
220  val |= (m_flexibleTwtScheduleSupport & 0x01) << 30;
221  val |= (m_rxControlFrameToMultiBss & 0x01) << 31;
222  return val;
223 }
224 
225 uint8_t
227 {
228  uint8_t val = 0;
229  val |= m_bsrpAmpduAggregation & 0x01;
230  val |= (m_qtpSupport & 0x01) << 1;
231  val |= (m_aBqrSupport & 0x01) << 2;
232  return val;
233 }
234 
235 void
236 HeCapabilities::SetHePhyCapabilitiesInfo (uint64_t ctrl1, uint8_t ctrl2)
237 {
238  m_dualBandSupport = ctrl1 & 0x01;
239  m_channelWidthSet = (ctrl1 >> 1) & 0x7f;
240  m_preamblePuncturingRx = (ctrl1 >> 8) & 0x0f;
241  m_deviceClass = (ctrl1 >> 12) & 0x01;
242  m_ldpcCodingInPayload = (ctrl1 >> 13) & 0x01;
243  m_heLtfAndGiForHePpdus = (ctrl1 >> 14) & 0x03;
244  m_heLtfAndGiForNdp = (ctrl1 >> 16) & 0x03;
245  m_stbcTxAndRx = (ctrl1 >> 18) & 0x03;
246  m_doppler = (ctrl1 >> 20) & 0x03;
247  m_ulMu = (ctrl1 >> 22) & 0x03;
248  m_dcmEncodingTx = (ctrl1 >> 24) & 0x0f;
249  m_dcmEncodingRx = (ctrl1 >> 27) & 0x0f;
250  m_ulHeMuPpduPayloadSupport = (ctrl1 >> 30) & 0x01;
251  m_suBeamformer = (ctrl1 >> 31) & 0x01;
252  m_suBeamformee = (ctrl1 >> 32) & 0x01;
253  m_muBeamformer = (ctrl1 >> 33) & 0x01;
254  m_beamformeeStsForSmallerOrEqualThan80Mhz = (ctrl1 >> 34) & 0x07;
255  m_nstsTotalForSmallerOrEqualThan80Mhz = (ctrl1 >> 37) & 0x07;
256  m_beamformeeStsForLargerThan80Mhz = (ctrl1 >> 40) & 0x07;
257  m_nstsTotalForLargerThan80Mhz = (ctrl1 >> 43) & 0x07;
259  m_numberOfSoundingDimensionsForLargerThan80Mhz = (ctrl1 >> 49) & 0x07;
260  m_ngEqual16ForSuFeedbackSupport = (ctrl1 >> 52) & 0x01;
261  m_ngEqual16ForMuFeedbackSupport = (ctrl1 >> 53) & 0x01;
262  m_codebookSize42ForSuSupport = (ctrl1 >> 54) & 0x01;
263  m_codebookSize75ForSuSupport = (ctrl1 >> 55) & 0x01;
264  m_beamformingFeedbackWithTriggerFrame = (ctrl1 >> 56) & 0x07;
265  m_heErSuPpduPayload = (ctrl1 >> 59) & 0x01;
266  m_dlMuMimoOnPartialBandwidth = (ctrl1 >> 60) & 0x01;
267  m_ppeThresholdPresent = (ctrl1 >> 61) & 0x01;
268  m_srpBasedSrSupport = (ctrl1 >> 62) & 0x01;
269  m_powerBoostFactorAlphaSupport = (ctrl1 >> 63) & 0x01;
271 }
272 
273 uint64_t
275 {
276  uint64_t val = 0;
277  val |= m_dualBandSupport & 0x01;
278  val |= (m_channelWidthSet & 0x7f) << 1;
279  val |= (m_preamblePuncturingRx & 0x0f) << 8;
280  val |= (m_deviceClass & 0x01) << 12;
281  val |= (m_ldpcCodingInPayload & 0x01) << 13;
282  val |= (m_heLtfAndGiForHePpdus & 0x03) << 14;
283  val |= (m_heLtfAndGiForNdp & 0x03) << 16;
284  val |= (m_stbcTxAndRx & 0x03) << 18;
285  val |= (m_doppler & 0x03) << 20;
286  val |= (m_ulMu & 0x03) << 22;
287  val |= (m_dcmEncodingTx & 0x0f) << 24;
288  val |= (m_dcmEncodingRx & 0x0f) << 27;
289  val |= (m_ulHeMuPpduPayloadSupport & 0x01) << 30;
290  val |= (m_suBeamformer & 0x01) << 31;
291  val |= ((uint64_t)m_suBeamformee & 0x01) << 32;
292  val |= ((uint64_t)m_muBeamformer & 0x01) << 33;
293  val |= ((uint64_t)m_beamformeeStsForSmallerOrEqualThan80Mhz & 0x07) << 34;
294  val |= ((uint64_t)m_nstsTotalForSmallerOrEqualThan80Mhz & 0x07) << 37;
295  val |= ((uint64_t)m_beamformeeStsForLargerThan80Mhz & 0x07) << 40;
296  val |= ((uint64_t)m_nstsTotalForLargerThan80Mhz & 0x07) << 43;
297  val |= ((uint64_t)m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz & 0x07) << 46;
298  val |= ((uint64_t)m_numberOfSoundingDimensionsForLargerThan80Mhz & 0x07) << 49;
299  val |= ((uint64_t)m_ngEqual16ForSuFeedbackSupport & 0x01) << 52;
300  val |= ((uint64_t)m_ngEqual16ForMuFeedbackSupport & 0x01) << 53;
301  val |= ((uint64_t)m_codebookSize42ForSuSupport & 0x01) << 54;
302  val |= ((uint64_t)m_codebookSize75ForSuSupport & 0x01) << 55;
303  val |= ((uint64_t)m_beamformingFeedbackWithTriggerFrame & 0x07) << 56;
304  val |= ((uint64_t)m_heErSuPpduPayload & 0x01) << 59;
305  val |= ((uint64_t)m_dlMuMimoOnPartialBandwidth & 0x01) << 60;
306  val |= ((uint64_t)m_ppeThresholdPresent & 0x01) << 61;
307  val |= ((uint64_t)m_srpBasedSrSupport & 0x01) << 62;
308  val |= ((uint64_t)m_powerBoostFactorAlphaSupport & 0x01) << 63;
309  return val;
310 }
311 
312 uint8_t
314 {
315  uint8_t val = 0;
317  return val;
318 }
319 
320 void
322 {
323  m_highestNssSupportedM1 = ctrl & 0x07;
324  m_highestMcsSupported = (ctrl >> 3) & 0x07;
326  uint8_t i;
327  for (i = 0; i < 5; i++)
328  {
329  m_txBwMap[i] = (ctrl >> (6 + i)) & 0x01;
330  }
331  for (i = 0; i < 5; i++)
332  {
333  m_rxBwMap[i] = (ctrl >> (11 + i)) & 0x01;
334  }
335  //todo: MCS NSS Descriptors
336 }
337 
338 uint16_t
340 {
341  uint16_t val = 0;
342  val |= m_highestNssSupportedM1 & 0x07;
343  val |= (m_highestMcsSupported & 0x07) << 3;
344  uint8_t i;
345  for (i = 0; i < 5; i++)
346  {
347  val |= (m_txBwMap[i] & 0x01) << (6 + 1);
348  }
349  for (i = 0; i < 5; i++)
350  {
351  val |= (m_rxBwMap[i] & 0x01) << (11 + 1);
352  }
353  //todo: MCS NSS Descriptors
354  return val;
355 }
356 
357 //todo: PPE threshold
358 
359 bool
361 {
362  NS_ASSERT (mcs >= 0 && mcs <= 11);
363  if (mcs <= 7)
364  {
365  return true;
366  }
367  if (mcs == 8 && m_highestMcsSupported >= 1)
368  {
369  return true;
370  }
371  if (mcs == 9 && m_highestMcsSupported >= 2)
372  {
373  return true;
374  }
375  if (mcs == 10 && m_highestMcsSupported >= 3)
376  {
377  return true;
378  }
379  if (mcs == 11 && m_highestMcsSupported == 4)
380  {
381  return true;
382  }
383  return false;
384 }
385 
386 bool
388 {
389  NS_ASSERT (mcs >= 0 && mcs <= 11);
390  if (mcs <= 7)
391  {
392  return true;
393  }
394  if (mcs == 8 && m_highestMcsSupported >= 1)
395  {
396  return true;
397  }
398  if (mcs == 9 && m_highestMcsSupported >= 2)
399  {
400  return true;
401  }
402  if (mcs == 10 && m_highestMcsSupported >= 3)
403  {
404  return true;
405  }
406  if (mcs == 11 && m_highestMcsSupported == 4)
407  {
408  return true;
409  }
410  return false;
411 }
412 
413 void
414 HeCapabilities::SetChannelWidthSet (uint8_t channelWidthSet)
415 {
416  NS_ASSERT (channelWidthSet <= 0x2f);
417  m_channelWidthSet = channelWidthSet;
418 }
419 
420 void
421 HeCapabilities::SetHeLtfAndGiForHePpdus (uint8_t heLtfAndGiForHePpdus)
422 {
423  NS_ASSERT (heLtfAndGiForHePpdus <= 0x03);
424  m_heLtfAndGiForHePpdus = heLtfAndGiForHePpdus;
425 }
426 
427 void
429 {
430  NS_ASSERT (exponent <= 7);
431  m_maximumAmpduLengthExponent = exponent;
432 }
433 
434 void
436 {
437  NS_ASSERT (mcs >= 7 && mcs <= 11);
438  m_highestMcsSupported = mcs - 7;
439 }
440 
441 void
443 {
444  NS_ASSERT (nss >= 1 && nss <= 8);
445  m_highestNssSupportedM1 = nss - 1;
446 }
447 
448 uint8_t
450 {
451  return m_channelWidthSet;
452 }
453 
454 uint8_t
456 {
457  return m_heLtfAndGiForHePpdus;
458 }
459 
460 uint8_t
462 {
463  return m_highestMcsSupported + 7;
464 }
465 
466 uint8_t
468 {
469  return m_highestNssSupportedM1 + 1;
470 }
471 
473 
480 std::ostream &
481 operator << (std::ostream &os, const HeCapabilities &HeCapabilities)
482 {
483  os << HeCapabilities.GetHeMacCapabilitiesInfo1 () << "|"
484  << (uint16_t) HeCapabilities.GetHeMacCapabilitiesInfo2 () << "|"
485  << HeCapabilities.GetHePhyCapabilitiesInfo1 () << "|"
486  << (uint16_t) HeCapabilities.GetHePhyCapabilitiesInfo2 () << "|"
487  << HeCapabilities.GetSupportedMcsAndNss ();
488  return os;
489 }
490 
497 std::istream &operator >> (std::istream &is, HeCapabilities &HeCapabilities)
498 {
499  uint32_t c1;
500  uint8_t c2;
501  uint64_t c3;
502  uint8_t c4;
503  uint16_t c5;
504  is >> c1 >> c2 >> c3 >> c4 >> c5;
505  HeCapabilities.SetHeMacCapabilitiesInfo (c1, c2);
506  HeCapabilities.SetHePhyCapabilitiesInfo (c3, c4);
507  HeCapabilities.SetSupportedMcsAndNss (c5);
508  return is;
509 }
510 
511 } //namespace ns3
uint16_t ReadU16(void)
Definition: buffer.h:1029
uint8_t m_4TimesHeLtfAnd800NsGiSupportForHePpdus
4 times HE LFT and 800 HS GI support for HE PPDUs
uint8_t m_rxControlFrameToMultiBss
receive control frame to multi bias
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.
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
Definition: angles.cc:48
uint8_t m_bsrpAmpduAggregation
BSRP AMPDU aggregation.
uint8_t GetHeMacCapabilitiesInfo2() const
Return the last octet of the HE MAC Capabilties Info field in the HE Capabilities information element...
uint8_t m_ngEqual16ForMuFeedbackSupport
equal 16 for MU feedback
uint8_t m_numberOfSoundingDimensionsForSmallerOrEqualThan80Mhz
of sounding diemnsions for < 80 MHz
uint8_t m_ackEnabledMultiTidAggregationSupport
ack enabled multi TID aggregation suport
uint8_t m_minimumFragmentSize
minimum fragment size
uint8_t m_beamformeeStsForLargerThan80Mhz
beam formee STS for > 80MHz
uint8_t GetHeLtfAndGiForHePpdus(void) const
Get HE LTF and GI for HE PDPUs.
uint8_t m_ulMuResponseSchedulingSupport
UL MU response scheduling support.
uint8_t m_muCascadeSupport
MU cascade support.
#define ATTRIBUTE_HELPER_CPP(type)
Define the attribute value, accessor and checkers for class type.
def start()
Definition: core.py:1790
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 GetHighestNssSupported(void) const
Get highest NSS supported.
WifiInformationElementId ElementId() const
Get the wifi information element ID.
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 field.
uint8_t m_plusHtcHeSupport
HTC HE support.
uint16_t GetSerializedSize() const
Get the size of the serialized IE including Element ID and length fields.
iterator in a Buffer instance
Definition: buffer.h:98
uint8_t m_dualBandSupport
dual band support
uint8_t m_maximumAmpduLengthExponent
maximum AMPDU length exponenet
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 Capabilties Info field in the HE Capabilities information element. ...
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.
uint8_t m_suBeamformee
SU beam formee.
uint8_t m_stbcTxAndRx
STBC transmit and receive.
uint16_t GetSerializedSize() const
Set serialize size function.
uint64_t GetHePhyCapabilitiesInfo1() const
Return the 8 first octets of the HE PHY Capabilties Info field in the HE Capabilities information ele...
uint8_t m_multiTidAggregationSupport
multi TID aggregation support
void WriteU16(uint16_t data)
Definition: buffer.cc:873
uint8_t m_heSupported
This is used to decide if this element should be added to the frame or not.
uint8_t m_omiAcontrolSupport
OMI A control support.
uint8_t m_fragmentationSupport
fragmentation support
uint8_t m_beamformingFeedbackWithTriggerFrame
beam forming feedback with trigger frame
std::vector< uint8_t > m_txBwMap
transmit BW map
uint8_t m_32bitBaBitmapSupport
32bit BA bitmap support
uint8_t GetHighestMcsSupported(uint8_t mcs) const
Get highest MCS supported.
uint16_t GetSupportedMcsAndNss() const
Return the MCS and NSS field in the HE Capabilities information element.
uint8_t m_ngEqual16ForSuFeedbackSupport
equal 16 for SU feedback
void SetHeMacCapabilitiesInfo(uint32_t ctrl1, uint8_t ctrl2)
Set the HE MAC Capabilties Info field in the HE Capabilities information element. ...
void SetMaxAmpduLengthExponent(uint8_t exponent)
Set maximum AMPDU length exponent.
uint8_t m_doppler
doppler
uint8_t m_allAckSupport
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 beam former.
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
uint8_t GetInformationFieldSize() const
Get information field size.
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
void WriteU8(uint8_t data)
Definition: buffer.h:869
uint8_t m_amsduFragmentationSupport
AMSDU fragmentation support.
void WriteHtolsbU64(uint64_t data)
Definition: buffer.cc:929
void SetHeSupported(uint8_t hesupported)
Set HE supported.
uint8_t m_heLtfAndGiForHePpdus
HE LTF and GI for HE PDUs.
bool IsSupportedRxMcs(uint8_t mcs) const
Is reeive MCS supported.
bool IsSupportedTxMcs(uint8_t mcs) const
Is transmit MCS supported.
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.
uint32_t GetHeMacCapabilitiesInfo1() const
Return the 4 first octets of the HE MAC Capabilties Info field in the HE Capabilities information ele...
uint8_t ReadU8(void)
Definition: buffer.h:1021
Buffer::Iterator Serialize(Buffer::Iterator start) const
Serialize function.
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:1096
void SetSupportedMcsAndNss(uint16_t ctrl)
Set the MCS and NSS field in the HE Capabilities information element.
uint8_t m_ofdmaRaSupport
OFDM RA support.
#define IE_HE_CAPABILITIES
uint8_t m_aBsrSupport
BSR support.
uint8_t GetHePhyCapabilitiesInfo2() const
Return the last octet of the HE PHY Capabilties Info field in the HE Capabilities information element...
uint8_t GetChannelWidthSet(void) const
Get channel width set.
uint8_t m_twtRequesterSupport
TWT requester support.
uint8_t m_dcmEncodingRx
DCM encoding receive.
uint8_t m_suBeamformer
SU beam former.
The IEEE 802.11ax HE Capabilities.
std::vector< uint8_t > m_rxBwMap
receive BW map
uint8_t m_groupAddressedMultiStaBlockAckInDlMuSupport
group addressed multi STA block ack in DL support
uint32_t ReadLsbtohU32(void)
Definition: buffer.cc:1079
Buffer::Iterator Serialize(Buffer::Iterator i) const
Serialize entire IE including Element ID and length fields.
uint8_t m_ppeThresholdPresent
PPE threshold present.
void WriteHtolsbU32(uint32_t data)
Definition: buffer.cc:920
uint8_t m_numberOfSoundingDimensionsForLargerThan80Mhz
of sounding dimensions for > 80 MHz
uint8_t m_nstsTotalForSmallerOrEqualThan80Mhz
STS total for < 80 MHz.
void SerializeInformationField(Buffer::Iterator start) const
Serialize information field.