src/wifi/model/aparf-wifi-manager.cc
author Matias Richart <mrichart@fing.edu.uy>
Sun, 25 Jan 2015 11:21:46 -0800
changeset 11153 324c767aefdd
child 11245 5c781d7e5a25
permissions -rw-r--r--
add PARF and APARF WiFi rate controls
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11153
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     2
/*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     3
 * Copyright (c) 2014 Universidad de la República - Uruguay
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     4
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     8
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    12
 * GNU General Public License for more details.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    13
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    17
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    18
 * Author: Matias Richart <mrichart@fing.edu.uy>
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    19
 */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    20
#include "aparf-wifi-manager.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    21
#include "wifi-phy.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    22
#include "ns3/assert.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    23
#include "ns3/log.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    24
#include "ns3/uinteger.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    25
#include "ns3/trace-source-accessor.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    26
#define Min(a,b) ((a < b) ? a : b)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    27
NS_LOG_COMPONENT_DEFINE ("ns3::AparfWifiManager");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    28
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    29
namespace ns3 {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    30
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    31
/**
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    32
 * Hold per-remote-station state for APARF Wifi manager.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    33
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    34
 * This struct extends from WifiRemoteStation struct to hold additional
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    35
 * information required by the APARF Wifi manager
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    36
 */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    37
struct
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    38
AparfWifiRemoteStation : public WifiRemoteStation
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    39
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    40
  uint32_t m_nSuccess; //!< Number of successful transmission attempts.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    41
  uint32_t m_nFailed; //!< Number of failed transmission attempts.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    42
  uint32_t m_pCount; //!< Number of power changes.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    43
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    44
  uint32_t m_successThreshold; //!< The minimum number of successful transmissions to try a new power or rate.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    45
  uint32_t m_failThreshold; //!< The minimum number of failed transmissions to try a new power or rate.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    46
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    47
  uint32_t m_rate; //!< Current rate.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    48
  uint32_t m_rateCrit; //!< Critical rate.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    49
  uint8_t m_power; //!< Current power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    50
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    51
  uint32_t m_nSupported; //!< Number of supported rates by the remote station.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    52
  bool m_initialized; //!< For initializing variables.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    53
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    54
  AparfWifiManager::State m_aparfState; //!< The estimated state of the channel.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    55
};
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    56
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    57
NS_OBJECT_ENSURE_REGISTERED (AparfWifiManager);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    58
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    59
TypeId
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    60
AparfWifiManager::GetTypeId (void)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    61
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    62
  static TypeId tid = TypeId ("ns3::AparfWifiManager")
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    63
    .SetParent<WifiRemoteStationManager> ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    64
    .AddConstructor<AparfWifiManager> ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    65
    .AddAttribute ("SuccessThreshold 1",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    66
                   "The minimum number of successful transmissions in \"High\" state to try a new power or rate.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    67
                   UintegerValue (3),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    68
                   MakeUintegerAccessor (&AparfWifiManager::m_succesMax1),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    69
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    70
    .AddAttribute ("SuccessThreshold 2",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    71
                   "The minimum number of successful transmissions in \"Low\" state to try a new power or rate.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    72
                   UintegerValue (10),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    73
                   MakeUintegerAccessor (&AparfWifiManager::m_succesMax2),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    74
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    75
    .AddAttribute ("FailThreshold",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    76
                   "The minimum number of failed transmissions to try a new power or rate.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    77
                   UintegerValue (1),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    78
                   MakeUintegerAccessor (&AparfWifiManager::m_failMax),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    79
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    80
    .AddAttribute ("PowerThreshold",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    81
                   "The maximum number of power changes.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    82
                   UintegerValue (10),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    83
                   MakeUintegerAccessor (&AparfWifiManager::m_powerMax),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    84
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    85
    .AddAttribute ("Power decrement step",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    86
                   "Step size for decrement the power.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    87
                   UintegerValue (1),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    88
                   MakeUintegerAccessor (&AparfWifiManager::m_powerDec),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    89
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    90
    .AddAttribute ("Power increment step",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    91
                   "Step size for increment the power.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    92
                   UintegerValue (1),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    93
                   MakeUintegerAccessor (&AparfWifiManager::m_powerInc),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    94
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    95
    .AddAttribute ("Rate decrement step",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    96
                   "Step size for decrement the rate.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    97
                   UintegerValue (1),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    98
                   MakeUintegerAccessor (&AparfWifiManager::m_rateDec),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    99
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   100
    .AddAttribute ("Rate increment step",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   101
                   "Step size for increment the rate.",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   102
                   UintegerValue (1),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   103
                   MakeUintegerAccessor (&AparfWifiManager::m_rateInc),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   104
                   MakeUintegerChecker<uint32_t> ())
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   105
    .AddTraceSource ("PowerChange",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   106
                     "The transmission power has change",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   107
                     MakeTraceSourceAccessor (&AparfWifiManager::m_powerChange),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   108
                     "ns3::AparfWifiManager::PowerChangeTracedCallback")
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   109
    .AddTraceSource ("RateChange",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   110
                     "The transmission rate has change",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   111
                     MakeTraceSourceAccessor (&AparfWifiManager::m_rateChange),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   112
                     "ns3::AparfWifiManager::RateChangeTracedCallback")
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   113
  ;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   114
  return tid;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   115
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   116
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   117
AparfWifiManager::AparfWifiManager ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   118
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   119
  NS_LOG_FUNCTION (this);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   120
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   121
AparfWifiManager::~AparfWifiManager ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   122
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   123
  NS_LOG_FUNCTION (this);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   124
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   125
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   126
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   127
AparfWifiManager::SetupPhy (Ptr<WifiPhy> phy)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   128
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   129
  m_nPower = phy->GetNTxPower ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   130
  WifiRemoteStationManager::SetupPhy (phy);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   131
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   132
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   133
WifiRemoteStation *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   134
AparfWifiManager::DoCreateStation (void) const
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   135
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   136
  NS_LOG_FUNCTION (this);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   137
  AparfWifiRemoteStation *station = new AparfWifiRemoteStation ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   138
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   139
  station->m_successThreshold = m_succesMax1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   140
  station->m_failThreshold = m_failMax;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   141
  station->m_nSuccess = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   142
  station->m_nFailed = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   143
  station->m_pCount = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   144
  station->m_aparfState = AparfWifiManager::High;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   145
  station->m_initialized = false;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   146
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   147
  NS_LOG_DEBUG ("create station=" << station << ", rate=" << station->m_rate
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   148
                                  << ", power=" << (int)station->m_power);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   149
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   150
  return station;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   151
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   152
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   153
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   154
AparfWifiManager::CheckInit (AparfWifiRemoteStation *station)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   155
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   156
  if (!station->m_initialized)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   157
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   158
      station->m_nSupported = GetNSupported (station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   159
      station->m_rate = station->m_nSupported - 1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   160
      station->m_power = m_nPower - 1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   161
      station->m_rateCrit = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   162
      m_powerChange (station->m_power, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   163
      m_rateChange (station->m_rate, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   164
      station->m_initialized = true;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   165
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   166
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   167
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   168
void AparfWifiManager::DoReportRtsFailed (WifiRemoteStation *station)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   169
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   170
  NS_LOG_FUNCTION (this << station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   171
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   172
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   173
void AparfWifiManager::DoReportDataFailed (WifiRemoteStation *st)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   174
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   175
  NS_LOG_FUNCTION (this << st);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   176
  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   177
  CheckInit (station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   178
  station->m_nFailed++;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   179
  station->m_nSuccess = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   180
  NS_LOG_DEBUG ("station=" << station << ", rate=" << station->m_rate
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   181
                           << ", power=" << (int)station->m_power);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   182
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   183
  if (station->m_aparfState == AparfWifiManager::Low)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   184
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   185
      station->m_aparfState = AparfWifiManager::High;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   186
      station->m_successThreshold = m_succesMax1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   187
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   188
  else if (station->m_aparfState == AparfWifiManager::Spread)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   189
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   190
      station->m_aparfState = AparfWifiManager::Low;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   191
      station->m_successThreshold = m_succesMax2;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   192
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   193
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   194
  if (station->m_nFailed == station->m_failThreshold)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   195
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   196
      station->m_nFailed = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   197
      station->m_nSuccess = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   198
      station->m_pCount = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   199
      if (station->m_power == (m_nPower - 1))
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   200
        {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   201
          station->m_rateCrit = station->m_rate;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   202
          if (station->m_rate != 0)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   203
            {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   204
              NS_LOG_DEBUG ("station=" << station << " dec rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   205
              station->m_rate -= m_rateDec;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   206
              m_rateChange (station->m_rate, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   207
            }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   208
        }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   209
      else
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   210
        {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   211
          NS_LOG_DEBUG ("station=" << station << " inc power");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   212
          station->m_power += m_powerInc;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   213
          m_powerChange (station->m_power, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   214
        }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   215
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   216
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   217
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   218
AparfWifiManager::DoReportRxOk (WifiRemoteStation *station, double rxSnr, WifiMode txMode)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   219
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   220
  NS_LOG_FUNCTION (this << station << rxSnr << txMode);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   221
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   222
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   223
AparfWifiManager::DoReportRtsOk (WifiRemoteStation *station, double ctsSnr,
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   224
                                 WifiMode ctsMode, double rtsSnr)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   225
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   226
  NS_LOG_FUNCTION (this << station << ctsSnr << ctsMode << rtsSnr);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   227
  NS_LOG_DEBUG ("station=" << station << " rts ok");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   228
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   229
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   230
AparfWifiManager::DoReportDataOk (WifiRemoteStation *st, double ackSnr,
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   231
                                  WifiMode ackMode, double dataSnr)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   232
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   233
  NS_LOG_FUNCTION (this << st << ackSnr << ackMode << dataSnr);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   234
  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   235
  CheckInit (station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   236
  station->m_nSuccess++;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   237
  station->m_nFailed = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   238
  NS_LOG_DEBUG ("station=" << station << " data ok success=" << station->m_nSuccess << ", rate=" << station->m_rate << ", power=" << (int)station->m_power);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   239
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   240
  if ((station->m_aparfState == AparfWifiManager::High) && (station->m_nSuccess >= station->m_successThreshold))
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   241
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   242
      station->m_aparfState = AparfWifiManager::Spread;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   243
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   244
  else if ((station->m_aparfState == AparfWifiManager::Low) && (station->m_nSuccess >= station->m_successThreshold))
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   245
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   246
      station->m_aparfState = AparfWifiManager::Spread;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   247
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   248
  else if (station->m_aparfState == AparfWifiManager::Spread)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   249
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   250
      station->m_aparfState = AparfWifiManager::High;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   251
      station->m_successThreshold = m_succesMax1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   252
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   253
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   254
  if (station->m_nSuccess == station->m_successThreshold)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   255
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   256
      station->m_nSuccess = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   257
      station->m_nFailed = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   258
      if (station->m_rate == (station->m_state->m_operationalRateSet.size () - 1))
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   259
        {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   260
          if (station->m_power != 0)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   261
            {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   262
              NS_LOG_DEBUG ("station=" << station << " dec power");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   263
              station->m_power -= m_powerDec;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   264
              m_powerChange (station->m_power, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   265
            }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   266
        }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   267
      else
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   268
        {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   269
          if (station->m_rateCrit == 0)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   270
            {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   271
              if (station->m_rate != (station->m_state->m_operationalRateSet.size () - 1))
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   272
                {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   273
                  NS_LOG_DEBUG ("station=" << station << " inc rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   274
                  station->m_rate += m_rateInc;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   275
                  m_rateChange (station->m_rate, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   276
                }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   277
            }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   278
          else
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   279
            {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   280
              if (station->m_pCount == m_powerMax)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   281
                {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   282
                  station->m_power = (m_nPower - 1);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   283
                  m_powerChange (station->m_power, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   284
                  station->m_rate = station->m_rateCrit;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   285
                  m_rateChange (station->m_rate, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   286
                  station->m_pCount = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   287
                  station->m_rateCrit = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   288
                }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   289
              else
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   290
                {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   291
                  if (station->m_power != 0)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   292
                    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   293
                      station->m_power -= m_powerDec;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   294
                      m_powerChange (station->m_power, station->m_state->m_address);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   295
                      station->m_pCount++;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   296
                    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   297
                }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   298
            }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   299
        }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   300
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   301
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   302
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   303
AparfWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *station)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   304
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   305
  NS_LOG_FUNCTION (this << station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   306
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   307
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   308
AparfWifiManager::DoReportFinalDataFailed (WifiRemoteStation *station)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   309
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   310
  NS_LOG_FUNCTION (this << station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   311
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   312
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   313
WifiTxVector
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   314
AparfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   315
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   316
  NS_LOG_FUNCTION (this << st << size);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   317
  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   318
  CheckInit (station);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   319
  return WifiTxVector (GetSupported (station, station->m_rate), station->m_power, GetLongRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas ()), GetNumberOfTransmitAntennas (station), GetStbc (station));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   320
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   321
WifiTxVector
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   322
AparfWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   323
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   324
  NS_LOG_FUNCTION (this << st);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   325
  /// \todo we could/should implement the Arf algorithm for
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   326
  /// RTS only by picking a single rate within the BasicRateSet.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   327
  AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   328
  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), GetShortGuardInterval (station), Min (GetNumberOfReceiveAntennas (station),GetNumberOfTransmitAntennas ()), GetNumberOfTransmitAntennas (station), GetStbc (station));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   329
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   330
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   331
bool
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   332
AparfWifiManager::IsLowLatency (void) const
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   333
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   334
  NS_LOG_FUNCTION (this);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   335
  return true;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   336
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   337
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   338
} // namespace ns3