A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
minstrel-wifi-manager.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 Duy Nguyen
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Duy Nguyen <duy@soe.ucsc.edu>
19  */
20 
21 
22 
23 #ifndef MINSTREL_WIFI_MANAGER_H
24 #define MINSTREL_WIFI_MANAGER_H
25 
27 #include "wifi-mode.h"
28 #include "ns3/nstime.h"
29 #include "ns3/random-variable-stream.h"
30 
31 namespace ns3 {
32 
33 struct MinstrelWifiRemoteStation;
34 
38 struct RateInfo
39 {
45 
46 
47  uint32_t retryCount;
48  uint32_t adjustedRetryCount;
49  uint32_t numRateAttempt;
50  uint32_t numRateSuccess;
51  uint32_t prob;
52 
57  uint32_t ewmaProb;
58 
59  uint32_t prevNumRateAttempt;
60  uint32_t prevNumRateSuccess;
61  uint64_t successHist;
62  uint64_t attemptHist;
63  uint32_t throughput;
64 };
65 
70 typedef std::vector<struct RateInfo> MinstrelRate;
71 
76 typedef std::vector<std::vector<uint32_t> > SampleRate;
77 
78 
88 {
89 
90 public:
91  static TypeId GetTypeId (void);
93  virtual ~MinstrelWifiManager ();
94 
95  virtual void SetupPhy (Ptr<WifiPhy> phy);
96 
105  int64_t AssignStreams (int64_t stream);
106 
107 private:
108  // overriden from base class
109  virtual WifiRemoteStation * DoCreateStation (void) const;
110  virtual void DoReportRxOk (WifiRemoteStation *station,
111  double rxSnr, WifiMode txMode);
112  virtual void DoReportRtsFailed (WifiRemoteStation *station);
113  virtual void DoReportDataFailed (WifiRemoteStation *station);
114  virtual void DoReportRtsOk (WifiRemoteStation *station,
115  double ctsSnr, WifiMode ctsMode, double rtsSnr);
116  virtual void DoReportDataOk (WifiRemoteStation *station,
117  double ackSnr, WifiMode ackMode, double dataSnr);
118  virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
119  virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
120  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
122  virtual bool IsLowLatency (void) const;
123 
125  Time GetCalcTxTime (WifiMode mode) const;
132  void AddCalcTxTime (WifiMode mode, Time t);
133 
135  void UpdateRetry (MinstrelWifiRemoteStation *station);
136 
138  uint32_t GetNextSample (MinstrelWifiRemoteStation *station);
139 
141  uint32_t FindRate (MinstrelWifiRemoteStation *station);
142 
144  void UpdateStats (MinstrelWifiRemoteStation *station);
145 
147  void RateInit (MinstrelWifiRemoteStation *station);
148 
151 
154 
156  void PrintTable (MinstrelWifiRemoteStation *station);
157 
158  void CheckInit (MinstrelWifiRemoteStation *station);
159 
165  typedef std::vector<std::pair<Time,WifiMode> > TxTime;
168 
169 
173  double m_ewmaLevel;
174  uint32_t m_sampleCol;
175  uint32_t m_pktLen;
176  uint32_t m_nsupported;
177 
180 };
181 
182 } // namespace ns3
183 
184 #endif /* MINSTREL_WIFI_MANAGER_H */
uint32_t m_nsupported
modes supported
void CheckInit(MinstrelWifiRemoteStation *station)
check for initializations
void PrintTable(MinstrelWifiRemoteStation *station)
printing Minstrel Table
keep track of time values and allow control of global simulation resolution
Definition: nstime.h:81
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Time perfectTxTime
Perfect transmission time calculation, or frame calculation Given a bit rate and a packet length n by...
Implementation of Minstrel Rate Control AlgorithmPorting Minstrel from Madwifi and Linux Kernel http:...
uint32_t numRateSuccess
number of successful pkts
virtual void DoReportFinalDataFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
hold per-remote-station state for Minstrel Wifi manager.
Time m_updateStats
how frequent do we calculate the stats(1/10 seconds)
void UpdateStats(MinstrelWifiRemoteStation *station)
updating the Minstrel Table every 1/10 seconds
uint32_t GetNextSample(MinstrelWifiRemoteStation *station)
getting the next sample from Sample Table
SampleRate m_sampleTable
sample table
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:91
uint32_t retryCount
retry limit
uint32_t FindRate(MinstrelWifiRemoteStation *station)
find a rate to use from Minstrel Table
uint32_t m_pktLen
packet length used for calculate mode TxTime
uint32_t adjustedRetryCount
adjust the retry limit for this rate
virtual 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.
virtual void DoReportRxOk(WifiRemoteStation *station, double rxSnr, WifiMode txMode)
This method is a pure virtual method that must be implemented by the sub-class.
A struct to contain all information related to a data rate.
uint32_t prevNumRateSuccess
from last rate
void PrintSampleTable(MinstrelWifiRemoteStation *station)
printing Sample Table
uint32_t prevNumRateAttempt
from last rate
virtual void SetupPhy(Ptr< WifiPhy > phy)
Set up PHY associated with this device since it is the object that knows the full set of transmit rat...
uint64_t attemptHist
aggregate of all attempts
double m_ewmaLevel
exponential weighted moving average
uint64_t successHist
aggregate of all successes
virtual WifiRemoteStation * DoCreateStation(void) const
virtual WifiTxVector DoGetDataTxVector(WifiRemoteStation *station, uint32_t size)
void AddCalcTxTime(WifiMode mode, Time t)
Add transmission time for the given mode to an internal list.
virtual void DoReportFinalRtsFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
hold a list of per-remote-station state.
virtual WifiTxVector DoGetRtsTxVector(WifiRemoteStation *station)
uint32_t ewmaProb
EWMA calculation ewma_prob =[prob *(100 - ewma_level) + (ewma_prob_old * ewma_level)]/100.
uint32_t numRateAttempt
how many number of attempts so far
TxTime m_calcTxTime
to hold all the calculated TxTime for all modes
virtual bool IsLowLatency(void) const
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
uint32_t throughput
throughput of a rate
Ptr< UniformRandomVariable > m_uniformRandomVariable
Provides uniform random variables.
void UpdateRetry(MinstrelWifiRemoteStation *station)
update the number of retries and reset accordingly
double m_lookAroundRate
the % to try other rates than our current rate
void InitSampleTable(MinstrelWifiRemoteStation *station)
initialize Sample Table
virtual void DoReportRtsFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
Time GetCalcTxTime(WifiMode mode) const
for estimating the TxTime of a packet with a given mode
virtual void DoReportDataFailed(WifiRemoteStation *station)
This method is a pure virtual method that must be implemented by the sub-class.
std::vector< struct RateInfo > MinstrelRate
Data structure for a Minstrel Rate table A vector of a struct RateInfo.
uint32_t m_sampleCol
number of sample columns
std::vector< std::pair< Time, WifiMode > > TxTime
typedef for a vector of a pair of Time, WifiMode.
virtual 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.
a unique identifier for an interface.
Definition: type-id.h:49
MinstrelRate m_minstrelTable
minstrel table
void RateInit(MinstrelWifiRemoteStation *station)
initialize Minstrel Table
std::vector< std::vector< uint32_t > > SampleRate
Data structure for a Sample Rate table A vector of a vector uint32_t.
hold per-remote-station state.
uint32_t prob
(# pkts success )/(# total pkts)