examples/wireless/power-adaptation-distance.cc
author Matias Richart <mrichart@fing.edu.uy>
Sun, 25 Jan 2015 11:21:46 -0800
changeset 11153 324c767aefdd
child 11174 780a43e4980c
permissions -rw-r--r--
add PARF and APARF WiFi rate controls
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11153
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     2
/*
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     3
 * Copyright (c) 2014 Universidad de la República - Uruguay
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     4
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     8
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    12
 * GNU General Public License for more details.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    13
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    17
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    18
 * Author: Matias Richart <mrichart@fing.edu.uy>
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    19
 */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    20
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    21
/**
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    22
 * This example program is designed to illustrate the behavior of two
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    23
 * power/rate-adaptive WiFi rate controls; namely, ns3::ParfWifiManager
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    24
 * and ns3::AparfWifiManager.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    25
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    26
 * The output of this is typically two plot files, named throughput-parf.plt
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    27
 * (or throughput-aparf.plt, if Aparf is used) and power-parf.plt If 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    28
 * Gnuplot program is available, one can use it to convert the plt file
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    29
 * into an eps file, by running:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    30
 * \code{.sh}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    31
 *   gnuplot throughput-parf.plt
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    32
 * \endcode
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    33
 * Also, to enable logging of rate and power changes to the terminal, set this
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    34
 * environment variable:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    35
 * \code{.sh}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    36
 *   export NS_LOG=PowerAdaptationDistance=level_info
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    37
 * \endcode
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    38
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    39
 * This simulation consist of 2 nodes, one AP and one STA.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    40
 * The AP generates UDP traffic with a CBR of 54 Mbps to the STA.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    41
 * The AP can use any power and rate control mechanism and the STA uses 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    42
 * only Minstrel rate control.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    43
 * The STA can be configured to move away from (or towards to) the AP.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    44
 * By default, the AP is at coordinate (0,0,0) and the STA starts at 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    45
 * coordinate (5,0,0) (meters) and moves away on the x axis by 1 meter every
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    46
 * second.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    47
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    48
 * The output consists of:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    49
 * - A plot of average throughput vs. distance.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    50
 * - A plot of average transmit power vs. distance.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    51
 * - (if logging is enabled) the changes of power and rate to standard output.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    52
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    53
 * The Average Transmit Power is defined as an average of the power
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    54
 * consumed per measurement interval, expressed in milliwatts.  The
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    55
 * power level for each frame transmission is reported by the simulator, 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    56
 * and the energy consumed is obtained by multiplying the power by the
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    57
 * frame duration.  At every 'stepTime' (defaulting to 1 second), the
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    58
 * total energy for the collection period is divided by the step time 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    59
 * and converted from dbm to milliwatt units, and this average is 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    60
 * plotted against time.
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
 * When neither Parf nor Aparf is selected as the rate control, the
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    63
 * generation of the plot of average transmit power vs distance is suppressed
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    64
 * since the other Wifi rate controls do not support the necessary callbacks
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    65
 * for computing the average power.
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
 * To display all the possible arguments and their defaults:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    68
 * \code{.sh}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    69
 *   ./waf --run "power-adaptation-distance --help"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    70
 * \endcode
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
 * Example usage (selecting Aparf rather than Parf):
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    73
 * \code{.sh}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    74
 *   ./waf --run "power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    75
 * \endcode
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    76
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    77
 * Another example (moving towards the AP):
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    78
 * \code{.sh}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    79
 *   ./waf --run "power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf --stepsSize=-1 --STA1_x=200"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    80
 * \endcode
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    81
 *
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    82
 * To enable the log of rate and power changes:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    83
 * \code{.sh}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    84
 *   export NS_LOG=PowerAdaptationDistance=level_info
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    85
 * \endcode
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    86
 */
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    87
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    88
#include <sstream>
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    89
#include <fstream>
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    90
#include <math.h>
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    91
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    92
#include "ns3/core-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    93
#include "ns3/network-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    94
#include "ns3/internet-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    95
#include "ns3/mobility-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    96
#include "ns3/wifi-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    97
#include "ns3/applications-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    98
#include "ns3/stats-module.h"
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
    99
#include "ns3/flow-monitor-module.h"
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
using namespace ns3;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   102
using namespace std;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   103
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   104
NS_LOG_COMPONENT_DEFINE ("PowerAdaptationDistance");
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
// packet size generated at the AP
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   107
static const uint32_t packetSize = 1420;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   108
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   109
class NodeStatistics
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   110
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   111
public:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   112
  NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   113
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   114
  void CheckStatistics (double time);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   115
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   116
  void PhyCallback (std::string path, Ptr<const Packet> packet);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   117
  void RxCallback (std::string path, Ptr<const Packet> packet, const Address &from);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   118
  void PowerCallback (std::string path, uint8_t power, Mac48Address dest);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   119
  void RateCallback (std::string path, uint32_t rate, Mac48Address dest);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   120
  void SetPosition (Ptr<Node> node, Vector position);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   121
  void AdvancePosition (Ptr<Node> node, int stepsSize, int stepsTime);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   122
  Vector GetPosition (Ptr<Node> node);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   123
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   124
  Gnuplot2dDataset GetDatafile ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   125
  Gnuplot2dDataset GetPowerDatafile ();
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
private:
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   128
  typedef std::vector<std::pair<Time,WifiMode> > TxTime;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   129
  void SetupPhy (Ptr<WifiPhy> phy);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   130
  Time GetCalcTxTime (WifiMode mode);
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
  std::map<Mac48Address, uint32_t> actualPower;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   133
  std::map<Mac48Address, WifiMode> actualMode;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   134
  uint32_t m_bytesTotal;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   135
  double totalEnergy;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   136
  double totalTime;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   137
  Ptr<WifiPhy> myPhy;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   138
  TxTime timeTable;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   139
  Gnuplot2dDataset m_output;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   140
  Gnuplot2dDataset m_output_power;
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
NodeStatistics::NodeStatistics (NetDeviceContainer aps, NetDeviceContainer stas)
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<NetDevice> device = aps.Get (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   146
  Ptr<WifiNetDevice> wifiDevice = DynamicCast<WifiNetDevice> (device);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   147
  Ptr<WifiPhy> phy = wifiDevice->GetPhy ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   148
  myPhy = phy;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   149
  SetupPhy (phy);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   150
  for (uint32_t j = 0; j < stas.GetN (); j++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   151
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   152
      Ptr<NetDevice> staDevice = stas.Get (j);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   153
      Ptr<WifiNetDevice> wifiStaDevice = DynamicCast<WifiNetDevice> (staDevice);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   154
      Mac48Address addr = wifiStaDevice->GetMac ()->GetAddress ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   155
      actualPower[addr] = 17;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   156
      actualMode[addr] = phy->GetMode (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   157
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   158
  actualMode[Mac48Address ("ff:ff:ff:ff:ff:ff")] = phy->GetMode (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   159
  totalEnergy = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   160
  totalTime = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   161
  m_bytesTotal = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   162
  m_output.SetTitle ("Throughput Mbits/s");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   163
  m_output_power.SetTitle ("Average Transmit Power");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   164
}
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
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   167
NodeStatistics::SetupPhy (Ptr<WifiPhy> phy)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   168
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   169
  uint32_t nModes = phy->GetNModes ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   170
  for (uint32_t i = 0; i < nModes; i++)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   171
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   172
      WifiMode mode = phy->GetMode (i);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   173
      WifiTxVector txVector;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   174
      txVector.SetMode (mode);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   175
      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency ()), mode));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   176
    }
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
Time
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   180
NodeStatistics::GetCalcTxTime (WifiMode mode)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   181
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   182
  for (TxTime::const_iterator i = timeTable.begin (); i != timeTable.end (); i++)
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
      if (mode == i->second)
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
          return i->first;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   187
        }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   188
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   189
  NS_ASSERT (false);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   190
  return Seconds (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   191
}
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
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   194
NodeStatistics::PhyCallback (std::string path, Ptr<const Packet> packet)
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
  WifiMacHeader head;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   197
  packet->PeekHeader (head);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   198
  Mac48Address dest = head.GetAddr1 ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   199
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   200
  totalEnergy += actualPower[dest] * GetCalcTxTime (actualMode[dest]).GetSeconds ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   201
  totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   202
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   205
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   206
NodeStatistics::PowerCallback (std::string path, uint8_t power, Mac48Address dest)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   207
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   208
  double   txPowerBaseDbm = myPhy->GetTxPowerStart ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   209
  double   txPowerEndDbm = myPhy->GetTxPowerEnd ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   210
  uint32_t nTxPower = myPhy->GetNTxPower ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   211
  double dbm;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   212
  if (nTxPower > 1)
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
      dbm = txPowerBaseDbm + power * (txPowerEndDbm - txPowerBaseDbm) / (nTxPower - 1);
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
  else
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
      NS_ASSERT_MSG (txPowerBaseDbm == txPowerEndDbm, "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   219
      dbm = txPowerBaseDbm;
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
  actualPower[dest] = dbm;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   222
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   223
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   224
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   225
NodeStatistics::RateCallback (std::string path, uint32_t rate, Mac48Address dest)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   226
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   227
  actualMode[dest] = myPhy->GetMode (rate);
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
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   231
NodeStatistics::RxCallback (std::string path, Ptr<const Packet> packet, const Address &from)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   232
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   233
  m_bytesTotal += packet->GetSize ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   234
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   235
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   236
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   237
NodeStatistics::CheckStatistics (double time)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   238
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   239
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   240
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   241
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   242
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   243
NodeStatistics::SetPosition (Ptr<Node> node, Vector position)
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
  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   246
  mobility->SetPosition (position);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   247
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   248
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   249
Vector
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   250
NodeStatistics::GetPosition (Ptr<Node> node)
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
  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   253
  return mobility->GetPosition ();
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   256
void
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   257
NodeStatistics::AdvancePosition (Ptr<Node> node, int stepsSize, int stepsTime)
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
  Vector pos = GetPosition (node);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   260
  double mbs = ((m_bytesTotal * 8.0) / (1000000 * stepsTime));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   261
  m_bytesTotal = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   262
  double atm = pow (10, ((totalEnergy / stepsTime) / 10));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   263
  totalEnergy = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   264
  totalTime = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   265
  m_output_power.Add (pos.x, atm);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   266
  m_output.Add (pos.x, mbs);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   267
  pos.x += stepsSize;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   268
  SetPosition (node, pos);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   269
  NS_LOG_INFO ("At time " << Simulator::Now ().GetSeconds () << " sec; setting new position to " << pos);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   270
  Simulator::Schedule (Seconds (stepsTime), &NodeStatistics::AdvancePosition, this, node, stepsSize, stepsTime);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   271
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   272
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   273
Gnuplot2dDataset
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   274
NodeStatistics::GetDatafile ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   275
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   276
  return m_output;
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
Gnuplot2dDataset
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   280
NodeStatistics::GetPowerDatafile ()
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   281
{
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   282
  return m_output_power;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   283
}
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
void PowerCallback (std::string path, uint8_t power, Mac48Address dest)
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
  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Power " << (int)power);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   288
}
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   289
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   290
void RateCallback (std::string path, uint32_t rate, Mac48Address dest)
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_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Rate " <<  rate);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   293
}
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
int main (int argc, char *argv[])
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
  double maxPower = 17;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   298
  double minPower = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   299
  uint32_t powerLevels = 18;
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
  uint32_t rtsThreshold = 2346;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   302
  std::string manager = "ns3::ParfWifiManager";
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   303
  std::string outputFileName = "parf";
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   304
  int ap1_x = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   305
  int ap1_y = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   306
  int sta1_x = 5;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   307
  int sta1_y = 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   308
  uint32_t steps = 200;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   309
  uint32_t stepsSize = 1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   310
  uint32_t stepsTime = 1;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   311
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   312
  CommandLine cmd;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   313
  cmd.AddValue ("manager", "PRC Manager", manager);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   314
  cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   315
  cmd.AddValue ("outputFileName", "Output filename", outputFileName);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   316
  cmd.AddValue ("steps", "How many different distances to try", steps);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   317
  cmd.AddValue ("stepsTime", "Time on each step", stepsTime);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   318
  cmd.AddValue ("stepsSize", "Distance between steps", stepsSize);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   319
  cmd.AddValue ("maxPower", "Maximum available transmission level (dbm).", maxPower);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   320
  cmd.AddValue ("minPower", "Minimum available transmission level (dbm).", minPower);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   321
  cmd.AddValue ("powerLevels", "Number of transmission power levels available between "
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   322
                "TxPowerStart and TxPowerEnd included.", powerLevels);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   323
  cmd.AddValue ("AP1_x", "Position of AP1 in x coordinate", ap1_x);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   324
  cmd.AddValue ("AP1_y", "Position of AP1 in y coordinate", ap1_y);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   325
  cmd.AddValue ("STA1_x", "Position of STA1 in x coordinate", sta1_x);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   326
  cmd.AddValue ("STA1_y", "Position of STA1 in y coordinate", sta1_y);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   327
  cmd.Parse (argc, argv);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   328
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   329
  if (steps == 0)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   330
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   331
      std::cout << "Exiting without running simulation; steps value of 0" << std::endl;
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
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   334
  uint32_t simuTime = (steps + 1) * stepsTime;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   335
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   336
  // Define the APs
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   337
  NodeContainer wifiApNodes;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   338
  wifiApNodes.Create (1);
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
  //Define the STAs
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   341
  NodeContainer wifiStaNodes;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   342
  wifiStaNodes.Create (1);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   343
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   344
  WifiHelper wifi = WifiHelper::Default ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   345
  wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   346
  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   347
  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   348
  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   349
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   350
  wifiPhy.SetChannel (wifiChannel.Create ());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   351
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   352
  NetDeviceContainer wifiApDevices;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   353
  NetDeviceContainer wifiStaDevices;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   354
  NetDeviceContainer wifiDevices;
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
  //Configure the STA node
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   357
  wifi.SetRemoteStationManager ("ns3::MinstrelWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   358
  wifiPhy.Set ("TxPowerStart", DoubleValue (maxPower));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   359
  wifiPhy.Set ("TxPowerEnd", DoubleValue (maxPower));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   360
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   361
  Ssid ssid = Ssid ("AP");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   362
  wifiMac.SetType ("ns3::StaWifiMac",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   363
                   "Ssid", SsidValue (ssid),
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   364
                   "ActiveProbing", BooleanValue (false));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   365
  wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
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
  //Configure the AP node
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   368
  wifi.SetRemoteStationManager (manager, "DefaultTxPowerLevel", UintegerValue (maxPower), "RtsCtsThreshold", UintegerValue (rtsThreshold));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   369
  wifiPhy.Set ("TxPowerStart", DoubleValue (minPower));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   370
  wifiPhy.Set ("TxPowerEnd", DoubleValue (maxPower));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   371
  wifiPhy.Set ("TxPowerLevels", UintegerValue (powerLevels));
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
  ssid = Ssid ("AP");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   374
  wifiMac.SetType ("ns3::ApWifiMac",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   375
                   "Ssid", SsidValue (ssid));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   376
  wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   377
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   378
  wifiDevices.Add (wifiStaDevices);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   379
  wifiDevices.Add (wifiApDevices);
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
  // Configure the mobility.
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   382
  MobilityHelper mobility;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   383
  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   384
  //Initial position of AP and STA
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   385
  positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   386
  NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   387
  positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   388
  NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   389
  mobility.SetPositionAllocator (positionAlloc);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   390
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   391
  mobility.Install (wifiApNodes.Get (0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   392
  mobility.Install (wifiStaNodes.Get (0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   393
 
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   394
  //Statistics counter
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   395
  NodeStatistics statistics = NodeStatistics (wifiApDevices, wifiStaDevices);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   396
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   397
  //Move the STA by stepsSize meters every stepsTime seconds
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   398
  Simulator::Schedule (Seconds (0.5 + stepsTime), &NodeStatistics::AdvancePosition, &statistics, wifiStaNodes.Get (0), stepsSize, stepsTime);
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
  //Configure the IP stack
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   401
  InternetStackHelper stack;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   402
  stack.Install (wifiApNodes);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   403
  stack.Install (wifiStaNodes);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   404
  Ipv4AddressHelper address;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   405
  address.SetBase ("10.1.1.0", "255.255.255.0");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   406
  Ipv4InterfaceContainer i = address.Assign (wifiDevices);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   407
  Ipv4Address sinkAddress = i.GetAddress (0);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   408
  uint16_t port = 9;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   409
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   410
  //Configure the CBR generator
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   411
  PacketSinkHelper sink ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   412
  ApplicationContainer apps_sink = sink.Install (wifiStaNodes.Get (0));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   413
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   414
  OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   415
  onoff.SetConstantRate (DataRate ("54Mb/s"), packetSize);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   416
  onoff.SetAttribute ("StartTime", TimeValue (Seconds (0.5)));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   417
  onoff.SetAttribute ("StopTime", TimeValue (Seconds (simuTime)));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   418
  ApplicationContainer apps_source = onoff.Install (wifiApNodes.Get (0));
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
  apps_sink.Start (Seconds (0.5));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   421
  apps_sink.Stop (Seconds (simuTime));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   422
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   423
  //------------------------------------------------------------
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   424
  //-- Setup stats and data collection
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   425
  //--------------------------------------------
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
  //Register packet receptions to calculate throughput
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   428
  Config::Connect ("/NodeList/1/ApplicationList/*/$ns3::PacketSink/Rx",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   429
                   MakeCallback (&NodeStatistics::RxCallback, &statistics));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   430
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   431
  //Register power and rate changes to calculate the Average Transmit Power
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   432
  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   433
                   MakeCallback (&NodeStatistics::PowerCallback, &statistics));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   434
  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   435
                   MakeCallback (&NodeStatistics::RateCallback, &statistics));
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
  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   438
                   MakeCallback (&NodeStatistics::PhyCallback, &statistics));
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
  //Callbacks to print every change of power and rate
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   441
  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/PowerChange",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   442
                   MakeCallback (PowerCallback));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   443
  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   444
                   MakeCallback (RateCallback));
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
  Simulator::Stop (Seconds (simuTime));
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   447
  Simulator::Run ();
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
  std::ofstream outfile (("throughput-" + outputFileName + ".plt").c_str ());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   450
  Gnuplot gnuplot = Gnuplot (("throughput-" + outputFileName + ".eps").c_str (), "Throughput");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   451
  gnuplot.SetTerminal ("post eps color enhanced");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   452
  gnuplot.SetLegend ("Time (seconds)", "Throughput (Mb/s)");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   453
  gnuplot.SetTitle ("Throughput (AP to STA) vs time");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   454
  gnuplot.AddDataset (statistics.GetDatafile ());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   455
  gnuplot.GenerateOutput (outfile);
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
  if (manager.compare ("ns3::ParfWifiManager") == 0 ||
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   458
      manager.compare ("ns3::AparfWifiManager") == 0)
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   459
    {
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   460
      std::ofstream outfile2 (("power-" + outputFileName + ".plt").c_str ());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   461
      gnuplot = Gnuplot (("power-" + outputFileName + ".eps").c_str (), "Average Transmit Power");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   462
      gnuplot.SetTerminal ("post eps color enhanced");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   463
      gnuplot.SetLegend ("Time (seconds)", "Power (mW)");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   464
      gnuplot.SetTitle ("Average transmit power (AP to STA) vs time");
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   465
      gnuplot.AddDataset (statistics.GetPowerDatafile ());
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   466
      gnuplot.GenerateOutput (outfile2);
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   467
    }
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   468
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   469
  Simulator::Destroy ();
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
  return 0;
324c767aefdd add PARF and APARF WiFi rate controls
Matias Richart <mrichart@fing.edu.uy>
parents:
diff changeset
   472
}