A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
wifi-phy-common.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2005,2006,2007 INRIA
3 * Copyright (c) 2020 Orange Labs
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: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19 * Rediet <getachew.redieteab@orange.com>
20 */
21
22#ifndef WIFI_PHY_COMMON_H
23#define WIFI_PHY_COMMON_H
24
26#include "wifi-standards.h"
27
28#include "ns3/fatal-error.h"
29#include "ns3/ptr.h"
30
31#include <ostream>
32
33/**
34 * \file
35 * \ingroup wifi
36 * Declaration of the following enums:
37 * - ns3::WifiPreamble
38 * - ns3::WifiModulationClass
39 * - ns3::WifiPpduField
40 * - ns3::WifiPpduType
41 * - ns3::WifiPhyRxfailureReason
42 */
43
44namespace ns3
45{
46
47class WifiNetDevice;
48class WifiMode;
49class Time;
50
51/// maximum propagation delay
52static constexpr uint8_t MAX_PROPAGATION_DELAY_USEC = 1;
53
54/**
55 * typedef for a pair of start and stop frequencies in Hz to represent a band
56 */
57using WifiSpectrumBandFrequencies = std::pair<uint64_t, uint64_t>;
58
59/// WifiSpectrumBandInfo structure containing info about a spectrum band
61{
62 WifiSpectrumBandIndices indices; //!< the start and stop indices of the band
63 WifiSpectrumBandFrequencies frequencies; //!< the start and stop frequencies of the band
64};
65
66/// vector of spectrum bands
67using WifiSpectrumBands = std::vector<WifiSpectrumBandInfo>;
68
69/**
70 * \ingroup wifi
71 * Compare two bands.
72 *
73 * \param lhs the band on the left of operator<
74 * \param rhs the band on the right of operator<
75 * \return true if the start/stop frequencies of left are lower than the start/stop frequencies of
76 * right, false otherwise
77 */
78inline bool
80{
81 return lhs.frequencies < rhs.frequencies;
82}
83
84/**
85 * \brief Stream insertion operator.
86 *
87 * \param os the stream
88 * \param band the band
89 * \returns a reference to the stream
90 */
91inline std::ostream&
92operator<<(std::ostream& os, const WifiSpectrumBandInfo& band)
93{
94 os << "indices: [" << band.indices.first << "-" << band.indices.second << "], frequencies: ["
95 << band.frequencies.first << "Hz-" << band.frequencies.second << "Hz]";
96 return os;
97}
98
99/**
100 * These constants define the various convolutional coding rates
101 * used for the OFDM transmission modes in the IEEE 802.11
102 * standard. DSSS (for example) rates which do not have an explicit
103 * coding stage in their generation should have this parameter set to
104 * WIFI_CODE_RATE_UNDEFINED.
105 */
106enum WifiCodeRate : uint16_t
107{
108 WIFI_CODE_RATE_UNDEFINED, //!< undefined coding rate
109 WIFI_CODE_RATE_1_2, //!< 1/2 coding rate
110 WIFI_CODE_RATE_2_3, //!< 2/3 coding rate
111 WIFI_CODE_RATE_3_4, //!< 3/4 coding rate
112 WIFI_CODE_RATE_5_6, //!< 5/6 coding rate
113 WIFI_CODE_RATE_5_8, //!< 5/8 coding rate
114 WIFI_CODE_RATE_13_16, //!< 13/16 coding rate
115 WIFI_CODE_RATE_1_4, //!< 1/4 coding rate
116 WIFI_CODE_RATE_13_28, //!< 13/28 coding rate
117 WIFI_CODE_RATE_13_21, //!< 13/21 coding rate
118 WIFI_CODE_RATE_52_63, //!< 52/63 coding rate
119 WIFI_CODE_RATE_13_14, //!< 13/14 coding rate
120 WIFI_CODE_RATE_7_8, //!< 7/8 coding rate
121};
122
123/**
124 * \brief Stream insertion operator.
125 *
126 * \param os the stream
127 * \param codeRate the code rate
128 * \returns a reference to the stream
129 */
130inline std::ostream&
131operator<<(std::ostream& os, const WifiCodeRate& codeRate)
132{
133 switch (codeRate)
134 {
136 return (os << "Code rate undefined");
138 return (os << "Code rate 1/2");
140 return (os << "Code rate 2/3");
142 return (os << "Code rate 3/4");
144 return (os << "Code rate 5/6");
146 return (os << "Code rate 5/8");
148 return (os << "Code rate 13/16");
150 return (os << "Code rate 1/4");
152 return (os << "Code rate 13/28");
154 return (os << "Code rate 13/21");
156 return (os << "Code rate 52/63");
158 return (os << "Code rate 13/14");
160 return (os << "Code rate 7/8");
161 default:
162 NS_FATAL_ERROR("Unknown code rate");
163 return (os << "Unknown");
164 }
165}
166
167/**
168 * \ingroup wifi
169 * The type of preamble to be used by an IEEE 802.11 transmission
170 */
172{
188
189/**
190 * \brief Stream insertion operator.
191 *
192 * \param os the stream
193 * \param preamble the preamble
194 * \returns a reference to the stream
195 */
196inline std::ostream&
197operator<<(std::ostream& os, const WifiPreamble& preamble)
198{
199 switch (preamble)
200 {
202 return (os << "LONG");
204 return (os << "SHORT");
206 return (os << "HT_MF");
208 return (os << "VHT_SU");
210 return (os << "VHT_MU");
212 return (os << "DMG_CTRL");
214 return (os << "DMG_SC");
216 return (os << "DMG_OFDM");
218 return (os << "HE_SU");
220 return (os << "HE_ER_SU");
222 return (os << "HE_MU");
224 return (os << "HE_TB");
226 return (os << "EHT_MU");
228 return (os << "EHT_TB");
229 default:
230 NS_FATAL_ERROR("Invalid preamble");
231 return (os << "INVALID");
232 }
233}
234
235/**
236 * \ingroup wifi
237 * This enumeration defines the modulation classes per
238 * (Table 10-6 "Modulation classes"; IEEE 802.11-2016, with
239 * updated in 802.11ax/D6.0 as Table 10-9).
240 */
242{
243 /** Modulation class unknown or unspecified. A WifiMode with this
244 WifiModulationClass has not been properly initialized. */
246 WIFI_MOD_CLASS_DSSS, //!< DSSS (Clause 15)
247 WIFI_MOD_CLASS_HR_DSSS, //!< HR/DSSS (Clause 16)
248 WIFI_MOD_CLASS_ERP_OFDM, //!< ERP-OFDM (18.4)
249 WIFI_MOD_CLASS_OFDM, //!< OFDM (Clause 17)
250 WIFI_MOD_CLASS_HT, //!< HT (Clause 19)
251 WIFI_MOD_CLASS_VHT, //!< VHT (Clause 22)
252 WIFI_MOD_CLASS_DMG_CTRL, //!< DMG (Clause 21)
253 WIFI_MOD_CLASS_DMG_OFDM, //!< DMG (Clause 21)
254 WIFI_MOD_CLASS_DMG_SC, //!< DMG (Clause 21)
255 WIFI_MOD_CLASS_DMG_LP_SC, //!< DMG (Clause 21)
256 WIFI_MOD_CLASS_HE, //!< HE (Clause 27)
257 WIFI_MOD_CLASS_EHT //!< EHT (Clause 36)
259
260/**
261 * \brief Stream insertion operator.
262 *
263 * \param os the stream
264 * \param modulation the WifiModulationClass
265 * \returns a reference to the stream
266 */
267inline std::ostream&
268operator<<(std::ostream& os, const WifiModulationClass& modulation)
269{
270 switch (modulation)
271 {
273 return (os << "DSSS");
275 return (os << "HR/DSSS");
277 return (os << "ERP-OFDM");
279 return (os << "OFDM");
281 return (os << "HT");
283 return (os << "VHT");
285 return (os << "DMG_CTRL");
287 return (os << "DMG_OFDM");
289 return (os << "DMG_SC");
291 return (os << "DMG_LP_SC");
293 return (os << "HE");
295 return (os << "EHT");
296 default:
297 NS_FATAL_ERROR("Unknown modulation");
298 return (os << "unknown");
299 }
300}
301
302/**
303 * \ingroup wifi
304 * The type of PPDU field (grouped for convenience)
305 */
307{
308 /**
309 * SYNC + SFD fields for DSSS or ERP,
310 * shortSYNC + shortSFD fields for HR/DSSS or ERP,
311 * HT-GF-STF + HT-GF-LTF1 fields for HT-GF,
312 * L-STF + L-LTF fields otherwise.
313 */
315 /**
316 * PHY header field for DSSS or ERP,
317 * short PHY header field for HR/DSSS or ERP,
318 * field not present for HT-GF,
319 * L-SIG field or L-SIG + RL-SIG fields otherwise.
320 */
322 WIFI_PPDU_FIELD_HT_SIG, //!< HT-SIG field
323 WIFI_PPDU_FIELD_TRAINING, //!< STF + LTF fields (excluding those in preamble for HT-GF)
324 WIFI_PPDU_FIELD_SIG_A, //!< SIG-A field
325 WIFI_PPDU_FIELD_SIG_B, //!< SIG-B field
326 WIFI_PPDU_FIELD_U_SIG, //!< U-SIG field
327 WIFI_PPDU_FIELD_EHT_SIG, //!< EHT-SIG field
328 WIFI_PPDU_FIELD_DATA //!< data field
330
331/**
332 * \brief Stream insertion operator.
333 *
334 * \param os the stream
335 * \param field the PPDU field
336 * \returns a reference to the stream
337 */
338inline std::ostream&
339operator<<(std::ostream& os, const WifiPpduField& field)
340{
341 switch (field)
342 {
344 return (os << "preamble");
346 return (os << "non-HT header");
348 return (os << "HT-SIG");
350 return (os << "training");
352 return (os << "SIG-A");
354 return (os << "SIG-B");
356 return (os << "U-SIG");
358 return (os << "EHT-SIG");
360 return (os << "data");
361 default:
362 NS_FATAL_ERROR("Unknown field");
363 return (os << "unknown");
364 }
365}
366
367/**
368 * \ingroup wifi
369 * The type of PPDU (SU, DL MU, or UL MU)
370 */
372{
377
378/**
379 * \brief Stream insertion operator.
380 *
381 * \param os the stream
382 * \param type the PPDU type
383 * \returns a reference to the stream
384 */
385inline std::ostream&
386operator<<(std::ostream& os, const WifiPpduType& type)
387{
388 switch (type)
389 {
391 return (os << "SU");
393 return (os << "DL MU");
395 return (os << "UL MU");
396 default:
397 NS_FATAL_ERROR("Unknown type");
398 return (os << "unknown");
399 }
400}
401
402/**
403 * \ingroup wifi
404 * Enumeration of the possible reception failure reasons.
405 */
407{
434
435/**
436 * \brief Stream insertion operator.
437 *
438 * \param os the stream
439 * \param reason the failure reason
440 * \returns a reference to the stream
441 */
442inline std::ostream&
443operator<<(std::ostream& os, const WifiPhyRxfailureReason& reason)
444{
445 switch (reason)
446 {
448 return (os << "UNSUPPORTED_SETTINGS");
450 return (os << "CHANNEL_SWITCHING");
451 case RXING:
452 return (os << "RXING");
453 case TXING:
454 return (os << "TXING");
455 case SLEEPING:
456 return (os << "SLEEPING");
457 case POWERED_OFF:
458 return (os << "OFF");
459 case TRUNCATED_TX:
460 return (os << "TRUNCATED_TX");
462 return (os << "BUSY_DECODING_PREAMBLE");
464 return (os << "PREAMBLE_DETECT_FAILURE");
466 return (os << "RECEPTION_ABORTED_BY_TX");
467 case L_SIG_FAILURE:
468 return (os << "L_SIG_FAILURE");
469 case HT_SIG_FAILURE:
470 return (os << "HT_SIG_FAILURE");
471 case SIG_A_FAILURE:
472 return (os << "SIG_A_FAILURE");
473 case SIG_B_FAILURE:
474 return (os << "SIG_B_FAILURE");
475 case U_SIG_FAILURE:
476 return (os << "U_SIG_FAILURE");
477 case EHT_SIG_FAILURE:
478 return (os << "EHT_SIG_FAILURE");
480 return (os << "PREAMBLE_DETECTION_PACKET_SWITCH");
482 return (os << "FRAME_CAPTURE_PACKET_SWITCH");
484 return (os << "OBSS_PD_CCA_RESET");
485 case PPDU_TOO_LATE:
486 return (os << "PPDU_TOO_LATE");
487 case FILTERED:
488 return (os << "FILTERED");
490 return (os << "DMG_HEADER_FAILURE");
492 return (os << "DMG_ALLOCATION_ENDED");
494 return (os << "SIGNAL_DETECTION_ABORTED_BY_TX");
495 case UNKNOWN:
496 default:
497 NS_FATAL_ERROR("Unknown reason");
498 return (os << "UNKNOWN");
499 }
500}
501
502/**
503 * \ingroup wifi
504 * Enumeration of the possible channel-list parameter elements
505 * defined in Table 8-5 of IEEE 802.11-2016.
506 */
508{
514
515/**
516 * \brief Stream insertion operator.
517 *
518 * \param os the stream
519 * \param type the wifi channel list type
520 * \returns a reference to the stream
521 */
522inline std::ostream&
523operator<<(std::ostream& os, WifiChannelListType type)
524{
525 switch (type)
526 {
528 return (os << "PRIMARY");
530 return (os << "SECONDARY");
532 return (os << "SECONDARY40");
534 return (os << "SECONDARY80");
535 default:
536 NS_FATAL_ERROR("Unknown wifi channel type");
537 return (os << "UNKNOWN");
538 }
539}
540
541/**
542 * Convert the guard interval to nanoseconds based on the WifiMode.
543 *
544 * \param mode the WifiMode
545 * \param device pointer to the WifiNetDevice object
546 *
547 * \return the guard interval duration in nanoseconds
548 */
549uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr<WifiNetDevice> device);
550
551/**
552 * Convert the guard interval to nanoseconds based on the WifiMode.
553 *
554 * \param mode the WifiMode
555 * \param htShortGuardInterval whether HT/VHT short guard interval is enabled
556 * \param heGuardInterval the HE guard interval duration
557 *
558 * \return the guard interval duration in nanoseconds
559 */
560uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode,
561 bool htShortGuardInterval,
562 Time heGuardInterval);
563
564/**
565 * Return the preamble to be used for the transmission.
566 *
567 * \param modulation the modulation selected for the transmission
568 * \param useShortPreamble whether short preamble should be used
569 *
570 * \return the preamble to be used for the transmission
571 */
572WifiPreamble GetPreambleForTransmission(WifiModulationClass modulation, bool useShortPreamble);
573
574/**
575 * Return the modulation class corresponding to the given preamble type.
576 * Only preamble types used by HT/VHT/HE/EHT can be passed to this function.
577 *
578 * \param preamble the given preamble type (must be one defined by HT standard or later)
579 * \return the modulation class corresponding to the given preamble type
580 */
582
583/**
584 * Return whether the modulation class of the selected mode for the
585 * control answer frame is allowed.
586 *
587 * \param modClassReq modulation class of the request frame
588 * \param modClassAnswer modulation class of the answer frame
589 *
590 * \return true if the modulation class of the selected mode for the
591 * control answer frame is allowed, false otherwise
592 */
594 WifiModulationClass modClassAnswer);
595
596/**
597 * Get the maximum PPDU duration (see Section 10.14 of 802.11-2016) for
598 * the PHY layers defining the aPPDUMaxTime characteristic (HT, VHT and HE).
599 * Return zero otherwise.
600 *
601 * \param preamble the preamble type
602 *
603 * \return the maximum PPDU duration, if defined, and zero otherwise
604 */
605Time GetPpduMaxTime(WifiPreamble preamble);
606
607/**
608 * Return true if a preamble corresponds to a multi-user transmission.
609 *
610 * \param preamble the preamble
611 * \return true if the provided preamble corresponds to a multi-user transmission
612 */
613bool IsMu(WifiPreamble preamble);
614
615/**
616 * Return true if a preamble corresponds to a downlink multi-user transmission.
617 *
618 * \param preamble the preamble
619 * \return true if the provided preamble corresponds to a downlink multi-user transmission
620 */
621bool IsDlMu(WifiPreamble preamble);
622
623/**
624 * Return true if a preamble corresponds to a uplink multi-user transmission.
625 *
626 * \param preamble the preamble
627 * \return true if the provided preamble corresponds to a uplink multi-user transmission
628 */
629bool IsUlMu(WifiPreamble preamble);
630
631/**
632 * Return the modulation class corresponding to a given standard.
633 *
634 * \param standard the standard
635 * \return the modulation class corresponding to the standard
636 */
638
639/**
640 * Get the maximum channel width in MHz allowed for the given modulation class.
641 *
642 * \param modulation the modulation class
643 * \return the maximum channel width in MHz allowed for the given modulation class
644 */
646
647/**
648 * Return true if a preamble corresponds to an EHT transmission.
649 *
650 * \param preamble the preamble
651 * \return true if the provided preamble corresponds to an EHT transmission
652 */
653bool IsEht(WifiPreamble preamble);
654
655} // namespace ns3
656
657#endif /* WIFI_PHY_COMMON_H */
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:179
WifiStandard
Identifies the IEEE 802.11 specifications that a Wifi device can be configured to use.
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
WifiPpduType
The type of PPDU (SU, DL MU, or UL MU)
WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802....
WifiChannelListType
Enumeration of the possible channel-list parameter elements defined in Table 8-5 of IEEE 802....
WifiPpduField
The type of PPDU field (grouped for convenience)
@ OBSS_PD_CCA_RESET
@ PREAMBLE_DETECT_FAILURE
@ TRUNCATED_TX
@ FRAME_CAPTURE_PACKET_SWITCH
@ POWERED_OFF
@ UNSUPPORTED_SETTINGS
@ L_SIG_FAILURE
@ SIGNAL_DETECTION_ABORTED_BY_TX
@ DMG_HEADER_FAILURE
@ RECEPTION_ABORTED_BY_TX
@ SIG_A_FAILURE
@ CHANNEL_SWITCHING
@ DMG_ALLOCATION_ENDED
@ U_SIG_FAILURE
@ BUSY_DECODING_PREAMBLE
@ SIG_B_FAILURE
@ HT_SIG_FAILURE
@ PPDU_TOO_LATE
@ EHT_SIG_FAILURE
@ PREAMBLE_DETECTION_PACKET_SWITCH
@ WIFI_PREAMBLE_LONG
@ WIFI_PREAMBLE_EHT_TB
@ WIFI_PREAMBLE_HE_ER_SU
@ WIFI_PREAMBLE_HE_TB
@ WIFI_PREAMBLE_DMG_CTRL
@ WIFI_PREAMBLE_EHT_MU
@ WIFI_PREAMBLE_HE_MU
@ WIFI_PREAMBLE_HE_SU
@ WIFI_PREAMBLE_VHT_MU
@ WIFI_PREAMBLE_VHT_SU
@ WIFI_PREAMBLE_SHORT
@ WIFI_PREAMBLE_HT_MF
@ WIFI_PREAMBLE_DMG_SC
@ WIFI_PREAMBLE_DMG_OFDM
@ WIFI_PPDU_TYPE_DL_MU
@ WIFI_PPDU_TYPE_UL_MU
@ WIFI_PPDU_TYPE_SU
@ WIFI_MOD_CLASS_DMG_OFDM
DMG (Clause 21)
@ WIFI_MOD_CLASS_DMG_CTRL
DMG (Clause 21)
@ WIFI_MOD_CLASS_OFDM
OFDM (Clause 17)
@ WIFI_MOD_CLASS_HR_DSSS
HR/DSSS (Clause 16)
@ WIFI_MOD_CLASS_UNKNOWN
Modulation class unknown or unspecified.
@ WIFI_MOD_CLASS_DMG_SC
DMG (Clause 21)
@ WIFI_MOD_CLASS_HT
HT (Clause 19)
@ WIFI_MOD_CLASS_EHT
EHT (Clause 36)
@ WIFI_MOD_CLASS_VHT
VHT (Clause 22)
@ WIFI_MOD_CLASS_HE
HE (Clause 27)
@ WIFI_MOD_CLASS_DMG_LP_SC
DMG (Clause 21)
@ WIFI_MOD_CLASS_DSSS
DSSS (Clause 15)
@ WIFI_MOD_CLASS_ERP_OFDM
ERP-OFDM (18.4)
@ WIFI_CHANLIST_PRIMARY
@ WIFI_CHANLIST_SECONDARY40
@ WIFI_CHANLIST_SECONDARY
@ WIFI_CHANLIST_SECONDARY80
@ WIFI_PPDU_FIELD_SIG_B
SIG-B field.
@ WIFI_PPDU_FIELD_TRAINING
STF + LTF fields (excluding those in preamble for HT-GF)
@ WIFI_PPDU_FIELD_NON_HT_HEADER
PHY header field for DSSS or ERP, short PHY header field for HR/DSSS or ERP, field not present for HT...
@ WIFI_PPDU_FIELD_EHT_SIG
EHT-SIG field.
@ WIFI_PPDU_FIELD_HT_SIG
HT-SIG field.
@ WIFI_PPDU_FIELD_PREAMBLE
SYNC + SFD fields for DSSS or ERP, shortSYNC + shortSFD fields for HR/DSSS or ERP,...
@ WIFI_PPDU_FIELD_U_SIG
U-SIG field.
@ WIFI_PPDU_FIELD_DATA
data field
@ WIFI_PPDU_FIELD_SIG_A
SIG-A field.
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:839
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Time GetPpduMaxTime(WifiPreamble preamble)
Get the maximum PPDU duration (see Section 10.14 of 802.11-2016) for the PHY layers defining the aPPD...
uint16_t GetMaximumChannelWidth(WifiModulationClass modulation)
Get the maximum channel width in MHz allowed for the given modulation class.
std::pair< uint64_t, uint64_t > WifiSpectrumBandFrequencies
typedef for a pair of start and stop frequencies in Hz to represent a band
bool IsEht(WifiPreamble preamble)
Return true if a preamble corresponds to an EHT transmission.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:159
bool IsAllowedControlAnswerModulationClass(WifiModulationClass modClassReq, WifiModulationClass modClassAnswer)
Return whether the modulation class of the selected mode for the control answer frame is allowed.
bool IsMu(WifiPreamble preamble)
Return true if a preamble corresponds to a multi-user transmission.
std::vector< WifiSpectrumBandInfo > WifiSpectrumBands
vector of spectrum bands
std::pair< uint32_t, uint32_t > WifiSpectrumBandIndices
typedef for a pair of start and stop sub-band indices
WifiModulationClass GetModulationClassForPreamble(WifiPreamble preamble)
Return the modulation class corresponding to the given preamble type.
bool operator<(const EventId &a, const EventId &b)
Definition: event-id.h:179
uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr< WifiNetDevice > device)
Convert the guard interval to nanoseconds based on the WifiMode.
WifiPreamble GetPreambleForTransmission(WifiModulationClass modulation, bool useShortPreamble)
Return the preamble to be used for the transmission.
WifiModulationClass GetModulationClassForStandard(WifiStandard standard)
Return the modulation class corresponding to a given standard.
bool IsDlMu(WifiPreamble preamble)
Return true if a preamble corresponds to a downlink multi-user transmission.
static constexpr uint8_t MAX_PROPAGATION_DELAY_USEC
maximum propagation delay
bool IsUlMu(WifiPreamble preamble)
Return true if a preamble corresponds to a uplink multi-user transmission.
WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
@ WIFI_CODE_RATE_2_3
2/3 coding rate
@ WIFI_CODE_RATE_13_21
13/21 coding rate
@ WIFI_CODE_RATE_1_2
1/2 coding rate
@ WIFI_CODE_RATE_3_4
3/4 coding rate
@ WIFI_CODE_RATE_1_4
1/4 coding rate
@ WIFI_CODE_RATE_UNDEFINED
undefined coding rate
@ WIFI_CODE_RATE_7_8
7/8 coding rate
@ WIFI_CODE_RATE_52_63
52/63 coding rate
@ WIFI_CODE_RATE_13_14
13/14 coding rate
@ WIFI_CODE_RATE_13_28
13/28 coding rate
@ WIFI_CODE_RATE_5_6
5/6 coding rate
@ WIFI_CODE_RATE_5_8
5/8 coding rate
@ WIFI_CODE_RATE_13_16
13/16 coding rate
WifiSpectrumBandInfo structure containing info about a spectrum band.
WifiSpectrumBandFrequencies frequencies
the start and stop frequencies of the band
WifiSpectrumBandIndices indices
the start and stop indices of the band