26 #include "ns3/wifi-psdu.h"    27 #include "ns3/wifi-phy.h"     28 #include "ns3/wifi-utils.h"    29 #include "ns3/simulator.h"   174                              bool , uint32_t & , 
double & ,
   184   return Create<DsssPpdu> (psdus.begin ()->second, txVector, ppduDuration,
   216       NS_LOG_DEBUG (
"Abort reception because long/short PHY header reception failed");
   246   NS_ABORT_MSG_IF (channelWidth != 22, 
"Invalid channel width for DSSS");
   274         NS_ABORT_MSG (
"Inexistent rate (" << rate << 
" bps) requested for HR/DSSS");
   279 #define GET_DSSS_MODE(x, m) \   281 DsssPhy::Get ## x (void) \   283   static WifiMode mode = CreateDsssMode (#x, WIFI_MOD_CLASS_ ## m); \   341   uint16_t divisor = 0;
   352       NS_FATAL_ERROR (
"Incorrect modulation class, must specify either WIFI_MOD_CLASS_DSSS or WIFI_MOD_CLASS_HR_DSSS!");
   354   uint16_t numberOfBitsPerSubcarrier = 
static_cast<uint16_t
> (log2 (constellationSize));
   355   uint64_t dataRate = ((11000000 / divisor) * numberOfBitsPerSubcarrier);
 WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802...
double snr
SNR in linear scale. 
virtual PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Simulation virtual time values and global simulation resolution. 
Smart pointer class similar to boost::intrusive_ptr. 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message. 
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
DsssPhy()
Constructor for HR/DSSS PHY. 
PhyRxFailureAction actionIfFailure
action to perform in case of failure 
const std::array< uint64_t, 4 > & GetDsssRatesBpsList(void)
Get the array of possible DSSS rates. 
Declaration of ns3::DsssPpdu class. 
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument. 
WifiPhyRxfailureReason reason
failure reason 
uint16_t GetRxChannelWidth(const WifiTxVector &txVector) const override
Return the channel width used in the reception spectrum model. 
static void InitializeModes(void)
Initialize all HR/DSSS modes. 
static bool IsModeAllowed(uint16_t channelWidth, uint8_t nss)
Check whether the combination of <WifiMode, channel width, NSS> is allowed. 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
static WifiMode GetDsssRate5_5Mbps(void)
Return a WifiMode for HR/DSSS at 5.5 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...
static uint16_t GetConstellationSize(const std::string &name)
Return the constellation size from the DSSS or HR/DSSS mode's unique name using ModulationLookupTable...
static Ptr< SpectrumValue > CreateDsssTxPowerSpectralDensity(uint32_t centerFrequency, double txPowerW, uint16_t guardBandwidth)
Create a transmit power spectral density corresponding to DSSS. 
WifiMode GetHeaderMode(const WifiTxVector &txVector) const
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key. 
static WifiMode GetDsssRate11Mbps(void)
Return a WifiMode for HR/DSSS at 11 Mbps. 
Time GetHeaderDuration(const WifiTxVector &txVector) const
MpduType
The type of an MPDU. 
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...
uint16_t GetChannelWidth(void) const
WifiPreamble GetPreambleType(void) const
SYNC + SFD fields for DSSS or ERP, shortSYNC + shortSFD fields for HR/DSSS or ERP, HT-GF-STF + HT-GF-LTF1 fields for HT-GF, L-STF + L-LTF fields otherwise. 
PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event) override
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr< Event > event) const
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class. 
Status of the reception of the PPDU field. 
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY. 
Time GetPayloadDuration(uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const override
Constructor class for DSSS modes. 
static uint64_t GetDataRate(const std::string &name, WifiModulationClass modClass, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the data rate from the DSSS or HR/DSSS mode's unique name and the supplied parameters...
WifiPpduField
The type of PPDU field (grouped for convenience) 
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field. 
PhyFieldRxStatus EndReceiveHeader(Ptr< Event > event)
End receiving the header, perform DSSS-specific actions, and provide the status of the reception...
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...
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit. 
uint16_t GetCenterFrequencyForChannelWidth(const WifiTxVector &txVector) const
Get the center frequency of the channel corresponding the current TxVector rather than that of the su...
WifiModulationClass GetModulationClass() const
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC. 
std::string GetUniqueName(void) const
bool isSuccess
outcome (true if success) of the reception 
A struct for both SNR and PER. 
const PpduFormats & GetPpduFormats(void) const override
Return the PPDU formats of the PHY. 
virtual uint16_t GetRxChannelWidth(const WifiTxVector &txVector) const
Return the channel width used in the reception spectrum model. 
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
static WifiMode CreateWifiMode(std::string uniqueName, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, PhyRateFromTxVectorCallback phyRateFromTxVectorCallback, DataRateCallback dataRateCallback, DataRateFromTxVectorCallback dataRateFromTxVectorCallback, ModeAllowedCallback isModeAllowedCallback)
virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const
Get the WifiMode for the SIG field specified by the PPDU field. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu) const override
static const std::array< uint64_t, 4 > s_dsssRatesBpsList
DSSS rates in bits per second. 
static void AddStaticPhyEntity(WifiModulationClass modulation, Ptr< PhyEntity > phyEntity)
Add the PHY entity to the map of implemented PHY entities for the given modulation class...
static WifiMode GetDsssRate(uint64_t rate)
Return a WifiMode for HR/DSSS corresponding to the provided rate. 
drop PPDU and set CCA_BUSY 
Time GetPreambleDuration(const WifiTxVector &txVector) const
static WifiCodeRate GetCodeRate(const std::string &name)
Return the WifiCodeRate from the DSSS or HR/DSSS mode's unique name using ModulationLookupTable. 
double RatioToDb(double ratio)
Convert from ratio to dB. 
static const ModulationLookupTable m_dsssModulationLookupTable
lookup table to retrieve code rate and constellation size corresponding to a unique name of modulatio...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
WifiPhyBand
Identifies the PHY band. 
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the data rate corresponding to the supplied TXVECTOR. 
static WifiMode GetDsssRate1Mbps(void)
Return a WifiMode for DSSS at 1 Mbps. 
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message. 
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...
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type. 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
const uint16_t WIFI_CODE_RATE_UNDEFINED
undefined coding rate 
double GetRandomValue(void) const
Obtain a random value from the WifiPhy's generator. 
static const PpduFormats m_dsssPpduFormats
DSSS and HR/DSSS PPDU formats. 
#define GET_DSSS_MODE(x, m)
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit. 
uint16_t GetChannelWidth(void) const
uint32_t GetMaxPsduSize(void) const override
Get the maximum PSDU size in bytes. 
static class anonymous_namespace{dsss-phy.cc}::ConstructorDsss g_constructor_dsss
the constructor for DSSS modes 
PHY header field for DSSS or ERP, short PHY header field for HR/DSSS or ERP, field not present for HT...
Declaration of ns3::DsssPhy class. 
static WifiMode GetDsssRate2Mbps(void)
Return a WifiMode for DSSS at 2 Mbps. 
virtual ~DsssPhy()
Destructor for HR/DSSS PHY. 
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID. 
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
std::list< WifiMode > m_modeList
the list of supported modes 
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy. 
uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.