25 #include "ns3/vht-phy.h"    26 #include "ns3/wifi-phy-band.h"    27 #include "ns3/callback.h"    76   HePhy (
bool buildModeList = 
true);
    89                             uint8_t nExtensionLtf = 0) 
const override;
    94                            Time ppduDuration) 
override;
    98                              Time rxDuration) 
override;
   318   static uint64_t 
GetPhyRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss);
   349   static uint64_t 
GetDataRate (uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss);
   368   static bool IsModeAllowed (uint16_t channelWidth, uint8_t nss);
 std::map< uint16_t, EventId > m_beginOfdmaPayloadRxEvents
the beginning of the OFDMA payload reception events (indexed by STA-ID) 
PHY entity for HE (11ax)HE PHY is based on VHT PHY. 
const PpduFormats & GetPpduFormats(void) const override
Return the PPDU formats of the PHY. 
Simulation virtual time values and global simulation resolution. 
static uint64_t GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the PHY rate corresponding to the supplied HE MCS index, channel width, guard interval...
static WifiMode GetHeMcs3(void)
Return MCS 3 from HE MCS values. 
Smart pointer class similar to boost::intrusive_ptr. 
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU. 
Parameters for received HE-SIG-A for OBSS_PD based SR. 
static uint16_t ConvertHeTbPpduDurationToLSigLength(Time ppduDuration, WifiPhyBand band)
void NotifyEndOfHeSigA(HeSigAParameters params)
Fire a EndOfHeSigA callback (if connected) once HE-SIG-A field has been received. ...
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Time CalculateNonOfdmaDurationForHeTb(const WifiTxVector &txVector) const
std::pair< uint16_t, WifiSpectrumBand > GetChannelWidthAndBand(const WifiTxVector &txVector, uint16_t staId) const override
Get the channel width and band to use (will be overloaded by child classes). 
void StartReceiveOfdmaPayload(Ptr< Event > event)
Start receiving the PSDU (i.e. 
HePhy(bool buildModeList=true)
Constructor for HE PHY. 
uint64_t m_previouslyTxPpduUid
UID of the previously sent PPDU, used by AP to recognize response HE TB PPDUs. 
Time GetSymbolDuration(const WifiTxVector &txVector) const override
PhyFieldRxStatus ProcessSigB(Ptr< Event > event, PhyFieldRxStatus status) override
Process SIG-B, perform amendment-specific actions, and provide an updated status of the reception...
static WifiMode GetHeMcs8(void)
Return MCS 8 from HE MCS values. 
void StartTx(Ptr< WifiPpdu > ppdu) override
This function is called by SpectrumWifiPhy to send the PPDU while performing amendment-specific actio...
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field. 
static WifiMode CreateHeMcs(uint8_t index)
Create and return the HE MCS corresponding to the provided index. 
bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const override
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY. 
void DoEndReceivePayload(Ptr< const WifiPpdu > ppdu) override
Perform amendment-specific actions at the end of the reception of the payload. 
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons. 
static WifiMode GetHeMcs0(void)
Return MCS 0 from HE MCS values. 
void DoResetReceive(Ptr< Event > event) override
Perform amendment-specific actions before resetting PHY at the end of the PPDU under reception after ...
uint8_t bssColor
BSS color. 
static WifiMode GetHeMcs(uint8_t index)
Return the HE MCS corresponding to the provided index. 
static Time ConvertLSigLengthToHeTbPpduDuration(uint16_t length, const WifiTxVector &txVector, WifiPhyBand band)
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
static WifiMode GetHeMcs6(void)
Return MCS 6 from HE MCS values. 
virtual ~HePhy()
Destructor for HE PHY. 
void DoStartReceivePayload(Ptr< Event > event) override
Start receiving the PSDU (i.e. 
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission. 
static bool IsModeAllowed(uint16_t channelWidth, uint8_t nss)
Check whether the combination of <MCS, channel width, NSS> is allowed. 
uint64_t m_currentHeTbPpduUid
UID of the HE TB PPDU being received. 
Status of the reception of the PPDU field. 
WifiMode GetSigBMode(const WifiTxVector &txVector) const override
static uint64_t GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
Return the data rate corresponding to the supplied HE MCS index, channel width, guard interval...
WifiPpduField
The type of PPDU field (grouped for convenience) 
uint64_t GetCurrentHeTbPpduUid(void) const
Time CalculateTxDuration(WifiConstPsduMap psduMap, const WifiTxVector &txVector, WifiPhyBand band) const override
std::pair< uint32_t, uint32_t > WifiSpectrumBand
typedef for a pair of start and stop sub-band indexes 
uint16_t GetCenterFrequencyForNonOfdmaPart(const WifiTxVector &txVector, uint16_t staId) const
Get the center frequency of the non-OFDMA part of the current TxVector for the given STA-ID...
EndOfHeSigACallback m_endOfHeSigACallback
end of HE-SIG-A callback 
void DoAbortCurrentReception(WifiPhyRxfailureReason reason) override
Perform amendment-specific actions before aborting the current reception. 
Time GetSigADuration(WifiPreamble preamble) const override
uint16_t WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
void SetEndOfHeSigACallback(EndOfHeSigACallback callback)
Set a callback for a end of HE-SIG-A. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
static WifiMode GetHeMcs1(void)
Return MCS 1 from HE MCS values. 
Time GetTrainingDuration(const WifiTxVector &txVector, uint8_t nDataLtf, uint8_t nExtensionLtf=0) const override
static WifiMode GetHeMcs11(void)
Return MCS 11 from HE MCS values. 
void BuildModeList(void) override
Build mode list. 
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId=SU_STA_ID)
Return the data rate corresponding to the supplied TXVECTOR for the STA-ID. 
WifiSpectrumBand GetRuBandForTx(const WifiTxVector &txVector, uint16_t staId) const
Get the band in the TX spectrum associated with the RU used by the PSDU transmitted to/by a given STA...
Callback< void, HeSigAParameters > EndOfHeSigACallback
Callback upon end of HE-SIG-A. 
static WifiMode GetHeMcs4(void)
Return MCS 4 from HE MCS values. 
static const PpduFormats m_hePpduFormats
HE PPDU formats. 
static void InitializeModes(void)
Initialize all HE modes. 
Ptr< const WifiPsdu > GetAddressedPsduInPpdu(Ptr< const WifiPpdu > ppdu) const override
Get the PSDU addressed to that PHY in a PPDU (useful for MU PPDU). 
WifiConstPsduMap GetWifiConstPsduMap(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) const override
Get a WifiConstPsduMap from a PSDU and the TXVECTOR to use to send the PSDU. 
WifiSpectrumBand GetRuBandForRx(const WifiTxVector &txVector, uint16_t staId) const
Get the band in the RX spectrum associated with the RU used by the PSDU transmitted to/by a given STA...
WifiMode GetSigAMode(void) const override
WifiPhyBand
Identifies the PHY band. 
uint16_t GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const override
Return the channel width used to measure the RSSI. 
An identifier for simulation events. 
static WifiMode GetHeMcs5(void)
Return MCS 5 from HE MCS values. 
void CancelAllEvents(void) override
Cancel and clear all running events. 
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type. 
Ptr< Event > DoGetEvent(Ptr< const WifiPpdu > ppdu, RxPowerWattPerChannelBand rxPowersW) override
Get the event corresponding to the incoming PPDU. 
PHY entity for VHT (11ac)VHT PHY is based on HT PHY. 
Time GetSigBDuration(const WifiTxVector &txVector) const override
static WifiMode GetHeMcs7(void)
Return MCS 7 from HE MCS values. 
static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize)
Return the rate (in bps) of the non-HT Reference Rate which corresponds to the supplied code rate and...
uint16_t GetStaId(const Ptr< const WifiPpdu > ppdu) const override
Return the STA ID that has been assigned to the station this PHY belongs to. 
static uint64_t GetPhyRateFromTxVector(const WifiTxVector &txVector, uint16_t staId=SU_STA_ID)
Return the PHY rate corresponding to the supplied TXVECTOR for the STA-ID. 
uint64_t ObtainNextUid(const WifiTxVector &txVector) override
Obtain the next UID for the PPDU to transmit. 
uint8_t GetBssColor(void) const
static uint64_t GetNonHtReferenceRate(uint8_t mcsValue)
Calculate the rate in bps of the non-HT Reference Rate corresponding to the supplied HE MCS index...
static WifiMode GetHeMcs10(void)
Return MCS 10 from HE MCS values. 
PhyFieldRxStatus ProcessSigA(Ptr< Event > event, PhyFieldRxStatus status) override
Process SIG-A, perform amendment-specific actions, and provide an updated status of the reception...
uint32_t GetMaxPsduSize(void) const override
Get the maximum PSDU size in bytes. 
Ptr< SpectrumValue > GetTxPowerSpectralDensity(double txPowerW, Ptr< const WifiPpdu > ppdu) const override
static WifiMode GetHeMcs9(void)
Return MCS 9 from HE MCS values. 
void StartReceivePreamble(Ptr< WifiPpdu > ppdu, RxPowerWattPerChannelBand rxPowersW, Time rxDuration) override
Start receiving the PHY preamble of a PPDU (i.e. 
static WifiCodeRate GetCodeRate(uint8_t mcsValue)
Return the coding rate corresponding to the supplied HE MCS index. 
uint16_t GetNonOfdmaWidth(HeRu::RuSpec ru) const
Get the width in MHz of the non-OFDMA portion of an HE TB PPDU. 
WifiSpectrumBand GetNonOfdmaBand(const WifiTxVector &txVector, uint16_t staId) const
Get the band used to transmit the non-OFDMA part of an HE TB PPDU. 
static uint16_t GetConstellationSize(uint8_t mcsValue)
Return the constellation size corresponding to the supplied HE MCS index. 
static uint16_t GetUsableSubcarriers(uint16_t channelWidth)
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID. 
std::map< WifiSpectrumBand, double > RxPowerWattPerChannelBand
A map of the received power (Watts) for each band. 
static WifiMode GetHeMcs2(void)
Return MCS 2 from HE MCS values. 
uint8_t GetNumberBccEncoders(const WifiTxVector &txVector) const override
Time GetLSigDuration(WifiPreamble preamble) const override