24 #include "ns3/uinteger.h"
26 #define Min(a,b) ((a < b) ? a : b)
61 .SetGroupName (
"Wifi")
63 .AddAttribute (
"AttemptThreshold",
64 "The minimum number of transmission attempts to try a new power or rate.",
67 MakeUintegerChecker<uint32_t> ())
68 .AddAttribute (
"SuccessThreshold",
69 "The minimum number of successful transmissions to try a new power or rate.",
72 MakeUintegerChecker<uint32_t> ())
73 .AddTraceSource (
"PowerChange",
74 "The transmission power has change",
76 "ns3::WifiRemoteStationManager::PowerChangeTracedCallback")
77 .AddTraceSource (
"RateChange",
78 "The transmission rate has change",
80 "ns3::WifiRemoteStationManager::RateChangeTracedCallback")
205 if (((station->
m_nRetry - 1) % 2) == 1)
237 double ctsSnr,
WifiMode ctsMode,
double rtsSnr)
243 double ackSnr,
WifiMode ackMode,
double dataSnr)
297 if (channelWidth > 20 && channelWidth != 22)
318 return WifiTxVector (mode, station->
m_powerLevel,
GetPreambleForTransmission (mode,
GetAddress (station)), 800, 1, 1, 0, channelWidth,
GetAggregation (station),
false);
329 if (channelWidth > 20 && channelWidth != 22)
344 rtsTxVector =
WifiTxVector (mode,
GetDefaultTxPowerLevel (),
GetPreambleForTransmission (mode,
GetAddress (station)), 800, 1, 1, 0, channelWidth,
GetAggregation (station),
false);
360 NS_FATAL_ERROR (
"WifiRemoteStationManager selected does not support HT rates");
370 NS_FATAL_ERROR (
"WifiRemoteStationManager selected does not support VHT rates");
380 NS_FATAL_ERROR (
"WifiRemoteStationManager selected does not support HE rates");
uint8_t m_powerLevel
Current power level used by the remote station.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
Hold per-remote-station state for PARF Wifi manager.
uint8_t m_maxPower
Maximal power level.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
bool GetUseNonErpProtection(void) const
Return whether the device supports protection of non-ERP stations.
TracedCallback< DataRate, DataRate, Mac48Address > m_rateChange
The trace source fired when the transmission rate changes.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
void CheckInit(ParfWifiRemoteStation *station)
Check for initializations.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
uint32_t m_nAttempt
Number of transmission attempts.
Mac48Address m_address
Mac48Address of the remote station.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
TracedCallback< double, double, Mac48Address > m_powerChange
The trace source fired when the transmission power changes.
uint8_t m_nSupported
Number of supported rates by the remote station.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
virtual ~ParfWifiManager()
bool GetAggregation(const WifiRemoteStation *station) const
Return whether the given station supports A-MPDU.
void DoReportDataFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
WifiRemoteStationState * m_state
Remote station state.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Class for representing data rates.
Ptr< WifiPhy > GetPhy(void) const
Return the WifiPhy.
void DoReportDataOk(WifiRemoteStation *station, double ackSnr, WifiMode ackMode, double dataSnr)
This method is a pure virtual method that must be implemented by the sub-class.
double GetPowerDbm(uint8_t power) const
Get the power of the given power level in dBm.
void SetVhtSupported(bool enable)
Enable or disable VHT capability support.
void DoReportRtsOk(WifiRemoteStation *station, double ctsSnr, WifiMode ctsMode, double rtsSnr)
This method is a pure virtual method that must be implemented by the sub-class.
void DoReportRxOk(WifiRemoteStation *station, double rxSnr, WifiMode txMode)
This method is a pure virtual method that must be implemented by the sub-class.
void SetHtSupported(bool enable)
Enable or disable HT capability support.
uint32_t m_successThreshold
The minimum number of successful transmissions to try a new power or rate.
WifiRemoteStation * DoCreateStation(void) const
Hold an unsigned integer type.
uint8_t m_rateIndex
Current rate index used by the remote station.
void DoReportRtsFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
WifiPreamble GetPreambleForTransmission(WifiMode mode, Mac48Address dest)
Return the preamble to be used for the transmission.
uint64_t GetDataRate(uint8_t channelWidth, uint16_t guardInterval, uint8_t nss) const
void DoReportFinalDataFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
uint8_t GetChannelWidth(const WifiRemoteStation *station) const
Return the channel width supported by the station.
Mac48Address GetAddress(const WifiRemoteStation *station) const
Return the address of the station.
virtual void SetupPhy(const Ptr< WifiPhy > phy)
Set up PHY associated with this device since it is the object that knows the full set of transmit rat...
hold a list of per-remote-station state.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double GetTxPowerEnd(void) const
Return the maximum available transmission power level (dBm).
bool m_initialized
For initializing variables.
WifiModeList m_operationalRateSet
This member is the list of WifiMode objects that comprise the OperationalRateSet parameter for this r...
PARF Rate control algorithm.
uint8_t m_minPower
Minimal power level.
uint32_t m_nRetry
Number of transmission retries.
void SetHeSupported(bool enable)
Enable or disable HE capability support.
WifiMode GetSupported(const WifiRemoteStation *station, uint8_t i) const
Return whether mode associated with the specified station at the specified index. ...
uint8_t m_prevRateIndex
Rate index of the previous transmission.
uint8_t GetDefaultTxPowerLevel(void) const
WifiMode GetNonErpSupported(const WifiRemoteStation *station, uint8_t i) const
Return whether non-ERP mode associated with the specified station at the specified index...
void SetupPhy(const Ptr< WifiPhy > phy)
Set up PHY associated with this device since it is the object that knows the full set of transmit rat...
static TypeId GetTypeId(void)
Register this type.
uint32_t m_nFail
Number of failed transmission attempts.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
uint32_t m_nSuccess
Number of successful transmission attempts.
uint8_t GetNSupported(const WifiRemoteStation *station) const
Return the number of modes supported by the given station.
bool IsLowLatency(void) const
bool m_usingRecoveryRate
If using recovery rate.
WifiTxVector DoGetRtsTxVector(WifiRemoteStation *station)
bool m_usingRecoveryPower
If using recovery power.
WifiTxVector DoGetDataTxVector(WifiRemoteStation *station)
void DoReportFinalRtsFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
hold per-remote-station state.
uint32_t m_attemptThreshold
The minimum number of transmission attempts to try a new power or rate.
double GetTxPowerStart(void) const
Return the minimum available transmission power level (dBm).
uint8_t m_prevPowerLevel
Power level of the previous transmission.