examples/wifi-clear-channel-cmu.cc
author Kirill Andreev <andreev@iitp.ru>
Mon, 03 Aug 2009 19:13:46 +0400
changeset 5145 7f50ab7ce59d
parent 4470 51b5c1a272d3
child 4717 1dd8e53a7f1e
permissions -rw-r--r--
Added path update to FLAME
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4470
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     2
/*
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     3
 * Copyright (c) 2009 The Boeing Company
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     4
 *
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     8
 *
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    12
 * GNU General Public License for more details.
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    13
 *
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    17
 *
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    18
 * Author: Guangyu Pei <guangyu.pei@boeing.com>
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    19
 */
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    20
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    21
#include "ns3/core-module.h"
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    22
#include "ns3/common-module.h"
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    23
#include "ns3/node-module.h"
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    24
#include "ns3/helper-module.h"
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    25
#include "ns3/mobility-module.h"
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    26
#include "ns3/contrib-module.h"
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    27
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    28
#include <iostream>
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    29
#include <fstream>
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    30
#include <vector>
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    31
#include <string>
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    32
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    33
NS_LOG_COMPONENT_DEFINE ("Main");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    34
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    35
using namespace ns3;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    36
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    37
class Experiment
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    38
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    39
public:
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    40
  Experiment ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    41
  Experiment (std::string name);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    42
  uint32_t Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    43
                const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    44
private:
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    45
  void ReceivePacket (Ptr<Socket> socket);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    46
  void SetPosition (Ptr<Node> node, Vector position);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    47
  Vector GetPosition (Ptr<Node> node);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    48
  Ptr<Socket> SetupPacketReceive (Ptr<Node> node);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    49
  void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    50
                             uint32_t pktCount, Time pktInterval );
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    51
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    52
  uint32_t m_pktsTotal;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    53
  Gnuplot2dDataset m_output;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    54
};
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    55
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    56
Experiment::Experiment ()
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    57
{}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    58
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    59
Experiment::Experiment (std::string name)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    60
  : m_output (name)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    61
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    62
  m_output.SetStyle (Gnuplot2dDataset::LINES);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    63
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    64
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    65
void
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    66
Experiment::SetPosition (Ptr<Node> node, Vector position)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    67
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    68
  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    69
  mobility->SetPosition (position);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    70
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    71
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    72
Vector
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    73
Experiment::GetPosition (Ptr<Node> node)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    74
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    75
  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    76
  return mobility->GetPosition ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    77
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    78
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    79
void
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    80
Experiment::ReceivePacket (Ptr<Socket> socket)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    81
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    82
  Ptr<Packet> packet;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    83
  while (packet = socket->Recv ())
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    84
    {
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    85
      m_pktsTotal ++;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    86
    }
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    87
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    88
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    89
Ptr<Socket>
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    90
Experiment::SetupPacketReceive (Ptr<Node> node)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    91
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    92
  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    93
  Ptr<Socket> sink = Socket::CreateSocket (node, tid);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    94
  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    95
  sink->Bind (local);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    96
  sink->SetRecvCallback (MakeCallback (&Experiment::ReceivePacket, this));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    97
  return sink;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    98
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
    99
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   100
void
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   101
Experiment::GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   102
                             uint32_t pktCount, Time pktInterval )
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   103
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   104
  if (pktCount > 0)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   105
    {
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   106
      socket->Send (Create<Packet> (pktSize));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   107
      Simulator::Schedule (pktInterval, &Experiment::GenerateTraffic, this, 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   108
                           socket, pktSize,pktCount-1, pktInterval);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   109
    }
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   110
  else
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   111
    {
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   112
      socket->Close ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   113
    }
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   114
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   115
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   116
uint32_t
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   117
Experiment::Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   118
                 const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   119
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   120
  m_pktsTotal = 0;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   121
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   122
  NodeContainer c;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   123
  c.Create (2);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   124
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   125
  InternetStackHelper internet;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   126
  internet.Install (c);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   127
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   128
  YansWifiPhyHelper phy = wifiPhy;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   129
  phy.SetChannel (wifiChannel.Create ());
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   130
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   131
  NqosWifiMacHelper mac = wifiMac;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   132
  NetDeviceContainer devices = wifi.Install (phy, mac, c);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   133
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   134
  MobilityHelper mobility;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   135
  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   136
  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   137
  positionAlloc->Add (Vector (5.0, 0.0, 0.0));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   138
  mobility.SetPositionAllocator (positionAlloc);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   139
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   140
  mobility.Install (c);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   141
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   142
  Ipv4AddressHelper ipv4;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   143
  NS_LOG_INFO ("Assign IP Addresses.");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   144
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   145
  Ipv4InterfaceContainer i = ipv4.Assign (devices);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   146
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   147
  Ptr<Socket> recvSink = SetupPacketReceive (c.Get (0));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   148
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   149
  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   150
  Ptr<Socket> source = Socket::CreateSocket (c.Get (1), tid);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   151
  InetSocketAddress remote = InetSocketAddress (Ipv4Address ("255.255.255.255"), 80);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   152
  source->Connect (remote);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   153
  uint32_t packetSize = 1014;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   154
  uint32_t maxPacketCount = 200;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   155
  Time interPacketInterval = Seconds (1.);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   156
  Simulator::Schedule (Seconds (1.0), &Experiment::GenerateTraffic, 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   157
                       this, source, packetSize, maxPacketCount,interPacketInterval);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   158
  Simulator::Run ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   159
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   160
  Simulator::Destroy ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   161
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   162
  return m_pktsTotal;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   163
}
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   164
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   165
int main (int argc, char *argv[])
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   166
{
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   167
  std::ofstream outfile ("clear-channel.plt");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   168
  std::vector <std::string> modes;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   169
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   170
  modes.push_back ("wifib-1mbs");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   171
  modes.push_back ("wifib-2mbs");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   172
  modes.push_back ("wifib-5.5mbs");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   173
  modes.push_back ("wifib-11mbs");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   174
  // disable fragmentation
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   175
  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   176
  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   177
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   178
  CommandLine cmd;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   179
  cmd.Parse (argc, argv);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   180
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   181
  Gnuplot gnuplot = Gnuplot ("clear-channel.eps");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   182
  
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   183
  for (uint32_t i = 0; i < modes.size(); i++)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   184
  {
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   185
   std::cout << modes[i] << std::endl;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   186
   Gnuplot2dDataset dataset (modes[i]);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   187
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   188
   for (double rss = -102.0; rss <= -80.0; rss += 0.5)
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   189
   {
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   190
     Experiment experiment;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   191
     dataset.SetStyle (Gnuplot2dDataset::LINES);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   192
 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   193
     WifiHelper wifi;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   194
     NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   195
     Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode", 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   196
                         StringValue (modes[i]));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   197
     wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   198
                                   "DataMode",StringValue(modes[i]),
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   199
                                   "ControlMode",StringValue(modes[i]));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   200
     wifiMac.SetType ("ns3::AdhocWifiMac");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   201
 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   202
     YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   203
     YansWifiChannelHelper wifiChannel ;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   204
     wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   205
     wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue(rss));
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   206
 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   207
 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   208
     NS_LOG_DEBUG (modes[i]);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   209
     experiment = Experiment (modes[i]);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   210
     wifiPhy.Set ("Standard", StringValue ("802.11b") );
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   211
     wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0) );
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   212
     wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0) );
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   213
     wifiPhy.Set ("TxPowerStart", DoubleValue (15.0) );
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   214
     wifiPhy.Set ("RxGain", DoubleValue (0) ); 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   215
     wifiPhy.Set ("RxNoiseFigure", DoubleValue (7) ); 
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   216
     uint32_t pktsRecvd = experiment.Run (wifi, wifiPhy, wifiMac, wifiChannel);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   217
     dataset.Add (rss, pktsRecvd);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   218
   }
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   219
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   220
   gnuplot.AddDataset (dataset);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   221
  }
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   222
  gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   223
  gnuplot.SetLegend ("RSS(dBm)", "Number of packets received");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   224
  gnuplot.SetExtra  ("set xrange [-102:-83]");
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   225
  gnuplot.GenerateOutput (outfile);
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   226
  outfile.close ();
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   227
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   228
  return 0;
51b5c1a272d3 802.11b PHY support
Gary Pei <guangyu.pei@boeing.com>
parents:
diff changeset
   229
}