A Discrete-Event Network Simulator
API
wifi-phy-common.h
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2005,2006,2007 INRIA
4 * Copyright (c) 2020 Orange Labs
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation;
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20 * Rediet <getachew.redieteab@orange.com>
21 */
22
23#ifndef WIFI_PHY_COMMON_H
24#define WIFI_PHY_COMMON_H
25
26#include <ostream>
27#include "ns3/fatal-error.h"
28#include "ns3/ptr.h"
29
41namespace ns3 {
42
43class WifiNetDevice;
44class WifiMode;
45class Time;
46
56typedef uint16_t WifiCodeRate;
57const uint16_t WIFI_CODE_RATE_UNDEFINED = 0;
58const uint16_t WIFI_CODE_RATE_1_2 = 1;
59const uint16_t WIFI_CODE_RATE_2_3 = 2;
60const uint16_t WIFI_CODE_RATE_3_4 = 3;
61const uint16_t WIFI_CODE_RATE_5_6 = 4;
62
68{
78};
79
87inline std::ostream& operator<< (std::ostream &os, const WifiPreamble &preamble)
88{
89 switch (preamble)
90 {
92 return (os << "LONG");
94 return (os << "SHORT");
96 return (os << "HT_MF");
98 return (os << "VHT_SU");
100 return (os << "VHT_MU");
102 return (os << "HE_SU");
104 return (os << "HE_ER_SU");
106 return (os << "HE_MU");
108 return (os << "HE_TB");
109 default:
110 NS_FATAL_ERROR ("Invalid preamble");
111 return (os << "INVALID");
112 }
113}
114
122{
134
142inline std::ostream& operator<< (std::ostream &os, const WifiModulationClass &modulation)
143{
144 switch (modulation)
145 {
147 return (os << "DSSS");
149 return (os << "HR/DSSS");
151 return (os << "ERP-OFDM");
153 return (os << "OFDM");
155 return (os << "HT");
157 return (os << "VHT");
159 return (os << "HE");
160 default:
161 NS_FATAL_ERROR ("Unknown modulation");
162 return (os << "unknown");
163 }
164}
165
171{
192
200inline std::ostream& operator<< (std::ostream &os, const WifiPpduField &field)
201{
202 switch (field)
203 {
205 return (os << "preamble");
207 return (os << "non-HT header");
209 return (os << "HT-SIG");
211 return (os << "training");
213 return (os << "SIG-A");
215 return (os << "SIG-B");
217 return (os << "data");
218 default:
219 NS_FATAL_ERROR ("Unknown field");
220 return (os << "unknown");
221 }
222}
223
229{
234
242inline std::ostream& operator<< (std::ostream &os, const WifiPpduType &type)
243{
244 switch (type)
245 {
247 return (os << "SU");
249 return (os << "DL MU");
251 return (os << "UL MU");
252 default:
253 NS_FATAL_ERROR ("Unknown type");
254 return (os << "unknown");
255 }
256}
257
263{
285
293inline std::ostream& operator<< (std::ostream &os, const WifiPhyRxfailureReason &reason)
294{
295 switch (reason)
296 {
298 return (os << "UNSUPPORTED_SETTINGS");
300 return (os << "CHANNEL_SWITCHING");
301 case RXING:
302 return (os << "RXING");
303 case TXING:
304 return (os << "TXING");
305 case SLEEPING:
306 return (os << "SLEEPING");
307 case POWERED_OFF:
308 return (os << "OFF");
309 case TRUNCATED_TX:
310 return (os << "TRUNCATED_TX");
312 return (os << "BUSY_DECODING_PREAMBLE");
314 return (os << "PREAMBLE_DETECT_FAILURE");
316 return (os << "RECEPTION_ABORTED_BY_TX");
317 case L_SIG_FAILURE:
318 return (os << "L_SIG_FAILURE");
319 case HT_SIG_FAILURE:
320 return (os << "HT_SIG_FAILURE");
321 case SIG_A_FAILURE:
322 return (os << "SIG_A_FAILURE");
323 case SIG_B_FAILURE:
324 return (os << "SIG_B_FAILURE");
326 return (os << "PREAMBLE_DETECTION_PACKET_SWITCH");
328 return (os << "FRAME_CAPTURE_PACKET_SWITCH");
330 return (os << "OBSS_PD_CCA_RESET");
332 return (os << "HE_TB_PPDU_TOO_LATE");
333 case FILTERED:
334 return (os << "FILTERED");
335 case UNKNOWN:
336 default:
337 NS_FATAL_ERROR ("Unknown reason");
338 return (os << "UNKNOWN");
339 }
340}
341
350uint16_t ConvertGuardIntervalToNanoSeconds (WifiMode mode, const Ptr<WifiNetDevice> device);
351
361uint16_t ConvertGuardIntervalToNanoSeconds (WifiMode mode, bool htShortGuardInterval, Time heGuardInterval);
362
371WifiPreamble GetPreambleForTransmission (WifiModulationClass modulation, bool useShortPreamble);
372
382uint16_t GetChannelWidthForTransmission (WifiMode mode, uint16_t maxSupportedChannelWidth);
383
395
406
413bool IsMu (WifiPreamble preamble);
414
421bool IsDlMu (WifiPreamble preamble);
422
429bool IsUlMu (WifiPreamble preamble);
430
431} //namespace ns3
432
433#endif /* WIFI_PHY_COMMON_H */
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
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....
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
@ RECEPTION_ABORTED_BY_TX
@ SIG_A_FAILURE
@ CHANNEL_SWITCHING
@ BUSY_DECODING_PREAMBLE
@ SIG_B_FAILURE
@ HT_SIG_FAILURE
@ PREAMBLE_DETECTION_PACKET_SWITCH
@ WIFI_PREAMBLE_LONG
@ WIFI_PREAMBLE_HE_ER_SU
@ WIFI_PREAMBLE_HE_TB
@ WIFI_PREAMBLE_HE_MU
@ WIFI_PREAMBLE_HE_SU
@ WIFI_PREAMBLE_VHT_MU
@ WIFI_PREAMBLE_VHT_SU
@ WIFI_PREAMBLE_SHORT
@ WIFI_PREAMBLE_HT_MF
@ WIFI_PPDU_TYPE_DL_MU
@ WIFI_PPDU_TYPE_UL_MU
@ WIFI_PPDU_TYPE_SU
@ 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_HT
HT (Clause 19)
@ WIFI_MOD_CLASS_VHT
VHT (Clause 22)
@ WIFI_MOD_CLASS_HE
HE (Clause 27)
@ WIFI_MOD_CLASS_DSSS
DSSS (Clause 15)
@ WIFI_MOD_CLASS_ERP_OFDM
ERP-OFDM (18.4)
@ 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_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_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:793
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_1_2
1/2 coding rate
uint16_t GetChannelWidthForTransmission(WifiMode mode, uint16_t maxSupportedChannelWidth)
Return the channel width that corresponds to the selected mode (instead of letting the PHY's default ...
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:139
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_2_3
2/3 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.
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.