src/devices/wifi/amrr-mac-stations.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 03 Mar 2008 01:58:57 +0100
changeset 2542 a9b88fdc09d6
parent 2279 ff1d63db246d
permissions -rw-r--r--
kill TraceResolver et al.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2003,2007 INRIA
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "amrr-mac-stations.h"
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "ns3/default-value.h"
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/time-default-value.h"
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/simulator.h"
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/log.h"
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
NS_LOG_COMPONENT_DEFINE ("AmrrMacStation");
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
namespace ns3 {
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
static TimeDefaultValue g_updatePeriod
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
("WifiAmrrUpdatePeriod",
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
 "The interval between decisions about rate control changes",
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
 Seconds (1.0));
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    35
static NumericDefaultValue<double> g_failureRatio
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    36
("WifiAmrrFailureRatio",
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    37
 "Ratio of erronous transmissions needed to switch to a lower rate",
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    38
 1.0/3.0);
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    39
static NumericDefaultValue<double> g_successRatio
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    40
("WifiAmrrSuccessRatio",
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
    41
 "Ratio of erronous transmissions needed to switch to a higher rate",
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    42
 1.0/10.0);
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    43
static NumericDefaultValue<uint32_t> g_maxSuccessThreshold
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    44
("WifiAmrrMaxSuccessThreshold",
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    45
 "maximum number of consecutive success periods needed to switch to a higher rate",
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    46
 10);
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    47
static NumericDefaultValue<uint32_t> g_minSuccessThreshold
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    48
("WifiAmrrMinSuccessThreshold",
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    49
 "minimum number of consecutive success periods needed to switch to a higher rate",
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    50
 1);
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
AmrrMacStations::AmrrMacStations (WifiMode defaultTxMode)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  : MacStations (defaultTxMode),
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    54
    m_updatePeriod (g_updatePeriod.GetValue ()),
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    55
    m_failureRatio (g_failureRatio.GetValue ()),
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    56
    m_successRatio (g_successRatio.GetValue ()),
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    57
    m_maxSuccessThreshold (g_maxSuccessThreshold.GetValue ()),
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    58
    m_minSuccessThreshold (g_minSuccessThreshold.GetValue ())
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
MacStation *
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
AmrrMacStations::CreateStation (void)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
  return new AmrrMacStation (this);
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
AmrrMacStation::AmrrMacStation (AmrrMacStations *stations)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
  : m_stations (stations),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
    m_nextModeUpdate (Simulator::Now () + stations->m_updatePeriod),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
    m_tx_ok (0),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
    m_tx_err (0),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
    m_tx_retr (0),
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    72
    m_retry (0),
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    73
    m_txrate (0),
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    74
    m_successThreshold (m_stations->m_minSuccessThreshold),
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    75
    m_success (0),
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    76
    m_recovery (false)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
AmrrMacStation::~AmrrMacStation ()
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
AmrrMacStation::ReportRxOk (double rxSnr, WifiMode txMode)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
AmrrMacStation::ReportRtsFailed (void)
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    86
{}
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
AmrrMacStation::ReportDataFailed (void)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
{
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
    90
  m_retry++;
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    91
  m_tx_retr++;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
AmrrMacStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
AmrrMacStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
{
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
    99
  m_retry = 0;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  m_tx_ok++;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
AmrrMacStation::ReportFinalRtsFailed (void)
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   104
{}
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
void 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
AmrrMacStation::ReportFinalDataFailed (void)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
{
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   108
  m_retry = 0;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
  m_tx_err++;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
}
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   111
bool
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   112
AmrrMacStation::IsMinRate (void) const
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   113
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   114
  return (m_txrate == 0);
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   115
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   116
bool
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   117
AmrrMacStation::IsMaxRate (void) const
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   118
{
2278
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   119
  NS_ASSERT (m_txrate + 1 <= GetNSupportedModes ());
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   120
  return (m_txrate + 1 == GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   121
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   122
bool
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   123
AmrrMacStation::IsSuccess (void) const
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   124
{
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   125
  return (m_tx_retr + m_tx_err) < m_tx_ok * m_stations->m_successRatio;
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   126
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   127
bool
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   128
AmrrMacStation::IsFailure (void) const
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
{
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   130
  return (m_tx_retr + m_tx_err) > m_tx_ok * m_stations->m_failureRatio;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   131
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   132
bool
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   133
AmrrMacStation::IsEnough (void) const
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   134
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   135
  return (m_tx_retr + m_tx_err + m_tx_ok) > 10;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
}
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   137
void 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   138
AmrrMacStation::ResetCnt (void)
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   139
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   140
  m_tx_ok = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   141
  m_tx_err = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   142
  m_tx_retr = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   143
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   144
void 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   145
AmrrMacStation::IncreaseRate (void)
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   146
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   147
  m_txrate++;
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
   148
  NS_ASSERT (m_txrate < GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   149
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   150
void 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   151
AmrrMacStation::DecreaseRate (void)
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   152
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   153
  m_txrate--;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   154
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   155
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
void
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
AmrrMacStation::UpdateMode (void)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
  if (Simulator::Now () < m_nextModeUpdate)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
    {
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
      return;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
    }
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
   163
  m_nextModeUpdate = Simulator::Now () + m_stations->m_updatePeriod;
2278
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   164
  NS_LOG_DEBUG ("Update");
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   165
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   166
  bool needChange = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   167
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   168
  if (IsSuccess () && IsEnough ()) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   169
    {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   170
      m_success++;
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   171
      NS_LOG_DEBUG ("++ success="<<m_success<<" successThreshold="<<m_successThreshold<<
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   172
                    " tx_ok="<<m_tx_ok<<" tx_err="<<m_tx_err<<" tx_retr="<<m_tx_retr<<
2278
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   173
                    " rate="<<m_txrate<<" n-supported-rates="<<GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   174
      if (m_success >= m_successThreshold &&
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   175
          !IsMaxRate ()) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   176
        {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   177
          m_recovery = true;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   178
          m_success = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   179
          IncreaseRate ();
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   180
          needChange = true;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   181
        } 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   182
      else 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   183
        {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   184
          m_recovery = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   185
        }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   186
    } 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   187
  else if (IsFailure ()) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   188
    {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   189
      m_success = 0;
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   190
      NS_LOG_DEBUG ("-- success="<<m_success<<" successThreshold="<<m_successThreshold<<
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   191
                    " tx_ok="<<m_tx_ok<<" tx_err="<<m_tx_err<<" tx_retr="<<m_tx_retr<<
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   192
                    " rate="<<m_txrate<<" n-supported-rates="<<GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   193
      if (!IsMinRate ()) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   194
        {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   195
          if (m_recovery) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   196
            {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   197
              m_successThreshold *= 2;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   198
              m_successThreshold = std::min (m_successThreshold,
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   199
                                             m_stations->m_maxSuccessThreshold);
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   200
            } 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   201
          else 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   202
            {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   203
              m_successThreshold = m_stations->m_minSuccessThreshold;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   204
            }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   205
          m_recovery = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   206
          DecreaseRate ();
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   207
          needChange = true;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   208
        } 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   209
      else 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   210
        {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   211
          m_recovery = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   212
        }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   213
    }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   214
  if (IsEnough () || needChange) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   215
    {
2278
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   216
      NS_LOG_DEBUG ("Reset");
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   217
      ResetCnt ();
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   218
    }
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
AmrrMacStations *
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
AmrrMacStation::GetStations (void) const
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
  return m_stations;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
WifiMode 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
AmrrMacStation::DoGetDataMode (uint32_t size)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
  UpdateMode ();
2275
f1ae27b37d8f return the computed rate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2274
diff changeset
   230
  NS_ASSERT (m_txrate < GetNSupportedModes ());
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   231
  uint32_t rateIndex;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   232
  if (m_retry < 1)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   233
    {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   234
      rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   235
    }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   236
  else if (m_retry < 2)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   237
    {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   238
      if (m_txrate > 0)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   239
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   240
          rateIndex = m_txrate - 1;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   241
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   242
      else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   243
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   244
          rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   245
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   246
    }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   247
  else if (m_retry < 3)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   248
    {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   249
      if (m_txrate > 1)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   250
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   251
          rateIndex = m_txrate - 2;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   252
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   253
      else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   254
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   255
          rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   256
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   257
    }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   258
  else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   259
    {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   260
      if (m_txrate > 2)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   261
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   262
          rateIndex = m_txrate - 3;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   263
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   264
      else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   265
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   266
          rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   267
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   268
    }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   269
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   270
  return GetSupportedMode (rateIndex);
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
WifiMode 
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
AmrrMacStation::DoGetRtsMode (void)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  UpdateMode ();
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
  // XXX: can we implement something smarter ?
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
  return GetSupportedMode (0);
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
} // namespace ns3