src/devices/wifi/amrr-wifi-manager.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 03 Mar 2008 04:03:39 +0100
changeset 2544 2e6e1a6e0d94
parent 2279 src/devices/wifi/amrr-mac-stations.cc@ff1d63db246d
child 2599 fcc1728eb669
permissions -rw-r--r--
port last rate control algorithms
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
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    21
#include "amrr-wifi-manager.h"
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "ns3/simulator.h"
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/log.h"
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    24
#include "ns3/uinteger.h"
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    25
#include "ns3/double.h"
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    27
NS_LOG_COMPONENT_DEFINE ("AmrrWifiRemoteStation");
2273
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
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    31
NS_OBJECT_ENSURE_REGISTERED (AmrrWifiManager);
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    33
TypeId
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    34
AmrrWifiManager::GetTypeId (void)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
{
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    36
  static TypeId tid = TypeId ("AmrrWifiManager")
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    37
    .SetParent<WifiRemoteStationManager> ()
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    38
    .AddConstructor<AmrrWifiManager> ()
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    39
    .AddAttribute ("UpdatePeriod",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    40
                   "The interval between decisions about rate control changes",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    41
                   Seconds (1.0),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    42
                   MakeTimeAccessor (&AmrrWifiManager::m_updatePeriod),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    43
                   MakeTimeChecker ())
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    44
    .AddAttribute ("FailureRatio",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    45
                   "Ratio of minimum erronous transmissions needed to switch to a lower rate",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    46
                   Double (1.0/3.0),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    47
                   MakeDoubleAccessor (&AmrrWifiManager::m_failureRatio),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    48
                   MakeDoubleChecker (0.0, 1.0))
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    49
    .AddAttribute ("SuccessRatio",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    50
                   "Ratio of maximum erronous transmissions needed to switch to a higher rate",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    51
                   Double (1.0/10.0),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    52
                   MakeDoubleAccessor (&AmrrWifiManager::m_successRatio),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    53
                   MakeDoubleChecker (0.0, 1.0))
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    54
    .AddAttribute ("MaxSuccessThreshold",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    55
                   "Maximum number of consecutive success periods needed to switch to a higher rate",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    56
                   Uinteger (10),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    57
                   MakeUintegerAccessor (&AmrrWifiManager::m_maxSuccessThreshold),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    58
                   MakeUintegerChecker<uint32_t> ())
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    59
    .AddAttribute ("MinSuccessThreshold",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    60
                   "Minimum number of consecutive success periods needed to switch to a higher rate",
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    61
                   Uinteger (1),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    62
                   MakeUintegerAccessor (&AmrrWifiManager::m_minSuccessThreshold),
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    63
                   MakeUintegerChecker<uint32_t> ())
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    64
    ;
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    65
  return tid;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    68
AmrrWifiManager::AmrrWifiManager ()
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    69
{}
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    70
WifiRemoteStation *
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    71
AmrrWifiManager::CreateStation (void)
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    72
{
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    73
  return new AmrrWifiRemoteStation (this);
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    74
}
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    75
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    76
AmrrWifiRemoteStation::AmrrWifiRemoteStation (Ptr<AmrrWifiManager> stations)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  : m_stations (stations),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
    m_nextModeUpdate (Simulator::Now () + stations->m_updatePeriod),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
    m_tx_ok (0),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
    m_tx_err (0),
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
    m_tx_retr (0),
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    82
    m_retry (0),
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
    83
    m_txrate (0),
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    84
    m_successThreshold (m_stations->m_minSuccessThreshold),
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    85
    m_success (0),
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    86
    m_recovery (false)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
{}
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    88
AmrrWifiRemoteStation::~AmrrWifiRemoteStation ()
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    92
AmrrWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    95
AmrrWifiRemoteStation::ReportRtsFailed (void)
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
    96
{}
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
    98
AmrrWifiRemoteStation::ReportDataFailed (void)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
{
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   100
  m_retry++;
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   101
  m_tx_retr++;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   104
AmrrWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
{}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   107
AmrrWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
{
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   109
  m_retry = 0;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
  m_tx_ok++;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   113
AmrrWifiRemoteStation::ReportFinalRtsFailed (void)
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   114
{}
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   116
AmrrWifiRemoteStation::ReportFinalDataFailed (void)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
{
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   118
  m_retry = 0;
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
  m_tx_err++;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
}
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   121
bool
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   122
AmrrWifiRemoteStation::IsMinRate (void) const
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   123
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   124
  return (m_txrate == 0);
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   125
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   126
bool
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   127
AmrrWifiRemoteStation::IsMaxRate (void) const
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   128
{
2278
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   129
  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
   130
  return (m_txrate + 1 == GetNSupportedModes ());
2274
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
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   133
AmrrWifiRemoteStation::IsSuccess (void) const
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   134
{
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   135
  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
   136
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   137
bool
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   138
AmrrWifiRemoteStation::IsFailure (void) const
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
{
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   140
  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
   141
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   142
bool
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   143
AmrrWifiRemoteStation::IsEnough (void) const
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   144
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   145
  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
   146
}
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   147
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   148
AmrrWifiRemoteStation::ResetCnt (void)
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
  m_tx_ok = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   151
  m_tx_err = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   152
  m_tx_retr = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   153
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   154
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   155
AmrrWifiRemoteStation::IncreaseRate (void)
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   156
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   157
  m_txrate++;
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
   158
  NS_ASSERT (m_txrate < GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   159
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   160
void 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   161
AmrrWifiRemoteStation::DecreaseRate (void)
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   162
{
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   163
  m_txrate--;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   164
}
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   165
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
void
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   167
AmrrWifiRemoteStation::UpdateMode (void)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
  if (Simulator::Now () < m_nextModeUpdate)
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
    {
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
      return;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
    }
2277
51c66e7993c0 avoid uninitialized variables.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2276
diff changeset
   173
  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
   174
  NS_LOG_DEBUG ("Update");
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   175
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   176
  bool needChange = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   177
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   178
  if (IsSuccess () && IsEnough ()) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   179
    {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   180
      m_success++;
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   181
      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
   182
                    " 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
   183
                    " rate="<<m_txrate<<" n-supported-rates="<<GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   184
      if (m_success >= m_successThreshold &&
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   185
          !IsMaxRate ()) 
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
          m_recovery = true;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   188
          m_success = 0;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   189
          IncreaseRate ();
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   190
          needChange = true;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   191
        } 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   192
      else 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   193
        {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   194
          m_recovery = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   195
        }
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
  else if (IsFailure ()) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   198
    {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   199
      m_success = 0;
2279
ff1d63db246d success heuristic was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2278
diff changeset
   200
      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
   201
                    " 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
   202
                    " rate="<<m_txrate<<" n-supported-rates="<<GetNSupportedModes ());
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   203
      if (!IsMinRate ()) 
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
          if (m_recovery) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   206
            {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   207
              m_successThreshold *= 2;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   208
              m_successThreshold = std::min (m_successThreshold,
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   209
                                             m_stations->m_maxSuccessThreshold);
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
          else 
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
              m_successThreshold = m_stations->m_minSuccessThreshold;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   214
            }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   215
          m_recovery = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   216
          DecreaseRate ();
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   217
          needChange = true;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   218
        } 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   219
      else 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   220
        {
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   221
          m_recovery = false;
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   222
        }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   223
    }
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   224
  if (IsEnough () || needChange) 
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   225
    {
2278
4b05fbf5c6e3 some debugging. Max rate test was inverted.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2277
diff changeset
   226
      NS_LOG_DEBUG ("Reset");
2274
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   227
      ResetCnt ();
406712a0c6ef implement AMRR for true.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2273
diff changeset
   228
    }
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   231
Ptr<WifiRemoteStationManager>
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   232
AmrrWifiRemoteStation::GetManager (void) const
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
  return m_stations;
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
WifiMode 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   237
AmrrWifiRemoteStation::DoGetDataMode (uint32_t size)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  UpdateMode ();
2275
f1ae27b37d8f return the computed rate
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2274
diff changeset
   240
  NS_ASSERT (m_txrate < GetNSupportedModes ());
2276
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   241
  uint32_t rateIndex;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   242
  if (m_retry < 1)
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
  else if (m_retry < 2)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   247
    {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   248
      if (m_txrate > 0)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   249
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   250
          rateIndex = m_txrate - 1;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   251
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   252
      else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   253
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   254
          rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   255
        }
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
  else if (m_retry < 3)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   258
    {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   259
      if (m_txrate > 1)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   260
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   261
          rateIndex = m_txrate - 2;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   262
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   263
      else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   264
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   265
          rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   266
        }
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
  else
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
      if (m_txrate > 2)
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   271
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   272
          rateIndex = m_txrate - 3;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   273
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   274
      else
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   275
        {
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   276
          rateIndex = m_txrate;
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   277
        }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   278
    }
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   279
26e3bc114fdd implement the MRR portion of AMRR
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2275
diff changeset
   280
  return GetSupportedMode (rateIndex);
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
WifiMode 
2544
2e6e1a6e0d94 port last rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2279
diff changeset
   283
AmrrWifiRemoteStation::DoGetRtsMode (void)
2273
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
{
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
  UpdateMode ();
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
  // XXX: can we implement something smarter ?
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
  return GetSupportedMode (0);
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
}
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
0bfe240ec168 AMRR rate control algorithm
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
} // namespace ns3