AARF Rate control algorithmThis class implements the AARF rate control algorithm which was initially described in IEEE 802.11 Rate Adaptation: A Practical Approach, by M. Lacage, M.H. Manshaei, and T. Turletti.
More...
Public Member Functions |
| AarfWifiManager () |
virtual | ~AarfWifiManager () |
| WifiRemoteStationManager () |
virtual | ~WifiRemoteStationManager () |
void | AddBasicMode (WifiMode mode) |
void | AddSupportedMode (Mac48Address address, WifiMode mode) |
WifiMode | GetAckMode (Mac48Address address, WifiMode dataMode) |
WifiMode | GetBasicMode (uint32_t i) const |
WifiMode | GetCtsMode (Mac48Address address, WifiMode rtsMode) |
WifiMode | GetDataMode (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet, uint32_t fullPacketSize) |
WifiMode | GetDefaultMode (void) const |
uint32_t | GetFragmentationThreshold (void) const |
uint32_t | GetFragmentOffset (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet, uint32_t fragmentNumber) |
uint32_t | GetFragmentSize (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet, uint32_t fragmentNumber) |
WifiRemoteStationInfo | GetInfo (Mac48Address address) |
uint32_t | GetMaxSlrc (void) const |
uint32_t | GetMaxSsrc (void) const |
uint32_t | GetNBasicModes (void) const |
WifiMode | GetNonUnicastMode (void) const |
uint32_t | GetRtsCtsThreshold (void) const |
WifiMode | GetRtsMode (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet) |
bool | IsAssociated (Mac48Address address) const |
bool | IsBrandNew (Mac48Address address) const |
bool | IsLastFragment (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet, uint32_t fragmentNumber) |
bool | IsWaitAssocTxOk (Mac48Address address) const |
bool | NeedDataRetransmission (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet) |
bool | NeedFragmentation (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet) |
bool | NeedRts (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet) |
bool | NeedRtsRetransmission (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet) |
void | PrepareForQueue (Mac48Address address, const WifiMacHeader *header, Ptr< const Packet > packet, uint32_t fullPacketSize) |
void | RecordDisassociated (Mac48Address address) |
void | RecordGotAssocTxFailed (Mac48Address address) |
void | RecordGotAssocTxOk (Mac48Address address) |
void | RecordWaitAssocTxOk (Mac48Address address) |
void | ReportDataFailed (Mac48Address address, const WifiMacHeader *header) |
void | ReportDataOk (Mac48Address address, const WifiMacHeader *header, double ackSnr, WifiMode ackMode, double dataSnr) |
void | ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header) |
void | ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header) |
void | ReportRtsFailed (Mac48Address address, const WifiMacHeader *header) |
void | ReportRtsOk (Mac48Address address, const WifiMacHeader *header, double ctsSnr, WifiMode ctsMode, double rtsSnr) |
void | ReportRxOk (Mac48Address address, const WifiMacHeader *header, double rxSnr, WifiMode txMode) |
void | Reset (void) |
void | Reset (Mac48Address address) |
void | SetFragmentationThreshold (uint32_t threshold) |
void | SetMaxSlrc (uint32_t maxSlrc) |
void | SetMaxSsrc (uint32_t maxSsrc) |
void | SetRtsCtsThreshold (uint32_t threshold) |
virtual void | SetupPhy (Ptr< WifiPhy > phy) |
| Object () |
virtual | ~Object () |
void | AggregateObject (Ptr< Object > other) |
void | Dispose (void) |
AggregateIterator | GetAggregateIterator (void) const |
virtual TypeId | GetInstanceTypeId (void) const |
template<typename T > |
Ptr< T > | GetObject (void) const |
template<typename T > |
Ptr< T > | GetObject (TypeId tid) const |
void | Start (void) |
| SimpleRefCount () |
| SimpleRefCount (const SimpleRefCount &o) |
uint32_t | GetReferenceCount (void) const |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
void | Ref (void) const |
void | Unref (void) const |
virtual | ~ObjectBase () |
void | GetAttribute (std::string name, AttributeValue &value) const |
bool | GetAttributeFailSafe (std::string name, AttributeValue &attribute) const |
void | SetAttribute (std::string name, const AttributeValue &value) |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
AARF Rate control algorithm
This class implements the AARF rate control algorithm which was initially described in IEEE 802.11 Rate Adaptation: A Practical Approach, by M. Lacage, M.H. Manshaei, and T. Turletti.
ns3::AarfWifiManager is accessible through the following paths with Config::Set and Config::Connect:
-
/NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/RemoteStationManager/$ns3::AarfWifiManager
Attributes
-
SuccessK: Multiplication factor for the success threshold in the AARF algorithm.
-
Set with class: ns3::DoubleValue
-
Underlying type: double -1.79769e+308:1.79769e+308
-
Initial value: 2
-
Flags: construct write read
-
TimerK: Multiplication factor for the timer threshold in the AARF algorithm.
-
Set with class: ns3::DoubleValue
-
Underlying type: double -1.79769e+308:1.79769e+308
-
Initial value: 2
-
Flags: construct write read
-
MaxSuccessThreshold: Maximum value of the success threshold in the AARF algorithm.
-
MinTimerThreshold: The minimum value for the 'timer' threshold in the AARF algorithm.
-
MinSuccessThreshold: The minimum value for the success threshold in the AARF algorithm.
-
IsLowLatency: If true, we attempt to modelize a so-called low-latency device: a device where decisions about tx parameters can be made on a per-packet basis and feedback about the transmission of each packet is obtained before sending the next. Otherwise, we modelize a high-latency device, that is a device where we cannot update our decision about tx parameters after every packet transmission.
-
MaxSsrc: The maximum number of retransmission attempts for an RTS. This value will not have any effect on some rate control algorithms.
-
MaxSlrc: The maximum number of retransmission attempts for a DATA packet. This value will not have any effect on some rate control algorithms.
-
RtsCtsThreshold: If the size of the data packet + LLC header + MAC header + FCS trailer is bigger than this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2007, Section 9.2.6. This value will not have any effect on some rate control algorithms.
-
FragmentationThreshold: If the size of the data packet + LLC header + MAC header + FCS trailer is biggerthan this value, we fragment it such that the size of the fragments are equal or smaller than this value, as per IEEE Std. 802.11-2007, Section 9.4. This value will not have any effect on some rate control algorithms.
-
NonUnicastMode: Wifi mode used for non-unicast transmissions.
-
Set with class: WifiModeValue
-
Underlying type: WifiMode
-
Initial value: Invalid-WifiMode
-
Flags: construct write read
No TraceSources are defined for this type.
-
MacTxRtsFailed: The transmission of a RTS by the MAC layer has failed
-
MacTxDataFailed: The transmission of a data packet by the MAC layer has failed
-
MacTxFinalRtsFailed: The transmission of a RTS has exceeded the maximum number of attempts
-
MacTxFinalDataFailed: The transmission of a data packet has exceeded the maximum number of attempts
Definition at line 36 of file aarf-wifi-manager.h.
It is important to realize that "recovery" mode starts after failure of the first transmission after a rate increase and ends at the first successful transmission. Specifically, recovery mode transcends retransmissions boundaries. Fundamentally, ARF handles each data transmission independently, whether it is the initial transmission of a packet or the retransmission of a packet. The fundamental reason for this is that there is a backoff between each data transmission, be it an initial transmission or a retransmission.
Definition at line 123 of file aarf-wifi-manager.cc.
References ns3::AarfWifiRemoteStation::m_failed, m_maxSuccessThreshold, m_minSuccessThreshold, m_minTimerThreshold, ns3::AarfWifiRemoteStation::m_rate, ns3::AarfWifiRemoteStation::m_recovery, ns3::AarfWifiRemoteStation::m_retry, ns3::AarfWifiRemoteStation::m_success, m_successK, ns3::AarfWifiRemoteStation::m_successThreshold, ns3::AarfWifiRemoteStation::m_timer, m_timerK, ns3::AarfWifiRemoteStation::m_timerTimeout, ns3::Max(), ns3::Min(), and NS_ASSERT.