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
30#include <ostream>
31
43namespace ns3
44{
45
46class WifiNetDevice;
47class WifiMode;
48class Time;
49
59typedef uint16_t WifiCodeRate;
60const uint16_t WIFI_CODE_RATE_UNDEFINED = 0;
61const uint16_t WIFI_CODE_RATE_1_2 = 1;
62const uint16_t WIFI_CODE_RATE_2_3 = 2;
63const uint16_t WIFI_CODE_RATE_3_4 = 3;
64const uint16_t WIFI_CODE_RATE_5_6 = 4;
65const uint16_t WIFI_CODE_RATE_5_8 = 5;
66const uint16_t WIFI_CODE_RATE_13_16 = 6;
67const uint16_t WIFI_CODE_RATE_1_4 = 7;
68const uint16_t WIFI_CODE_RATE_13_28 = 8;
69const uint16_t WIFI_CODE_RATE_13_21 = 9;
70const uint16_t WIFI_CODE_RATE_52_63 = 10;
71const uint16_t WIFI_CODE_RATE_13_14 = 11;
72const uint16_t WIFI_CODE_RATE_7_8 = 12;
73
79{
94};
95
103inline std::ostream&
104operator<<(std::ostream& os, const WifiPreamble& preamble)
105{
106 switch (preamble)
107 {
109 return (os << "LONG");
111 return (os << "SHORT");
113 return (os << "HT_MF");
115 return (os << "VHT_SU");
117 return (os << "VHT_MU");
119 return (os << "DMG_CTRL");
121 return (os << "DMG_SC");
123 return (os << "DMG_OFDM");
125 return (os << "HE_SU");
127 return (os << "HE_ER_SU");
129 return (os << "HE_MU");
131 return (os << "HE_TB");
133 return (os << "EHT_MU");
135 return (os << "EHT_TB");
136 default:
137 NS_FATAL_ERROR("Invalid preamble");
138 return (os << "INVALID");
139 }
140}
141
149{
166
174inline std::ostream&
175operator<<(std::ostream& os, const WifiModulationClass& modulation)
176{
177 switch (modulation)
178 {
180 return (os << "DSSS");
182 return (os << "HR/DSSS");
184 return (os << "ERP-OFDM");
186 return (os << "OFDM");
188 return (os << "HT");
190 return (os << "VHT");
192 return (os << "DMG_CTRL");
194 return (os << "DMG_OFDM");
196 return (os << "DMG_SC");
198 return (os << "DMG_LP_SC");
200 return (os << "HE");
202 return (os << "EHT");
203 default:
204 NS_FATAL_ERROR("Unknown modulation");
205 return (os << "unknown");
206 }
207}
208
214{
237
245inline std::ostream&
246operator<<(std::ostream& os, const WifiPpduField& field)
247{
248 switch (field)
249 {
251 return (os << "preamble");
253 return (os << "non-HT header");
255 return (os << "HT-SIG");
257 return (os << "training");
259 return (os << "SIG-A");
261 return (os << "SIG-B");
263 return (os << "U-SIG");
265 return (os << "EHT-SIG");
267 return (os << "data");
268 default:
269 NS_FATAL_ERROR("Unknown field");
270 return (os << "unknown");
271 }
272}
273
279{
284
292inline std::ostream&
293operator<<(std::ostream& os, const WifiPpduType& type)
294{
295 switch (type)
296 {
298 return (os << "SU");
300 return (os << "DL MU");
302 return (os << "UL MU");
303 default:
304 NS_FATAL_ERROR("Unknown type");
305 return (os << "unknown");
306 }
307}
308
314{
340
348inline std::ostream&
349operator<<(std::ostream& os, const WifiPhyRxfailureReason& reason)
350{
351 switch (reason)
352 {
354 return (os << "UNSUPPORTED_SETTINGS");
356 return (os << "CHANNEL_SWITCHING");
357 case RXING:
358 return (os << "RXING");
359 case TXING:
360 return (os << "TXING");
361 case SLEEPING:
362 return (os << "SLEEPING");
363 case POWERED_OFF:
364 return (os << "OFF");
365 case TRUNCATED_TX:
366 return (os << "TRUNCATED_TX");
368 return (os << "BUSY_DECODING_PREAMBLE");
370 return (os << "PREAMBLE_DETECT_FAILURE");
372 return (os << "RECEPTION_ABORTED_BY_TX");
373 case L_SIG_FAILURE:
374 return (os << "L_SIG_FAILURE");
375 case HT_SIG_FAILURE:
376 return (os << "HT_SIG_FAILURE");
377 case SIG_A_FAILURE:
378 return (os << "SIG_A_FAILURE");
379 case SIG_B_FAILURE:
380 return (os << "SIG_B_FAILURE");
381 case U_SIG_FAILURE:
382 return (os << "U_SIG_FAILURE");
383 case EHT_SIG_FAILURE:
384 return (os << "EHT_SIG_FAILURE");
386 return (os << "PREAMBLE_DETECTION_PACKET_SWITCH");
388 return (os << "FRAME_CAPTURE_PACKET_SWITCH");
390 return (os << "OBSS_PD_CCA_RESET");
392 return (os << "HE_TB_PPDU_TOO_LATE");
393 case FILTERED:
394 return (os << "FILTERED");
396 return (os << "DMG_HEADER_FAILURE");
398 return (os << "DMG_ALLOCATION_ENDED");
399 case UNKNOWN:
400 default:
401 NS_FATAL_ERROR("Unknown reason");
402 return (os << "UNKNOWN");
403 }
404}
405
412{
418
426inline std::ostream&
427operator<<(std::ostream& os, WifiChannelListType type)
428{
429 switch (type)
430 {
432 return (os << "PRIMARY");
434 return (os << "SECONDARY");
436 return (os << "SECONDARY40");
438 return (os << "SECONDARY80");
439 default:
440 NS_FATAL_ERROR("Unknown wifi channel type");
441 return (os << "UNKNOWN");
442 }
443}
444
453uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr<WifiNetDevice> device);
454
464uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode,
465 bool htShortGuardInterval,
466 Time heGuardInterval);
467
476WifiPreamble GetPreambleForTransmission(WifiModulationClass modulation, bool useShortPreamble);
477
486
498 WifiModulationClass modClassAnswer);
499
509Time GetPpduMaxTime(WifiPreamble preamble);
510
517bool IsMu(WifiPreamble preamble);
518
525bool IsDlMu(WifiPreamble preamble);
526
533bool IsUlMu(WifiPreamble preamble);
534
542
550
557bool IsEht(WifiPreamble preamble);
558
559} // namespace ns3
560
561#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
@ HE_TB_PPDU_TOO_LATE
@ 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
@ 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:848
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...
const uint16_t WIFI_CODE_RATE_UNDEFINED
undefined coding rate
const uint16_t WIFI_CODE_RATE_3_4
3/4 coding rate
const uint16_t WIFI_CODE_RATE_7_8
7/8 coding rate
uint16_t GetMaximumChannelWidth(WifiModulationClass modulation)
Get the maximum channel width in MHz allowed for the given modulation class.
const uint16_t WIFI_CODE_RATE_13_16
13/16 coding rate
bool IsEht(WifiPreamble preamble)
Return true if a preamble corresponds to an EHT transmission.
const uint16_t WIFI_CODE_RATE_1_2
1/2 coding rate
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:129
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.
const uint16_t WIFI_CODE_RATE_5_8
5/8 coding rate
WifiModulationClass GetModulationClassForPreamble(WifiPreamble preamble)
Return the modulation class corresponding to the given preamble type.
const uint16_t WIFI_CODE_RATE_2_3
2/3 coding rate
const uint16_t WIFI_CODE_RATE_52_63
52/63 coding rate
const uint16_t WIFI_CODE_RATE_13_14
13/14 coding rate
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr< WifiNetDevice > device)
Convert the guard interval to nanoseconds based on the WifiMode.
const uint16_t WIFI_CODE_RATE_5_6
5/6 coding rate
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.
const uint16_t WIFI_CODE_RATE_13_21
13/21 coding rate
const uint16_t WIFI_CODE_RATE_13_28
13/28 coding rate
bool IsUlMu(WifiPreamble preamble)
Return true if a preamble corresponds to a uplink multi-user transmission.
const uint16_t WIFI_CODE_RATE_1_4
1/4 coding rate