src/wifi/examples/test-interference-helper.cc
author Sébastien Deronne <sebastien.deronne@gmail.com>
Mon, 22 Jun 2015 19:00:34 +0200
changeset 11455 978c1c341d74
child 11460 fb2b8e22f5f4
permissions -rw-r--r--
add test script for InterferenceHelper
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11455
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     2
/*
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     3
 * Copyright (c) 2015
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     4
 *
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     8
 *
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    12
 * GNU General Public License for more details.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    13
 *
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    17
 *
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    18
 * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    19
 */
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    20
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    21
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    22
// This script is used to verify the behavior of InterferenceHelper.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    23
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    24
// The scenario consists of two IEEE 802.11 hidden stations and an access point.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    25
// The two stations have both a packet to transmit to the access point.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    26
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    27
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    28
// (xA,0,0)     (0,0,0)      (xB,0,0)
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    29
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    30
//    *   ----->   *   <-----   *
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    31
//    |            |            |
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    32
//   STA A         AP          STA B
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    33
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    34
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    35
// The program can be configured at run-time by passing command-line arguments.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    36
// It enables to configure the delay between the transmission from station A
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    37
// and the transmission from station B (--delay option). It is also possible to
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    38
// select the tx power level (--txPowerA and --txPowerB options), the packet size
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    39
// (--packetSizeA and --packetSizeB options) and the modulation (--txModeA and
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    40
// --txModeB options) used for the respective transmissions.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    41
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    42
// By default, IEEE 802.11a with long preamble type is considered, but those
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    43
// parameters can be also picked among other IEEE 802.11 flavors and preamble
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    44
// types available in the simulator (--standard and --preamble options).
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    45
// Note that the program checks the consistency between the selected standard
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    46
// the selected preamble type.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    47
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    48
// The output of the program displays InterfenceHelper and YansWifiPhy trace
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    49
// logs associated to the chosen scenario.
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    50
//
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    51
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    52
#include "ns3/core-module.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    53
#include "ns3/wifi-net-device.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    54
#include "ns3/yans-wifi-channel.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    55
#include "ns3/yans-wifi-phy.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    56
#include "ns3/propagation-loss-model.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    57
#include "ns3/propagation-delay-model.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    58
#include "ns3/error-rate-model.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    59
#include "ns3/yans-error-rate-model.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    60
#include "ns3/ptr.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    61
#include "ns3/mobility-model.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    62
#include "ns3/constant-position-mobility-model.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    63
#include "ns3/vector.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    64
#include "ns3/packet.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    65
#include "ns3/simulator.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    66
#include "ns3/nstime.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    67
#include "ns3/command-line.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    68
#include "ns3/wifi-tx-vector.h"
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    69
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    70
using namespace ns3;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    71
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    72
class InterferenceExperiment
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    73
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    74
public:
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    75
  struct Input
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    76
  {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    77
    Input ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    78
    Time interval;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    79
    double xA;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    80
    double xB;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    81
    std::string txModeA;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    82
    std::string txModeB;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    83
    uint32_t txPowerLevelA;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    84
    uint32_t txPowerLevelB;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    85
    uint32_t packetSizeA;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    86
    uint32_t packetSizeB;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    87
    enum WifiPhyStandard standard;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    88
    enum WifiPreamble preamble;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    89
  };
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    90
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    91
  InterferenceExperiment ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    92
  void Run (struct InterferenceExperiment::Input input);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    93
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    94
private:
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    95
  void SendA (void) const;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    96
  void SendB (void) const;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    97
  Ptr<YansWifiPhy> m_txA;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    98
  Ptr<YansWifiPhy> m_txB;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
    99
  struct Input m_input;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   100
};
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   101
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   102
void
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   103
InterferenceExperiment::SendA (void) const
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   104
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   105
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   106
  WifiTxVector txVector;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   107
  txVector.SetTxPowerLevel (m_input.txPowerLevelA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   108
  txVector.SetMode (WifiMode (m_input.txModeA));
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   109
  m_txA->SendPacket (p, txVector, m_input.preamble, 0);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   110
}
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   111
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   112
void
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   113
InterferenceExperiment::SendB (void) const
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   114
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   115
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   116
  WifiTxVector txVector;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   117
  txVector.SetTxPowerLevel (m_input.txPowerLevelB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   118
  txVector.SetMode (WifiMode (m_input.txModeB));
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   119
  m_txB->SendPacket (p, txVector, m_input.preamble, 0);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   120
}
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   121
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   122
InterferenceExperiment::InterferenceExperiment ()
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   123
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   124
}
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   125
InterferenceExperiment::Input::Input ()
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   126
  : xA (-5),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   127
    xB (5),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   128
    txModeA ("OfdmRate54Mbps"),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   129
    txModeB ("OfdmRate54Mbps"),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   130
    txPowerLevelA (0),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   131
    txPowerLevelB (0),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   132
    packetSizeA (1500),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   133
    packetSizeB (1500),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   134
    standard (WIFI_PHY_STANDARD_80211a),
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   135
    preamble (WIFI_PREAMBLE_LONG)
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   136
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   137
}
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   138
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   139
void
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   140
InterferenceExperiment::Run (struct InterferenceExperiment::Input input)
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   141
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   142
  m_input = input;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   143
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   144
  double range = std::max (std::abs (input.xA), input.xB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   145
  Config::SetDefault ("ns3::RangePropagationLossModel::MaxRange", DoubleValue (range));
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   146
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   147
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   148
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   149
  Ptr<RangePropagationLossModel> loss = CreateObject<RangePropagationLossModel> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   150
  channel->SetPropagationLossModel (loss);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   151
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   152
  Ptr<MobilityModel> posTxA = CreateObject<ConstantPositionMobilityModel> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   153
  posTxA->SetPosition (Vector (input.xA, 0.0, 0.0));
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   154
  Ptr<MobilityModel> posTxB = CreateObject<ConstantPositionMobilityModel> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   155
  posTxB->SetPosition (Vector (input.xB, 0.0, 0.0));
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   156
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   157
  posRx->SetPosition (Vector (0.0, 0.0, 0.0));
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   158
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   159
  m_txA = CreateObject<YansWifiPhy> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   160
  m_txB = CreateObject<YansWifiPhy> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   161
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   162
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   163
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   164
  m_txA->SetErrorRateModel (error);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   165
  m_txB->SetErrorRateModel (error);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   166
  rx->SetErrorRateModel (error);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   167
  m_txA->SetChannel (channel);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   168
  m_txB->SetChannel (channel);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   169
  rx->SetChannel (channel);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   170
  m_txA->SetMobility (posTxA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   171
  m_txB->SetMobility (posTxB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   172
  rx->SetMobility (posRx);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   173
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   174
  m_txA->ConfigureStandard (input.standard);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   175
  m_txB->ConfigureStandard (input.standard);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   176
  rx->ConfigureStandard (input.standard);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   177
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   178
  Simulator::Schedule (Seconds (0), &InterferenceExperiment::SendA, this);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   179
  Simulator::Schedule (Seconds (0) + MicroSeconds (input.interval), &InterferenceExperiment::SendB, this);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   180
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   181
  Simulator::Run ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   182
  Simulator::Destroy ();
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   183
}
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   184
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   185
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   186
int main (int argc, char *argv[])
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   187
{
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   188
  InterferenceExperiment::Input input;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   189
  std::string str_standard = "WIFI_PHY_STANDARD_80211a";
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   190
  std::string str_preamble = "WIFI_PREAMBLE_LONG";
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   191
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   192
  CommandLine cmd;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   193
  cmd.AddValue ("delay", "Delay in microseconds between frame transmission from sender A and frame transmission from sender B", input.interval);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   194
  cmd.AddValue ("xA", "The position of transmitter A (< 0)", input.xA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   195
  cmd.AddValue ("xB", "The position of transmitter B (> 0)", input.xB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   196
  cmd.AddValue ("packetSizeA", "Packet size in bytes of transmitter A", input.packetSizeA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   197
  cmd.AddValue ("packetSizeB", "Packet size in bytes of transmitter B", input.packetSizeB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   198
  cmd.AddValue ("txPowerA", "TX power level of transmitter A", input.txPowerLevelA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   199
  cmd.AddValue ("txPowerB", "TX power level of transmitter B", input.txPowerLevelB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   200
  cmd.AddValue ("txModeA", "Wifi mode used for payload transmission of sender A", input.txModeA);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   201
  cmd.AddValue ("txModeB", "Wifi mode used for payload transmission of sender B", input.txModeB);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   202
  cmd.AddValue ("standard", "IEEE 802.11 flavor", str_standard);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   203
  cmd.AddValue ("preamble", "Type of preamble", str_preamble);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   204
  cmd.Parse (argc, argv);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   205
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   206
  LogComponentEnable ("YansWifiPhy", LOG_LEVEL_ALL);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   207
  LogComponentEnable ("InterferenceHelper", LOG_LEVEL_ALL);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   208
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   209
  if (input.xA >= 0 || input.xB <= 0)
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   210
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   211
      std::cout << "Value of xA must be smaller than 0 and value of xB must be bigger than 0!" << std::endl;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   212
      return 0;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   213
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   214
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   215
  if (str_standard == "WIFI_PHY_STANDARD_80211a")
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   216
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   217
      input.standard = WIFI_PHY_STANDARD_80211a;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   218
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   219
  else if (str_standard == "WIFI_PHY_STANDARD_80211b")
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   220
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   221
      input.standard = WIFI_PHY_STANDARD_80211b;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   222
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   223
  else if (str_standard == "WIFI_PHY_STANDARD_80211g")
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   224
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   225
      input.standard = WIFI_PHY_STANDARD_80211g;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   226
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   227
  else if (str_standard == "WIFI_PHY_STANDARD_80211n_2_4GHZ")
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   228
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   229
      input.standard = WIFI_PHY_STANDARD_80211n_2_4GHZ;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   230
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   231
  else if (str_standard == "WIFI_PHY_STANDARD_80211n_5GHZ")
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   232
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   233
      input.standard = WIFI_PHY_STANDARD_80211n_5GHZ;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   234
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   235
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   236
  if (str_preamble == "WIFI_PREAMBLE_LONG" && (input.standard == WIFI_PHY_STANDARD_80211a || input.standard == WIFI_PHY_STANDARD_80211b || input.standard == WIFI_PHY_STANDARD_80211g))
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   237
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   238
      input.preamble = WIFI_PREAMBLE_LONG;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   239
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   240
  else if (str_preamble == "WIFI_PREAMBLE_SHORT" && (input.standard == WIFI_PHY_STANDARD_80211b || input.standard == WIFI_PHY_STANDARD_80211g))
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   241
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   242
      input.preamble = WIFI_PREAMBLE_SHORT;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   243
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   244
  else if (str_preamble == "WIFI_PREAMBLE_HT_MF" && (input.standard == WIFI_PHY_STANDARD_80211n_2_4GHZ || input.standard == WIFI_PHY_STANDARD_80211n_5GHZ))
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   245
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   246
      input.preamble = WIFI_PREAMBLE_HT_MF;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   247
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   248
  else if (str_preamble == "WIFI_PREAMBLE_HT_GF" && (input.standard == WIFI_PHY_STANDARD_80211n_2_4GHZ || input.standard == WIFI_PHY_STANDARD_80211n_5GHZ))
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   249
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   250
      input.preamble = WIFI_PREAMBLE_HT_GF;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   251
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   252
  else
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   253
    {
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   254
      std::cout << "Preamble does not exist or is not compatible with the selected standard!" << std::endl;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   255
      return 0;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   256
    }
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   257
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   258
  InterferenceExperiment experiment;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   259
  experiment.Run (input);
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   260
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   261
  return 0;
978c1c341d74 add test script for InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents:
diff changeset
   262
}