A Discrete-Event Network Simulator
QKDNetSim v2.0 (NS-3 v3.41) @ (+)
API
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
dsss-phy.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Orange Labs
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Authors: Rediet <getachew.redieteab@orange.com>
18  * Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
19  * Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from wifi-phy)
20  */
21 
22 #include "dsss-phy.h"
23 
24 #include "dsss-ppdu.h"
25 
26 #include "ns3/interference-helper.h"
27 #include "ns3/log.h"
28 #include "ns3/simulator.h"
29 #include "ns3/wifi-phy.h" //only used for static mode constructor
30 #include "ns3/wifi-psdu.h"
31 #include "ns3/wifi-utils.h"
32 
33 #include <array>
34 
35 namespace ns3
36 {
37 
38 NS_LOG_COMPONENT_DEFINE("DsssPhy");
39 
40 /*******************************************************
41  * HR/DSSS PHY (IEEE 802.11-2016, clause 16)
42  *******************************************************/
43 
44 // clang-format off
45 
47  { WIFI_PREAMBLE_LONG, { WIFI_PPDU_FIELD_PREAMBLE, // PHY preamble
48  WIFI_PPDU_FIELD_NON_HT_HEADER, // PHY header
50  { WIFI_PREAMBLE_SHORT, { WIFI_PPDU_FIELD_PREAMBLE, // Short PHY preamble
51  WIFI_PPDU_FIELD_NON_HT_HEADER, // Short PHY header
53 };
54 
56  // Unique name Code rate Constellation size
57  { "DsssRate1Mbps", { WIFI_CODE_RATE_UNDEFINED, 2 } },
58  { "DsssRate2Mbps", { WIFI_CODE_RATE_UNDEFINED, 4 } },
59  { "DsssRate5_5Mbps", { WIFI_CODE_RATE_UNDEFINED, 16 } },
60  { "DsssRate11Mbps", { WIFI_CODE_RATE_UNDEFINED, 256 } },
61 };
62 
63 // clang-format on
64 
66 static const std::array<uint64_t, 4> s_dsssRatesBpsList = {1000000, 2000000, 5500000, 11000000};
67 
73 const std::array<uint64_t, 4>&
75 {
76  return s_dsssRatesBpsList;
77 }
78 
80 {
81  NS_LOG_FUNCTION(this);
82  for (const auto& rate : GetDsssRatesBpsList())
83  {
84  WifiMode mode = GetDsssRate(rate);
85  NS_LOG_LOGIC("Add " << mode << " to list");
86  m_modeList.emplace_back(mode);
87  }
88 }
89 
91 {
92  NS_LOG_FUNCTION(this);
93 }
94 
96 DsssPhy::GetSigMode(WifiPpduField field, const WifiTxVector& txVector) const
97 {
98  switch (field)
99  {
100  case WIFI_PPDU_FIELD_PREAMBLE: // consider header mode for preamble (useful for
101  // InterferenceHelper)
103  return GetHeaderMode(txVector);
104  default:
105  return PhyEntity::GetSigMode(field, txVector);
106  }
107 }
108 
109 WifiMode
110 DsssPhy::GetHeaderMode(const WifiTxVector& txVector) const
111 {
112  if (txVector.GetPreambleType() == WIFI_PREAMBLE_LONG ||
113  txVector.GetMode() == GetDsssRate1Mbps())
114  {
115  // Section 16.2.3 "PPDU field definitions" and Section 16.2.2.2 "Long PPDU format"; IEEE Std
116  // 802.11-2016
117  return GetDsssRate1Mbps();
118  }
119  else
120  {
121  // Section 16.2.2.3 "Short PPDU format"; IEEE Std 802.11-2016
122  return GetDsssRate2Mbps();
123  }
124 }
125 
128 {
129  return m_dsssPpduFormats;
130 }
131 
132 Time
133 DsssPhy::GetDuration(WifiPpduField field, const WifiTxVector& txVector) const
134 {
135  if (field == WIFI_PPDU_FIELD_PREAMBLE)
136  {
137  return GetPreambleDuration(txVector); // SYNC + SFD or shortSYNC + shortSFD
138  }
139  else if (field == WIFI_PPDU_FIELD_NON_HT_HEADER)
140  {
141  return GetHeaderDuration(txVector); // PHY header or short PHY header
142  }
143  else
144  {
145  return PhyEntity::GetDuration(field, txVector);
146  }
147 }
148 
149 Time
151 {
152  if (txVector.GetPreambleType() == WIFI_PREAMBLE_SHORT &&
153  (txVector.GetMode().GetDataRate(22) > 1000000))
154  {
155  // Section 16.2.2.3 "Short PPDU format" Figure 16-2 "Short PPDU format"; IEEE Std
156  // 802.11-2016
157  return MicroSeconds(72);
158  }
159  else
160  {
161  // Section 16.2.2.2 "Long PPDU format" Figure 16-1 "Long PPDU format"; IEEE Std 802.11-2016
162  return MicroSeconds(144);
163  }
164 }
165 
166 Time
168 {
169  if (txVector.GetPreambleType() == WIFI_PREAMBLE_SHORT &&
170  (txVector.GetMode().GetDataRate(22) > 1000000))
171  {
172  // Section 16.2.2.3 "Short PPDU format" and Figure 16-2 "Short PPDU format"; IEEE Std
173  // 802.11-2016
174  return MicroSeconds(24);
175  }
176  else
177  {
178  // Section 16.2.2.2 "Long PPDU format" and Figure 16-1 "Short PPDU format"; IEEE Std
179  // 802.11-2016
180  return MicroSeconds(48);
181  }
182 }
183 
184 Time
186  const WifiTxVector& txVector,
187  WifiPhyBand /* band */,
188  MpduType /* mpdutype */,
189  bool /* incFlag */,
190  uint32_t& /* totalAmpduSize */,
191  double& /* totalAmpduNumSymbols */,
192  uint16_t /* staId */) const
193 {
194  return MicroSeconds(lrint(ceil((size * 8.0) / (txVector.GetMode().GetDataRate(22) / 1.0e6))));
195 }
196 
198 DsssPhy::BuildPpdu(const WifiConstPsduMap& psdus, const WifiTxVector& txVector, Time ppduDuration)
199 {
200  NS_LOG_FUNCTION(this << psdus << txVector << ppduDuration);
201  return Create<DsssPpdu>(psdus.begin()->second,
202  txVector,
204  ppduDuration,
205  ObtainNextUid(txVector));
206 }
207 
210 {
211  NS_LOG_FUNCTION(this << field << *event);
212  if (field == WIFI_PPDU_FIELD_NON_HT_HEADER)
213  {
214  return EndReceiveHeader(event); // PHY header or short PHY header
215  }
216  return PhyEntity::DoEndReceiveField(field, event);
217 }
218 
221 {
222  NS_LOG_FUNCTION(this << *event);
224  NS_LOG_DEBUG("Long/Short PHY header: SNR(dB)=" << RatioToDb(snrPer.snr)
225  << ", PER=" << snrPer.per);
226  PhyFieldRxStatus status(GetRandomValue() > snrPer.per);
227  if (status.isSuccess)
228  {
229  NS_LOG_DEBUG("Received long/short PHY header");
230  if (!IsConfigSupported(event->GetPpdu()))
231  {
232  status = PhyFieldRxStatus(false, UNSUPPORTED_SETTINGS, DROP);
233  }
234  }
235  else
236  {
237  NS_LOG_DEBUG("Abort reception because long/short PHY header reception failed");
238  status.reason = L_SIG_FAILURE;
239  status.actionIfFailure = ABORT;
240  }
241  return status;
242 }
243 
244 uint16_t
246 {
247  if (m_wifiPhy->GetChannelWidth() > 20)
248  {
249  /*
250  * This is a workaround necessary with HE-capable PHYs,
251  * since their DSSS entity will reuse its RxSpectrumModel.
252  * Without this hack, SpectrumWifiPhy::GetBand will crash.
253  * FIXME: see issue #402 for a better solution.
254  */
255  return 20;
256  }
257  return PhyEntity::GetRxChannelWidth(txVector);
258 }
259 
260 uint16_t
262 {
263  return ppdu ? GetRxChannelWidth(ppdu->GetTxVector()) : 22;
264 }
265 
268 {
269  const auto& txVector = ppdu->GetTxVector();
270  uint16_t centerFrequency = GetCenterFrequencyForChannelWidth(txVector);
271  uint16_t channelWidth = txVector.GetChannelWidth();
272  NS_LOG_FUNCTION(this << centerFrequency << channelWidth << txPowerW);
273  NS_ABORT_MSG_IF(channelWidth != 22, "Invalid channel width for DSSS");
276  txPowerW,
277  GetGuardBandwidth(channelWidth));
278  return v;
279 }
280 
281 void
283 {
284  for (const auto& rate : GetDsssRatesBpsList())
285  {
286  GetDsssRate(rate);
287  }
288 }
289 
290 WifiMode
291 DsssPhy::GetDsssRate(uint64_t rate)
292 {
293  switch (rate)
294  {
295  case 1000000:
296  return GetDsssRate1Mbps();
297  case 2000000:
298  return GetDsssRate2Mbps();
299  case 5500000:
300  return GetDsssRate5_5Mbps();
301  case 11000000:
302  return GetDsssRate11Mbps();
303  default:
304  NS_ABORT_MSG("Inexistent rate (" << rate << " bps) requested for HR/DSSS");
305  return WifiMode();
306  }
307 }
308 
309 #define GET_DSSS_MODE(x, m) \
310  WifiMode DsssPhy::Get##x() \
311  { \
312  static WifiMode mode = CreateDsssMode(#x, WIFI_MOD_CLASS_##m); \
313  return mode; \
314  }
315 
316 // Clause 15 rates (DSSS)
317 GET_DSSS_MODE(DsssRate1Mbps, DSSS)
318 GET_DSSS_MODE(DsssRate2Mbps, DSSS)
319 // Clause 16 rates (HR/DSSS)
320 GET_DSSS_MODE(DsssRate5_5Mbps, HR_DSSS)
321 GET_DSSS_MODE(DsssRate11Mbps, HR_DSSS)
322 #undef GET_DSSS_MODE
323 
324 WifiMode
325 DsssPhy::CreateDsssMode(std::string uniqueName, WifiModulationClass modClass)
326 {
327  // Check whether uniqueName is in lookup table
328  const auto it = m_dsssModulationLookupTable.find(uniqueName);
330  "DSSS or HR/DSSS mode cannot be created because it is not in the lookup table!");
332  modClass == WIFI_MOD_CLASS_DSSS || modClass == WIFI_MOD_CLASS_HR_DSSS,
333  "DSSS or HR/DSSS mode must be either WIFI_MOD_CLASS_DSSS or WIFI_MOD_CLASS_HR_DSSS!");
334 
336  uniqueName,
337  modClass,
338  true,
339  MakeBoundCallback(&GetCodeRate, uniqueName),
341  MakeCallback(&GetDataRateFromTxVector), // PhyRate is equivalent to DataRate
344 }
345 
347 DsssPhy::GetCodeRate(const std::string& name)
348 {
349  return m_dsssModulationLookupTable.at(name).first;
350 }
351 
352 uint16_t
353 DsssPhy::GetConstellationSize(const std::string& name)
354 {
355  return m_dsssModulationLookupTable.at(name).second;
356 }
357 
358 uint64_t
359 DsssPhy::GetDataRateFromTxVector(const WifiTxVector& txVector, uint16_t /* staId */)
360 {
361  WifiMode mode = txVector.GetMode();
363 }
364 
365 uint64_t
366 DsssPhy::GetDataRate(const std::string& name, WifiModulationClass modClass)
367 {
368  uint16_t constellationSize = GetConstellationSize(name);
369  uint16_t divisor = 0;
370  if (modClass == WIFI_MOD_CLASS_DSSS)
371  {
372  divisor = 11;
373  }
374  else if (modClass == WIFI_MOD_CLASS_HR_DSSS)
375  {
376  divisor = 8;
377  }
378  else
379  {
380  NS_FATAL_ERROR("Incorrect modulation class, must specify either WIFI_MOD_CLASS_DSSS or "
381  "WIFI_MOD_CLASS_HR_DSSS!");
382  }
383  auto numberOfBitsPerSubcarrier = static_cast<uint16_t>(log2(constellationSize));
384  uint64_t dataRate = ((11000000 / divisor) * numberOfBitsPerSubcarrier);
385  return dataRate;
386 }
387 
388 bool
389 DsssPhy::IsAllowed(const WifiTxVector& /*txVector*/)
390 {
391  return true;
392 }
393 
394 uint32_t
396 {
397  return 4095;
398 }
399 
400 } // namespace ns3
401 
402 namespace
403 {
404 
409 {
410  public:
412  {
414  ns3::Ptr<ns3::DsssPhy> phyEntity = ns3::Create<ns3::DsssPhy>();
418  phyEntity); // use same entity when plain DSSS modes are used
419  }
421 
422 } // namespace
Constructor class for DSSS modes.
Definition: dsss-phy.cc:409
PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event) override
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition: dsss-phy.cc:209
static uint16_t GetConstellationSize(const std::string &name)
Return the constellation size from the DSSS or HR/DSSS mode's unique name using ModulationLookupTable...
Definition: dsss-phy.cc:353
static const PpduFormats m_dsssPpduFormats
DSSS and HR/DSSS PPDU formats.
Definition: dsss-phy.h:208
PhyFieldRxStatus EndReceiveHeader(Ptr< Event > event)
End receiving the header, perform DSSS-specific actions, and provide the status of the reception.
Definition: dsss-phy.cc:220
static WifiMode CreateDsssMode(std::string uniqueName, WifiModulationClass modClass)
Create a DSSS or HR/DSSS mode from a unique name, the unique name must already be contained inside Mo...
Definition: dsss-phy.cc:325
static WifiCodeRate GetCodeRate(const std::string &name)
Return the WifiCodeRate from the DSSS or HR/DSSS mode's unique name using ModulationLookupTable.
Definition: dsss-phy.cc:347
static const ModulationLookupTable m_dsssModulationLookupTable
lookup table to retrieve code rate and constellation size corresponding to a unique name of modulatio...
Definition: dsss-phy.h:211
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the data rate corresponding to the supplied TXVECTOR.
Definition: dsss-phy.cc:359
uint16_t GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const override
Return the channel width used to measure the RSSI.
Definition: dsss-phy.cc:261
Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu) const override
Definition: dsss-phy.cc:267
~DsssPhy() override
Destructor for HR/DSSS PHY.
Definition: dsss-phy.cc:90
static WifiMode GetDsssRate5_5Mbps()
Return a WifiMode for HR/DSSS at 5.5 Mbps.
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field.
Definition: dsss-phy.cc:96
uint16_t GetRxChannelWidth(const WifiTxVector &txVector) const override
Return the channel width used in the reception spectrum model.
Definition: dsss-phy.cc:245
static uint64_t GetDataRate(const std::string &name, WifiModulationClass modClass)
Return the data rate from the DSSS or HR/DSSS mode's unique name and the supplied parameters.
Definition: dsss-phy.cc:366
static bool IsAllowed(const WifiTxVector &txVector)
Check whether the combination in TXVECTOR is allowed.
Definition: dsss-phy.cc:389
Time GetHeaderDuration(const WifiTxVector &txVector) const
Definition: dsss-phy.cc:167
Time GetPayloadDuration(uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const override
Definition: dsss-phy.cc:185
DsssPhy()
Constructor for HR/DSSS PHY.
Definition: dsss-phy.cc:79
static WifiMode GetDsssRate(uint64_t rate)
Return a WifiMode for HR/DSSS corresponding to the provided rate.
Definition: dsss-phy.cc:291
const PpduFormats & GetPpduFormats() const override
Return the PPDU formats of the PHY.
Definition: dsss-phy.cc:127
uint32_t GetMaxPsduSize() const override
Get the maximum PSDU size in bytes.
Definition: dsss-phy.cc:395
Time GetPreambleDuration(const WifiTxVector &txVector) const
Definition: dsss-phy.cc:150
static WifiMode GetDsssRate1Mbps()
Return a WifiMode for DSSS at 1 Mbps.
WifiMode GetHeaderMode(const WifiTxVector &txVector) const
Definition: dsss-phy.cc:110
static void InitializeModes()
Initialize all HR/DSSS modes.
Definition: dsss-phy.cc:282
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.
Definition: dsss-phy.cc:198
static WifiMode GetDsssRate11Mbps()
Return a WifiMode for HR/DSSS at 11 Mbps.
static WifiMode GetDsssRate2Mbps()
Return a WifiMode for DSSS at 2 Mbps.
Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const override
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
Definition: dsss-phy.cc:133
virtual Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
Definition: phy-entity.cc:190
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit.
Definition: phy-entity.cc:1281
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition: phy-entity.h:981
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key.
Definition: phy-entity.h:571
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition: phy-entity.h:561
virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const
Get the WifiMode for the SIG field specified by the PPDU field.
Definition: phy-entity.cc:150
virtual uint16_t GetRxChannelWidth(const WifiTxVector &txVector) const
Return the channel width used in the reception spectrum model.
Definition: phy-entity.cc:1214
uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const
Definition: phy-entity.cc:1343
std::list< WifiMode > m_modeList
the list of supported modes
Definition: phy-entity.h:985
double GetRandomValue() const
Obtain a random value from the WifiPhy's generator.
Definition: phy-entity.cc:1177
SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr< Event > event) const
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class.
Definition: phy-entity.cc:268
uint16_t GetCenterFrequencyForChannelWidth(const WifiTxVector &txVector) const
Get the center frequency of the channel corresponding the current TxVector rather than that of the su...
Definition: phy-entity.cc:1294
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
Definition: phy-entity.cc:1087
@ DROP
drop PPDU and set CCA_BUSY
Definition: phy-entity.h:103
@ ABORT
abort reception of PPDU
Definition: phy-entity.h:104
virtual PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition: phy-entity.cc:385
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
static WifiMode CreateWifiMode(std::string uniqueName, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, DataRateCallback dataRateCallback, AllowedCallback isAllowedCallback)
Definition: wifi-mode.cc:270
represent a single transmission mode
Definition: wifi-mode.h:51
std::string GetUniqueName() const
Definition: wifi-mode.cc:148
WifiModulationClass GetModulationClass() const
Definition: wifi-mode.cc:185
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
Definition: wifi-mode.cc:122
uint16_t GetChannelWidth() const
Definition: wifi-phy.cc:1051
static void AddStaticPhyEntity(WifiModulationClass modulation, Ptr< PhyEntity > phyEntity)
Add the PHY entity to the map of implemented PHY entities for the given modulation class.
Definition: wifi-phy.cc:752
const WifiPhyOperatingChannel & GetOperatingChannel() const
Get a const reference to the operating channel.
Definition: wifi-phy.cc:1033
static Ptr< SpectrumValue > CreateDsssTxPowerSpectralDensity(uint32_t centerFrequency, double txPowerW, uint16_t guardBandwidth)
Create a transmit power spectral density corresponding to DSSS.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiMode GetMode(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the selected payload transmission mode.
WifiPreamble GetPreambleType() const
#define GET_DSSS_MODE(x, m)
Definition: dsss-phy.cc:309
Declaration of ns3::DsssPhy class.
Declaration of ns3::DsssPpdu class.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:86
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:179
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition: abort.h:49
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition: abort.h:108
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:268
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:282
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
Definition: callback.h:765
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1350
WifiPhyBand
Identifies the PHY band.
Definition: wifi-phy-band.h:33
WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802....
WifiPpduField
The type of PPDU field (grouped for convenience)
MpduType
The type of an MPDU.
@ UNSUPPORTED_SETTINGS
@ L_SIG_FAILURE
@ WIFI_PREAMBLE_LONG
@ WIFI_PREAMBLE_SHORT
@ WIFI_MOD_CLASS_HR_DSSS
HR/DSSS (Clause 16)
@ WIFI_MOD_CLASS_DSSS
DSSS (Clause 15)
@ 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_PREAMBLE
SYNC + SFD fields for DSSS or ERP, shortSYNC + shortSFD fields for HR/DSSS or ERP,...
@ WIFI_PPDU_FIELD_DATA
data field
class anonymous_namespace{dsss-phy.cc}::ConstructorDsss g_constructor_dsss
the constructor for DSSS modes
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double RatioToDb(double ratio)
Convert from ratio to dB.
Definition: wifi-utils.cc:52
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition: callback.h:704
static const std::array< uint64_t, 4 > s_dsssRatesBpsList
DSSS rates in bits per second.
Definition: dsss-phy.cc:66
const std::array< uint64_t, 4 > & GetDsssRatesBpsList()
Get the array of possible DSSS rates.
Definition: dsss-phy.cc:74
WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
@ WIFI_CODE_RATE_UNDEFINED
undefined coding rate
Status of the reception of the PPDU field.
Definition: phy-entity.h:112
WifiPhyRxfailureReason reason
failure reason
Definition: phy-entity.h:114
PhyRxFailureAction actionIfFailure
action to perform in case of failure
Definition: phy-entity.h:115
bool isSuccess
outcome (true if success) of the reception
Definition: phy-entity.h:113
A struct for both SNR and PER.
Definition: phy-entity.h:147
double snr
SNR in linear scale.
Definition: phy-entity.h:148