src/wifi/test/power-rate-adaptation-test.cc
author Matias Richart <mrichart@fing.edu.uy>
Sun, 25 Jan 2015 11:21:46 -0800
changeset 11153 324c767aefdd
child 11450 9f4ae69f12b7
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: Matías 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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    21
#include "ns3/wifi-net-device.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    22
#include "ns3/yans-wifi-channel.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    23
#include "ns3/adhoc-wifi-mac.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    24
#include "ns3/yans-wifi-phy.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    25
#include "ns3/parf-wifi-manager.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    26
#include "ns3/propagation-delay-model.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    27
#include "ns3/propagation-loss-model.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    28
#include "ns3/error-rate-model.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    29
#include "ns3/yans-error-rate-model.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    30
#include "ns3/constant-position-mobility-model.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    31
#include "ns3/node.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    32
#include "ns3/simulator.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    33
#include "ns3/test.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    34
#include "ns3/object-factory.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    35
#include "ns3/dca-txop.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    36
#include "ns3/mac-rx-middle.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    37
#include "ns3/pointer.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    38
#include "ns3/rng-seed-manager.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    39
#include "ns3/edca-txop-n.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    40
#include "ns3/config.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    41
#include "ns3/boolean.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    42
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    43
using namespace ns3;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    44
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    45
class PowerRateAdaptationTest : public TestCase
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
public:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    48
  PowerRateAdaptationTest ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    49
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    50
  virtual void DoRun (void);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    51
private:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    52
  void TestParf ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    53
  void TestAparf ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    54
  Ptr<Node> ConfigureNode ();
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
  ObjectFactory m_manager;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    57
};
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
PowerRateAdaptationTest::PowerRateAdaptationTest ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    60
  : TestCase ("PowerRateAdaptation")
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
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    63
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    64
Ptr<Node>
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    65
PowerRateAdaptationTest::ConfigureNode ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    66
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    67
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    68
   * Create channel model. Is is necessary to configure correctly the phy layer.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    69
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    70
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    71
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    72
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    73
   * Create mac layer. We use Adhoc because association is not needed to get supported rates.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    74
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    75
  Ptr<AdhocWifiMac> mac = CreateObject<AdhocWifiMac> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    76
  mac->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    77
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    78
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    79
   * Create mobility model. Is needed by the phy layer for transmission.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    80
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    81
  Ptr<ConstantPositionMobilityModel> mobility = CreateObject<ConstantPositionMobilityModel> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    82
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    83
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    84
   * Create and configure phy layer.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    85
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    86
  Ptr<WifiNetDevice> dev = CreateObject<WifiNetDevice> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    87
  Ptr<YansWifiPhy> phy = CreateObject<YansWifiPhy> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    88
  phy->SetChannel (channel);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    89
  phy->SetDevice (dev);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    90
  phy->SetMobility (mobility);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    91
  phy->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    92
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    93
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    94
   * Configure power control parameters.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    95
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    96
  phy->SetNTxPower(18);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    97
  phy->SetTxPowerStart(0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    98
  phy->SetTxPowerEnd(17);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    99
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   100
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   101
   * Create manager.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   102
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   103
  Ptr<WifiRemoteStationManager> manager = m_manager.Create<WifiRemoteStationManager> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   104
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   105
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   106
   * Create and configure node. Add mac and phy layer and the manager.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   107
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   108
  Ptr<Node> node = CreateObject<Node> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   109
  mac->SetAddress (Mac48Address::Allocate ());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   110
  dev->SetMac (mac);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   111
  dev->SetPhy (phy);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   112
  dev->SetRemoteStationManager (manager);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   113
  node->AddDevice (dev);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   114
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   115
  return node;
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   118
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   119
PowerRateAdaptationTest::TestParf ()
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
  m_manager.SetTypeId ("ns3::ParfWifiManager");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   122
  Ptr<Node> node = ConfigureNode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   123
  Ptr<WifiNetDevice> dev = DynamicCast<WifiNetDevice> (node->GetDevice(0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   124
  Ptr<WifiRemoteStationManager> manager = dev->GetRemoteStationManager();
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
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   127
   * Configure thresholds for rate and power control.
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
  manager->SetAttribute("AttemptThreshold",UintegerValue (15));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   130
  manager->SetAttribute("SuccessThreshold",UintegerValue(10));
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
   * Create a dummy packet to simulate transmission.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   134
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   135
  Mac48Address remoteAddress = Mac48Address::Allocate ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   136
  WifiMacHeader packetHeader;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   137
  packetHeader.SetTypeData ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   138
  packetHeader.SetQosTid (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   139
  Ptr<Packet> packet = Create<Packet> (10);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   140
  WifiMode ackMode;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   141
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   142
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   143
   * To initialize the manager we need to generate a transmission.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   144
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   145
  Ptr<Packet> p = Create<Packet> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   146
  dev->Send (p, remoteAddress, 1);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   147
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   148
  //-----------------------------------------------------------------------------------------------------
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
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   151
   * Parf initiates with maximal rate and power.
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
  WifiTxVector txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   154
  WifiMode mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   155
  int power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   156
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   157
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Initial data rate wrong");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   158
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Initial power level wrong");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   159
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   160
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   161
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   162
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   163
   * After 10 consecutive successful transmissions parf increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   164
   * As we are at maximal rate, the power should be decreased. recoveryPower=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
  for(int i = 0; i<10; i++)
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
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   171
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   172
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   173
  power = (int) txVector.GetTxPowerLevel();
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_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   176
  NS_TEST_ASSERT_MSG_EQ (power, 16, "PARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   177
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   178
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   179
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   180
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   181
   * As we are using recovery power, one failure make power increase.
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
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   184
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   185
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   186
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   187
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   188
  power = (int) txVector.GetTxPowerLevel();
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
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   191
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
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
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
   * After 15 transmissions attempts parf increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   197
   * As we are at maximal rate, the power should be decreased. recoveryPower=true.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   198
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   199
  for(int i = 0; i<7; i++)
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
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   202
      manager->ReportDataFailed(remoteAddress,&packetHeader);
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
  manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   205
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   206
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   207
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   208
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   209
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   210
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   211
  NS_TEST_ASSERT_MSG_EQ (power, 16, "PARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   212
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   213
  //-----------------------------------------------------------------------------------------------------
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
   * As we are using recovery power, one failure make power increase. recoveryPower=false.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   217
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   218
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   219
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   220
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   221
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   222
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   223
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   224
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   225
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   226
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   227
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   230
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   231
   * After two consecutive fails the rate is decreased or the power increased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   232
   * As we are at maximal power, the rate should be decreased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   233
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   234
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   235
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   236
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   237
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   238
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   239
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   240
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   241
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   242
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
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
  //-----------------------------------------------------------------------------------------------------
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
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   247
   * After 10 consecutive successful transmissions parf increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   248
   * As we are not at maximal rate, the rate is increased again. recoveryRate=true.
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
  for(int i = 0; i<10; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   251
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   252
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   255
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   256
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   257
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   258
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   259
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   260
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
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
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   263
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   264
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   265
   * As we are using recovery rate, one failure make rate decrease. recoveryRate=false.
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   268
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   269
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   270
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   271
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   272
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   273
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   274
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   275
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
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
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
   * After 10 consecutive successful transmissions parf increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   281
   * As we are not at maximal rate, the rate is increased again. recoveryRate=true.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   282
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   283
  for(int i = 0; i<10; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   284
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   285
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   286
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   287
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   288
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   289
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   290
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   291
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   292
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   293
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   294
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   295
  //-----------------------------------------------------------------------------------------------------
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
   * After 10 consecutive successful transmissions parf increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   299
   * As we are at maximal rate, the power is decreased. recoveryRate=false, recoveryPower=true.
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
  for(int i = 0; i<10; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   302
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   303
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   306
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   307
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   308
  power = (int) txVector.GetTxPowerLevel();
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_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   311
  NS_TEST_ASSERT_MSG_EQ (power, 16, "PARF: Incorrect value of power level");
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
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   314
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
   * One successful transmissions after a power decrease make recoverPower=false.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   317
   * So we need two consecutive failures to increase power again.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   318
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   319
  manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
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
  for(int i = 0; i<2; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   322
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   323
      manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   324
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   325
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   326
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   327
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   328
  power = (int) txVector.GetTxPowerLevel();
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
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "PARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   331
  NS_TEST_ASSERT_MSG_EQ (power, 17, "PARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   332
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   333
  Simulator::Stop (Seconds (10.0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   334
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   335
  Simulator::Run ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   336
  Simulator::Destroy ();
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
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   339
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   340
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   341
PowerRateAdaptationTest::TestAparf ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   342
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   343
  m_manager.SetTypeId ("ns3::AparfWifiManager");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   344
  Ptr<Node> node = ConfigureNode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   345
  Ptr<WifiNetDevice> dev = DynamicCast<WifiNetDevice> (node->GetDevice(0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   346
  Ptr<WifiRemoteStationManager> manager = dev->GetRemoteStationManager();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   347
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   348
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   349
   * Configure thresholds for rate and power control.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   350
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   351
  manager->SetAttribute("SuccessThreshold 1",UintegerValue (3));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   352
  manager->SetAttribute("SuccessThreshold 2",UintegerValue(10));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   353
  manager->SetAttribute("FailThreshold",UintegerValue (1));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   354
  manager->SetAttribute("PowerThreshold",UintegerValue(10));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   355
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   356
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   357
   * Create a dummy packet to simulate transmission.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   358
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   359
  Mac48Address remoteAddress = Mac48Address::Allocate ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   360
  WifiMacHeader packetHeader;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   361
  packetHeader.SetTypeData ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   362
  packetHeader.SetQosTid (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   363
  Ptr<Packet> packet = Create<Packet> (10);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   364
  WifiMode ackMode;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   365
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   366
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   367
   * To initialize the manager we need to generate a transmission.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   368
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   369
  Ptr<Packet> p = Create<Packet> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   370
  dev->Send (p, remoteAddress, 1);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   371
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   372
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   373
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   374
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   375
   * Aparf initiates with maximal rate and power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   376
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   377
  WifiTxVector txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   378
  WifiMode mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   379
  int power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   380
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   381
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Initial data rate wrong");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   382
  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Initial power level wrong");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   383
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   384
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   385
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   386
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   387
   * As Aparf starts in state High, after 3 consecutive successful transmissions aparf increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   388
   * As we are at maximal rate, the power should be decreased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   389
   * Change to state Spread.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   390
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   391
  for(int i = 0; i<3; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   392
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   393
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   394
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   395
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   396
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   397
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   398
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   399
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   400
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   401
  NS_TEST_ASSERT_MSG_EQ (power, 16, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   402
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   403
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   404
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   405
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   406
   * One failure make the power to be increased again.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   407
   * Change to state Low.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   408
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   409
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   410
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   411
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   412
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   413
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   414
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   415
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   416
  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   417
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   418
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   419
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   420
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   421
   * As we are in state Low we need 10 successful transmissions to increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   422
   * As we are at maximal rate, the power should be decreased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   423
   * Change to state Spread.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   424
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   425
  for(int i = 0; i<10; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   426
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   427
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   428
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   429
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   430
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   431
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   432
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   433
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   434
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   435
  NS_TEST_ASSERT_MSG_EQ (power, 16, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   436
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   437
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   438
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   439
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   440
   * One more successful transmission make to change to state High.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   441
   * Two more successful transmissions make power decrease.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   442
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   443
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   444
  for(int i = 0; i<3; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   445
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   446
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   447
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   448
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   449
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   450
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   451
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   452
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   453
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   454
  NS_TEST_ASSERT_MSG_EQ (power, 15, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   455
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   456
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   457
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   458
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   459
   * As we are in state High we need 3 successful transmissions to increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   460
   * After 16*3 successful transmissions power is decreased to zero.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   461
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   462
  for(int i = 0; i<16*3; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   463
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   464
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   465
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   466
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   467
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   468
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   469
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   470
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   471
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   472
  NS_TEST_ASSERT_MSG_EQ (power, 0, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   473
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   474
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   475
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   476
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   477
   * After one fail the rate is decreased or the power increased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   478
   * As we are at minimal power, the power should be increased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   479
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   480
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   481
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   482
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   483
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   484
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   485
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   486
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   487
  NS_TEST_ASSERT_MSG_EQ (power, 1, "Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   488
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   489
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   490
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   491
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   492
   * After one fail the rate is decreased or the power increased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   493
   * After 16 failed transmissions power is increase to 17.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   494
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   495
  for(int i = 0; i<16; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   496
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   497
      manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   498
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   499
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   500
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   501
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   502
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   503
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   504
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   505
  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   506
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   507
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   508
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   509
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   510
   * After one fail the rate is decreased or the power increased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   511
   * As we are at maximal power, the rate should be decreased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   512
   * Set critical rate to 54 Mbps.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   513
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   514
  manager->ReportDataFailed(remoteAddress,&packetHeader);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   515
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   516
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   517
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   518
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   519
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   520
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   521
  NS_TEST_ASSERT_MSG_EQ (power, 17, "Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   522
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   523
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   524
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   525
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   526
   * As we are in state High we need 3 successful transmissions to increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   527
   * As rate critical is set, after 3 successful transmissions power is decreased.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   528
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   529
  for(int i = 0; i<3; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   530
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   531
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   532
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   533
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   534
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   535
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   536
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   537
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   538
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   539
  NS_TEST_ASSERT_MSG_EQ (power, 16, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   540
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   541
  //-----------------------------------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   542
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   543
  /*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   544
   * As we are in state High we need 3 successful transmissions to increase rate or decrease power.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   545
   * After 10 power changes critical rate is reseted.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   546
   * So after 10*3 successful transmissions critical rate is set to 0.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   547
   * And 3 successful transmissions more will make power increase to maximum and rate increase to the critical rate.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   548
   */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   549
  for(int i = 0; i<9*3; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   550
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   551
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   552
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   553
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   554
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   555
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   556
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   557
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   558
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 48000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   559
  NS_TEST_ASSERT_MSG_EQ (power, 7, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   560
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   561
  for(int i = 0; i<3; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   562
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   563
      manager->ReportDataOk(remoteAddress, &packetHeader, 0, ackMode, 0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   564
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   565
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   566
  txVector = manager->GetDataTxVector(remoteAddress,&packetHeader,packet,packet->GetSize());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   567
  mode = txVector.GetMode();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   568
  power = (int) txVector.GetTxPowerLevel();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   569
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   570
  NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate(), 54000000, "APARF: Incorrect vale of data rate");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   571
  NS_TEST_ASSERT_MSG_EQ (power, 17, "APARF: Incorrect value of power level");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   572
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   573
  Simulator::Stop (Seconds (10.0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   574
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   575
  Simulator::Run ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   576
  Simulator::Destroy ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   577
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   578
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   579
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   580
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   581
PowerRateAdaptationTest::DoRun (void)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   582
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   583
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   584
  TestParf ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   585
  TestAparf ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   586
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   587
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   588
//-----------------------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   589
class PowerRateAdaptationTestSuite : public TestSuite
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   590
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   591
public:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   592
  PowerRateAdaptationTestSuite ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   593
};
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   594
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   595
PowerRateAdaptationTestSuite::PowerRateAdaptationTestSuite ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   596
  : TestSuite ("power-rate-adaptation-wifi", UNIT)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   597
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   598
  AddTestCase (new PowerRateAdaptationTest, TestCase::QUICK);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   599
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   600
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   601
static PowerRateAdaptationTestSuite g_powerRateAdaptationTestSuite;