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
25#include "wifi-standards.h"
26
27#include "ns3/fatal-error.h"
28#include "ns3/ptr.h"
29#include "ns3/wifi-spectrum-value-helper.h"
30
31#include <ostream>
32
44namespace ns3
45{
46
47class WifiNetDevice;
48class WifiMode;
49class Time;
50
54using WifiSpectrumBandFrequencies = std::pair<uint64_t, uint64_t>;
55
58{
61};
62
64using WifiSpectrumBands = std::vector<WifiSpectrumBandInfo>;
65
75inline bool
77{
78 return lhs.frequencies < rhs.frequencies;
79}
80
88inline std::ostream&
89operator<<(std::ostream& os, const WifiSpectrumBandInfo& band)
90{
91 os << "indices: [" << band.indices.first << "-" << band.indices.second << "], frequencies: ["
92 << band.frequencies.first << "Hz-" << band.frequencies.second << "Hz]";
93 return os;
94}
95
103enum WifiCodeRate : uint16_t
104{
118};
119
127inline std::ostream&
128operator<<(std::ostream& os, const WifiCodeRate& codeRate)
129{
130 switch (codeRate)
131 {
133 return (os << "Code rate undefined");
135 return (os << "Code rate 1/2");
137 return (os << "Code rate 2/3");
139 return (os << "Code rate 3/4");
141 return (os << "Code rate 5/6");
143 return (os << "Code rate 5/8");
145 return (os << "Code rate 13/16");
147 return (os << "Code rate 1/4");
149 return (os << "Code rate 13/28");
151 return (os << "Code rate 13/21");
153 return (os << "Code rate 52/63");
155 return (os << "Code rate 13/14");
157 return (os << "Code rate 7/8");
158 default:
159 NS_FATAL_ERROR("Unknown code rate");
160 return (os << "Unknown");
161 }
162}
163
169{
185
193inline std::ostream&
194operator<<(std::ostream& os, const WifiPreamble& preamble)
195{
196 switch (preamble)
197 {
199 return (os << "LONG");
201 return (os << "SHORT");
203 return (os << "HT_MF");
205 return (os << "VHT_SU");
207 return (os << "VHT_MU");
209 return (os << "DMG_CTRL");
211 return (os << "DMG_SC");
213 return (os << "DMG_OFDM");
215 return (os << "HE_SU");
217 return (os << "HE_ER_SU");
219 return (os << "HE_MU");
221 return (os << "HE_TB");
223 return (os << "EHT_MU");
225 return (os << "EHT_TB");
226 default:
227 NS_FATAL_ERROR("Invalid preamble");
228 return (os << "INVALID");
229 }
230}
231
239{
256
264inline std::ostream&
265operator<<(std::ostream& os, const WifiModulationClass& modulation)
266{
267 switch (modulation)
268 {
270 return (os << "DSSS");
272 return (os << "HR/DSSS");
274 return (os << "ERP-OFDM");
276 return (os << "OFDM");
278 return (os << "HT");
280 return (os << "VHT");
282 return (os << "DMG_CTRL");
284 return (os << "DMG_OFDM");
286 return (os << "DMG_SC");
288 return (os << "DMG_LP_SC");
290 return (os << "HE");
292 return (os << "EHT");
293 default:
294 NS_FATAL_ERROR("Unknown modulation");
295 return (os << "unknown");
296 }
297}
298
304{
327
335inline std::ostream&
336operator<<(std::ostream& os, const WifiPpduField& field)
337{
338 switch (field)
339 {
341 return (os << "preamble");
343 return (os << "non-HT header");
345 return (os << "HT-SIG");
347 return (os << "training");
349 return (os << "SIG-A");
351 return (os << "SIG-B");
353 return (os << "U-SIG");
355 return (os << "EHT-SIG");
357 return (os << "data");
358 default:
359 NS_FATAL_ERROR("Unknown field");
360 return (os << "unknown");
361 }
362}
363
369{
374
382inline std::ostream&
383operator<<(std::ostream& os, const WifiPpduType& type)
384{
385 switch (type)
386 {
388 return (os << "SU");
390 return (os << "DL MU");
392 return (os << "UL MU");
393 default:
394 NS_FATAL_ERROR("Unknown type");
395 return (os << "unknown");
396 }
397}
398
404{
430
438inline std::ostream&
439operator<<(std::ostream& os, const WifiPhyRxfailureReason& reason)
440{
441 switch (reason)
442 {
444 return (os << "UNSUPPORTED_SETTINGS");
446 return (os << "CHANNEL_SWITCHING");
447 case RXING:
448 return (os << "RXING");
449 case TXING:
450 return (os << "TXING");
451 case SLEEPING:
452 return (os << "SLEEPING");
453 case POWERED_OFF:
454 return (os << "OFF");
455 case TRUNCATED_TX:
456 return (os << "TRUNCATED_TX");
458 return (os << "BUSY_DECODING_PREAMBLE");
460 return (os << "PREAMBLE_DETECT_FAILURE");
462 return (os << "RECEPTION_ABORTED_BY_TX");
463 case L_SIG_FAILURE:
464 return (os << "L_SIG_FAILURE");
465 case HT_SIG_FAILURE:
466 return (os << "HT_SIG_FAILURE");
467 case SIG_A_FAILURE:
468 return (os << "SIG_A_FAILURE");
469 case SIG_B_FAILURE:
470 return (os << "SIG_B_FAILURE");
471 case U_SIG_FAILURE:
472 return (os << "U_SIG_FAILURE");
473 case EHT_SIG_FAILURE:
474 return (os << "EHT_SIG_FAILURE");
476 return (os << "PREAMBLE_DETECTION_PACKET_SWITCH");
478 return (os << "FRAME_CAPTURE_PACKET_SWITCH");
480 return (os << "OBSS_PD_CCA_RESET");
481 case PPDU_TOO_LATE:
482 return (os << "PPDU_TOO_LATE");
483 case FILTERED:
484 return (os << "FILTERED");
486 return (os << "DMG_HEADER_FAILURE");
488 return (os << "DMG_ALLOCATION_ENDED");
489 case UNKNOWN:
490 default:
491 NS_FATAL_ERROR("Unknown reason");
492 return (os << "UNKNOWN");
493 }
494}
495
502{
508
516inline std::ostream&
517operator<<(std::ostream& os, WifiChannelListType type)
518{
519 switch (type)
520 {
522 return (os << "PRIMARY");
524 return (os << "SECONDARY");
526 return (os << "SECONDARY40");
528 return (os << "SECONDARY80");
529 default:
530 NS_FATAL_ERROR("Unknown wifi channel type");
531 return (os << "UNKNOWN");
532 }
533}
534
543uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr<WifiNetDevice> device);
544
554uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode,
555 bool htShortGuardInterval,
556 Time heGuardInterval);
557
566WifiPreamble GetPreambleForTransmission(WifiModulationClass modulation, bool useShortPreamble);
567
576
588 WifiModulationClass modClassAnswer);
589
599Time GetPpduMaxTime(WifiPreamble preamble);
600
607bool IsMu(WifiPreamble preamble);
608
615bool IsDlMu(WifiPreamble preamble);
616
623bool IsUlMu(WifiPreamble preamble);
624
632
640
647bool IsEht(WifiPreamble preamble);
648
649} // namespace ns3
650
651#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
@ 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:838
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:170
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.
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