src/wifi/examples/wifi-phy-test.cc
author Sébastien Deronne <sebastien.deronne@gmail.com>
Sun, 21 Jun 2015 00:23:45 +0200
changeset 11450 9f4ae69f12b7
parent 11439 adba3fdac443
child 11454 5d42886be307
permissions -rw-r--r--
cleanup wifi module
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7340
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
4325
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     2
/*
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     4
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
4325
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     7
 * published by the Free Software Foundation;
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     8
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    12
 * GNU General Public License for more details.
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    13
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    14
 * You should have received a copy of the GNU General Public License
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    15
 * along with this program; if not, write to the Free Software
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    17
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    19
 */
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
    20
6848
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    21
#include "ns3/wifi-net-device.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    22
#include "ns3/yans-wifi-channel.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    23
#include "ns3/yans-wifi-phy.h"
5944
b1a245ae00d4 Moving the propagation models of wifi from src/devices/wifi to src/common. The idea is to share them with the other wireless devices.
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 5050
diff changeset
    24
#include "ns3/propagation-loss-model.h"
b1a245ae00d4 Moving the propagation models of wifi from src/devices/wifi to src/common. The idea is to share them with the other wireless devices.
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 5050
diff changeset
    25
#include "ns3/propagation-delay-model.h"
6848
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    26
#include "ns3/error-rate-model.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    27
#include "ns3/yans-error-rate-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include "ns3/ptr.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
#include "ns3/mobility-model.h"
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
    30
#include "ns3/constant-position-mobility-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include "ns3/vector.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
#include "ns3/packet.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#include "ns3/simulator.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
#include "ns3/nstime.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
#include "ns3/command-line.h"
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    36
#include "ns3/flow-id-tag.h"
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    37
#include "ns3/wifi-tx-vector.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
using namespace ns3;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
class PsrExperiment
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
public:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  struct Input
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
  {
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    46
    Input ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
    double distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
    std::string txMode;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
    uint8_t txPowerLevel;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
    uint32_t packetSize;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
    uint32_t nPackets;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  struct Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
  {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
    uint32_t received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
  PsrExperiment ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  struct PsrExperiment::Output Run (struct PsrExperiment::Input input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
private:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
  void Send (void);
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
    63
  void Receive (Ptr<Packet> p, double snr, WifiTxVector txVector, enum WifiPreamble preamble);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  Ptr<WifiPhy> m_tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
  struct Input m_input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
  struct Output m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
};
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    69
void
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
PsrExperiment::Send (void)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
  Ptr<Packet> p = Create<Packet> (m_input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
  WifiMode mode = WifiMode (m_input.txMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    74
  WifiTxVector txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    75
  txVector.SetTxPowerLevel (m_input.txPowerLevel);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    76
  txVector.SetMode (mode);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 10883
diff changeset
    77
  m_tx->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT, 0);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    80
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
    81
PsrExperiment::Receive (Ptr<Packet> p, double snr, WifiTxVector txVector, enum WifiPreamble preamble)
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  m_output.received++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
PsrExperiment::PsrExperiment ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    87
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    88
}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    89
PsrExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    90
  : distance (5.0),
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
    91
    txMode ("OfdmRate6Mbps"),
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    92
    txPowerLevel (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    93
    packetSize (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    94
    nPackets (400)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    95
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    96
}
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
struct PsrExperiment::Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
PsrExperiment::Run (struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
  m_output.received = 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
  m_input = input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   104
  Ptr<MobilityModel> posTx = CreateObject<ConstantPositionMobilityModel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
  posTx->SetPosition (Vector (0.0, 0.0, 0.0));
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   106
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
  posRx->SetPosition (Vector (m_input.distance, 0.0, 0.0));
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   109
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  channel->SetPropagationLossModel (log);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   114
  Ptr<YansWifiPhy> tx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   115
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
   116
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   117
  tx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   118
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   119
  tx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   120
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   121
  tx->SetMobility (posTx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   122
  rx->SetMobility (posRx);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   123
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   124
  tx->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   125
  rx->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   126
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   127
  rx->SetReceiveOkCallback (MakeCallback (&PsrExperiment::Receive, this));
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
      Simulator::Schedule (Seconds (i), &PsrExperiment::Send, this);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
  m_tx = tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
  Simulator::Run ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   135
  Simulator::Destroy ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
  return m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   139
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   140
class CollisionExperiment
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   141
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   142
public:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   143
  struct Input
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   144
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   145
    Input ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   146
    Time interval;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   147
    double xA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   148
    double xB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   149
    std::string txModeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   150
    std::string txModeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   151
    uint8_t txPowerLevelA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   152
    uint8_t txPowerLevelB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   153
    uint32_t packetSizeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   154
    uint32_t packetSizeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   155
    uint32_t nPackets;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   156
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   157
  struct Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   158
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   159
    uint32_t receivedA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   160
    uint32_t receivedB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   161
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   162
  CollisionExperiment ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   163
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   164
  struct CollisionExperiment::Output Run (struct CollisionExperiment::Input input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   165
private:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   166
  void SendA (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   167
  void SendB (void) const;
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   168
  void Receive (Ptr<Packet> p, double snr, WifiTxVector txVector, enum WifiPreamble preamble);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   169
  Ptr<WifiPhy> m_txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   170
  Ptr<WifiPhy> m_txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   171
  uint32_t m_flowIdA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   172
  uint32_t m_flowIdB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   173
  struct Input m_input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   174
  struct Output m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   175
};
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   176
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   177
void
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   178
CollisionExperiment::SendA (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   179
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   180
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeA);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4325
diff changeset
   181
  p->AddByteTag (FlowIdTag (m_flowIdA));
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   182
  WifiTxVector txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   183
  txVector.SetTxPowerLevel (m_input.txPowerLevelA);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   184
  txVector.SetMode (WifiMode (m_input.txModeA));
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 10883
diff changeset
   185
  m_txA->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT, 0);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   186
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   187
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   188
void
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   189
CollisionExperiment::SendB (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   190
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   191
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeB);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4325
diff changeset
   192
  p->AddByteTag (FlowIdTag (m_flowIdB));
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   193
  WifiTxVector txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   194
  txVector.SetTxPowerLevel (m_input.txPowerLevelB);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   195
  txVector.SetMode (WifiMode (m_input.txModeB));
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 10883
diff changeset
   196
  m_txB->SendPacket (p, txVector, WIFI_PREAMBLE_SHORT, 0);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   197
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   198
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   199
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   200
CollisionExperiment::Receive (Ptr<Packet> p, double snr, WifiTxVector txVector, enum WifiPreamble preamble)
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   201
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   202
  FlowIdTag tag;
9785
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   203
  if (p->FindFirstMatchingByteTag (tag))
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   204
    {
9785
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   205
      if (tag.GetFlowId () == m_flowIdA)
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   206
        {
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   207
          m_output.receivedA++;
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   208
        }
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   209
      else if (tag.GetFlowId () == m_flowIdB)
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   210
        {
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   211
          m_output.receivedB++;
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   212
        }
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   213
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   214
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   215
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   216
CollisionExperiment::CollisionExperiment ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   217
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   218
}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   219
CollisionExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   220
  : interval (MicroSeconds (0)),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   221
    xA (-5),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   222
    xB (5),
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   223
    txModeA ("OfdmRate6Mbps"),
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   224
    txModeB ("OfdmRate6Mbps"),
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   225
    txPowerLevelA (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   226
    txPowerLevelB (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   227
    packetSizeA (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   228
    packetSizeB (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   229
    nPackets (400)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   230
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   231
}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   232
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   233
struct CollisionExperiment::Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   234
CollisionExperiment::Run (struct CollisionExperiment::Input input)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   235
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   236
  m_output.receivedA = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   237
  m_output.receivedB = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   238
  m_input = input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   239
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   240
  m_flowIdA = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   241
  m_flowIdB = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   242
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   243
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   244
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   245
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   246
  channel->SetPropagationLossModel (log);
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   247
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   248
  Ptr<MobilityModel> posTxA = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   249
  posTxA->SetPosition (Vector (input.xA, 0.0, 0.0));
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   250
  Ptr<MobilityModel> posTxB = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   251
  posTxB->SetPosition (Vector (input.xB, 0.0, 0.0));
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   252
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   253
  posRx->SetPosition (Vector (0, 0.0, 0.0));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   254
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   255
  Ptr<YansWifiPhy> txA = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   256
  Ptr<YansWifiPhy> txB = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   257
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   258
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
   259
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   260
  txA->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   261
  txB->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   262
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   263
  txA->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   264
  txB->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   265
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   266
  txA->SetMobility (posTxA);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   267
  txB->SetMobility (posTxB);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   268
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   269
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   270
  txA->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   271
  txB->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   272
  rx->ConfigureStandard (WIFI_PHY_STANDARD_80211a);
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   273
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   274
  rx->SetReceiveOkCallback (MakeCallback (&CollisionExperiment::Receive, this));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   275
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   276
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   277
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   278
      Simulator::Schedule (Seconds (i), &CollisionExperiment::SendA, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   279
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   280
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   281
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   282
      Simulator::Schedule (Seconds (i) + m_input.interval, &CollisionExperiment::SendB, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   283
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   284
  m_txA = txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   285
  m_txB = txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   286
  Simulator::Run ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   287
  Simulator::Destroy ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   288
  return m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   289
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   290
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   291
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
static void PrintPsr (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
  PsrExperiment experiment;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   295
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
  cmd.AddValue ("Distance", "The distance between two phys", input.distance);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
  cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
  struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
  output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
  double psr = output.received;
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   309
  psr /= input.nPackets;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   310
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
  std::cout << psr << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
double CalcPsr (struct PsrExperiment::Output output, struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
  double psr = output.received;
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   317
  psr /= input.nPackets;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
  return psr;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
static void PrintPsrVsDistance (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
{
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   323
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
  CommandLine cmd;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   325
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
  cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
  cmd.Parse (argc, argv);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   330
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
  for (input.distance = 1.0; input.distance < 165; input.distance += 2.0)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
      std::cout << input.distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
      PsrExperiment experiment;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
      struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   337
      input.txMode = "OfdmRate6Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
      std::cout << " " << CalcPsr (output, input);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   340
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   341
      input.txMode = "OfdmRate9Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   344
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   345
      input.txMode = "OfdmRate12Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   349
      input.txMode = "OfdmRate18Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   353
      input.txMode = "OfdmRate24Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   357
      input.txMode = "OfdmRate36Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   358
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   361
      input.txMode = "OfdmRate48Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   365
      input.txMode = "OfdmRate54Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   369
      std::cout << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
static void PrintSizeVsRange (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
{
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   375
  double targetPsr = 0.05;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   376
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   377
  CommandLine cmd;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   378
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   379
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   380
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   381
  cmd.AddValue ("TargetPsr", "The psr needed to assume that we are within range", targetPsr);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   383
  for (input.packetSize = 10; input.packetSize < 3000; input.packetSize += 40)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
    {
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   385
      double precision = 0.1;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   386
      double low = 1.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   387
      double high = 200.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   388
      while (high - low > precision)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   389
        {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   390
          double middle = low + (high - low) / 2;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   391
          struct PsrExperiment::Output output;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   392
          PsrExperiment experiment;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   393
          input.distance = middle;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   394
          output = experiment.Run (input);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   395
          double psr = CalcPsr (output, input);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   396
          if (psr >= targetPsr)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   397
            {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   398
              low = middle;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   399
            }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   400
          else
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   401
            {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   402
              high = middle;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   403
            }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   404
        }
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   405
      std::cout << input.packetSize << " " << input.distance << std::endl;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   406
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   407
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   409
static void PrintPsrVsCollisionInterval (int argc, char *argv[])
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   410
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   411
  CollisionExperiment::Input input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   412
  input.nPackets = 100;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   413
  CommandLine cmd;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   414
  cmd.AddValue ("NPackets", "The number of packets to send for each transmitter", input.nPackets);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   415
  cmd.AddValue ("xA", "the position of transmitter A", input.xA);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   416
  cmd.AddValue ("xB", "the position of transmitter B", input.xB);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11439
diff changeset
   417
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   418
  for (uint32_t i = 0; i < 100; i += 1)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   419
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   420
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   421
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   422
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   423
      output = experiment.Run (input);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   424
      double perA = (output.receivedA + 0.0) / (input.nPackets + 0.0);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   425
      double perB = (output.receivedB + 0.0) / (input.nPackets + 0.0);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   426
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   427
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   428
  for (uint32_t i = 100; i < 4000; i += 50)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   429
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   430
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   431
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   432
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   433
      output = experiment.Run (input);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   434
      double perA = (output.receivedA + 0.0) / (input.nPackets + 0.0);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   435
      double perB = (output.receivedB + 0.0) / (input.nPackets + 0.0);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   436
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   437
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   438
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   439
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   441
int main (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   443
  if (argc <= 1)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   444
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   445
      std::cout << "Available experiments: "
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   446
                << "Psr "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   447
                << "SizeVsRange "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   448
                << "PsrVsDistance "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   449
                << "PsrVsCollisionInterval "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   450
                << std::endl;
9709
00ed307fd7b5 bug 1635 - wifi-phy-test missing Simulator::Destroy
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 7385
diff changeset
   451
      return 0;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   452
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
  std::string type = argv[1];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   454
  argc--;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   455
  argv[1] = argv[0];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   456
  argv++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   457
  if (type == "Psr")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   458
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   459
      PrintPsr (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   460
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
  else if (type == "SizeVsRange")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   462
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   463
      PrintSizeVsRange (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   464
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   465
  else if (type == "PsrVsDistance")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   466
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   467
      PrintPsrVsDistance (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   468
    }
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   469
  else if (type == "PsrVsCollisionInterval")
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   470
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   471
      PrintPsrVsCollisionInterval (argc, argv);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   472
    }
11439
adba3fdac443 fix issues with wifi-phy-test
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   473
  else
adba3fdac443 fix issues with wifi-phy-test
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   474
    {
adba3fdac443 fix issues with wifi-phy-test
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   475
      std::cout << "Wrong arguments!" << std::endl;
adba3fdac443 fix issues with wifi-phy-test
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   476
    }
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   477
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   478
  return 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   479
}