A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
amrr-wifi-manager.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2003,2007 INRIA
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
7 */
8
9#ifndef AMRR_WIFI_MANAGER_H
10#define AMRR_WIFI_MANAGER_H
11
12#include "ns3/traced-value.h"
13#include "ns3/wifi-remote-station-manager.h"
14
15namespace ns3
16{
17
18struct AmrrWifiRemoteStation;
19
20/**
21 * \brief AMRR Rate control algorithm
22 * \ingroup wifi
23 *
24 * This class implements the AMRR rate control algorithm which
25 * was initially described in <i>IEEE 802.11 Rate Adaptation:
26 * A Practical Approach</i>, by M. Lacage, M.H. Manshaei, and
27 * T. Turletti.
28 *
29 * This RAA does not support HT modes and will error
30 * exit if the user tries to configure this RAA with a Wi-Fi MAC
31 * that supports 802.11n or higher.
32 */
34{
35 public:
36 /**
37 * \brief Get the type ID.
38 * \return the object TypeId
39 */
40 static TypeId GetTypeId();
41
43 ~AmrrWifiManager() override;
44
45 private:
46 void DoInitialize() override;
47 WifiRemoteStation* DoCreateStation() const override;
48 void DoReportRxOk(WifiRemoteStation* station, double rxSnr, WifiMode txMode) override;
49 void DoReportRtsFailed(WifiRemoteStation* station) override;
50 void DoReportDataFailed(WifiRemoteStation* station) override;
51 void DoReportRtsOk(WifiRemoteStation* station,
52 double ctsSnr,
53 WifiMode ctsMode,
54 double rtsSnr) override;
56 double ackSnr,
57 WifiMode ackMode,
58 double dataSnr,
59 MHz_u dataChannelWidth,
60 uint8_t dataNss) override;
61 void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
62 void DoReportFinalDataFailed(WifiRemoteStation* station) override;
63 WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
65
66 /**
67 * Update the mode used to send to the given station.
68 *
69 * \param station the remote station state
70 */
71 void UpdateMode(AmrrWifiRemoteStation* station);
72 /**
73 * Reset transmission statistics of the given station.
74 *
75 * \param station the remote station state
76 */
77 void ResetCnt(AmrrWifiRemoteStation* station);
78 /**
79 * Increase the transmission rate to the given station.
80 *
81 * \param station the remote station state
82 */
84 /**
85 * Decrease the transmission rate to the given station.
86 *
87 * \param station the remote station state
88 */
90 /**
91 * Check if the current rate for the given station is the
92 * minimum rate.
93 *
94 * \param station the remote station state
95 *
96 * \return true if the current rate is the minimum rate,
97 * false otherwise
98 */
99 bool IsMinRate(AmrrWifiRemoteStation* station) const;
100 /**
101 * Check if the current rate for the given station is the
102 * maximum rate.
103 *
104 * \param station the remote station state
105 *
106 * \return true if the current rate is the maximum rate,
107 * false otherwise
108 */
109 bool IsMaxRate(AmrrWifiRemoteStation* station) const;
110 /**
111 * Check if the number of retransmission and transmission error
112 * is less than the number of successful transmission (times ratio).
113 *
114 * \param station the remote station state
115 *
116 * \return true if the number of retransmission and transmission error
117 * is less than the number of successful transmission
118 * (times ratio), false otherwise
119 */
120 bool IsSuccess(AmrrWifiRemoteStation* station) const;
121 /**
122 * Check if the number of retransmission and transmission error
123 * is greater than the number of successful transmission (times ratio).
124 *
125 * \param station the remote station state
126 *
127 * \return true if the number of retransmission and transmission error
128 * is less than the number of successful transmission
129 * (times ratio), false otherwise
130 */
131 bool IsFailure(AmrrWifiRemoteStation* station) const;
132 /**
133 * Check if the number of retransmission, transmission error,
134 * and successful transmission are greater than 10.
135 *
136 * \param station the remote station state
137 * \return true if the number of retransmission, transmission error,
138 * and successful transmission are greater than 10,
139 * false otherwise
140 */
141 bool IsEnough(AmrrWifiRemoteStation* station) const;
142
143 Time m_updatePeriod; ///< update period
144 double m_failureRatio; ///< failure ratio
145 double m_successRatio; ///< success ratio
146 uint32_t m_maxSuccessThreshold; ///< maximum success threshold
147 uint32_t m_minSuccessThreshold; ///< minimum success threshold
148
149 TracedValue<uint64_t> m_currentRate; //!< Trace rate changes
150};
151
152} // namespace ns3
153
154#endif /* AMRR_WIFI_MANAGER_H */
AMRR Rate control algorithm.
double m_failureRatio
failure ratio
static TypeId GetTypeId()
Get the type ID.
void UpdateMode(AmrrWifiRemoteStation *station)
Update the mode used to send to the given station.
void DoReportFinalRtsFailed(WifiRemoteStation *station) override
This method is a pure virtual method that must be implemented by the sub-class.
uint32_t m_minSuccessThreshold
minimum success threshold
bool IsMaxRate(AmrrWifiRemoteStation *station) const
Check if the current rate for the given station is the maximum rate.
TracedValue< uint64_t > m_currentRate
Trace rate changes.
bool IsMinRate(AmrrWifiRemoteStation *station) const
Check if the current rate for the given station is the minimum rate.
void DoInitialize() override
Initialize() implementation.
void DoReportRtsOk(WifiRemoteStation *station, double ctsSnr, WifiMode ctsMode, double rtsSnr) override
This method is a pure virtual method that must be implemented by the sub-class.
void ResetCnt(AmrrWifiRemoteStation *station)
Reset transmission statistics of the given station.
uint32_t m_maxSuccessThreshold
maximum success threshold
bool IsEnough(AmrrWifiRemoteStation *station) const
Check if the number of retransmission, transmission error, and successful transmission are greater th...
void DoReportRtsFailed(WifiRemoteStation *station) override
This method is a pure virtual method that must be implemented by the sub-class.
void DoReportDataOk(WifiRemoteStation *station, double ackSnr, WifiMode ackMode, double dataSnr, MHz_u dataChannelWidth, uint8_t dataNss) override
This method is a pure virtual method that must be implemented by the sub-class.
void DecreaseRate(AmrrWifiRemoteStation *station)
Decrease the transmission rate to the given station.
void DoReportFinalDataFailed(WifiRemoteStation *station) override
This method is a pure virtual method that must be implemented by the sub-class.
bool IsSuccess(AmrrWifiRemoteStation *station) const
Check if the number of retransmission and transmission error is less than the number of successful tr...
WifiRemoteStation * DoCreateStation() const override
void DoReportRxOk(WifiRemoteStation *station, double rxSnr, WifiMode txMode) override
This method is a pure virtual method that must be implemented by the sub-class.
void DoReportDataFailed(WifiRemoteStation *station) override
This method is a pure virtual method that must be implemented by the sub-class.
Time m_updatePeriod
update period
WifiTxVector DoGetDataTxVector(WifiRemoteStation *station, MHz_u allowedWidth) override
void IncreaseRate(AmrrWifiRemoteStation *station)
Increase the transmission rate to the given station.
WifiTxVector DoGetRtsTxVector(WifiRemoteStation *station) override
bool IsFailure(AmrrWifiRemoteStation *station) const
Check if the number of retransmission and transmission error is greater than the number of successful...
double m_successRatio
success ratio
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
Trace classes with value semantics.
a unique identifier for an interface.
Definition type-id.h:48
represent a single transmission mode
Definition wifi-mode.h:40
hold a list of per-remote-station state.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
hold per-remote-station state for AMRR Wifi manager.
hold per-remote-station state.