examples/routing/manet-routing-compare.cc
author Yufei Cheng <yfcheng@ittc.ku.edu>
Fri, 27 Jan 2012 15:15:48 -0800
changeset 8751 efad81f3cb47
parent 7733 abd63101a73a
child 8752 2da1fab73114
permissions -rw-r--r--
Add IPv4 DSR routing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
/*
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
 * Copyright (c) 2011 University of Kansas
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
 * GNU General Public License for more details.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
 * Author: Justin Rohrer <rohrej@ittc.ku.edu>
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
 * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
 * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
 * Information and Telecommunication Technology Center (ITTC)
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
 * and Department of Electrical Engineering and Computer Science
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
 * The University of Kansas Lawrence, KS USA.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
 * Work supported in part by NSF FIND (Future Internet Design) Program
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    27
 * under grant CNS-0626918 (Postmodern Internet Architecture),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
 * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    29
 * US Department of Defense (DoD), and ITTC at The University of Kansas.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
 */
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    31
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
/*
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
 * This example program allows one to run ns-3 DSDV, AODV, or OLSR under
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
 * a typical random waypoint mobility model.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
 * By default, the simulation runs for 200 simulated seconds, of which
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    37
 * the first 50 are used for start-up time.  The number of nodes is 50.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
 * Nodes move according to RandomWaypointMobilityModel with a speed of
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    39
 * 20 m/s and no pause time within a 300x1500 m region.  The WiFi is
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    40
 * in ad hoc mode with a 2 Mb/s rate (802.11b) and a Friis loss model.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    41
 * The transmit power is set to 7.5 dBm.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    42
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    43
 * It is possible to change the mobility and density of the network by
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    44
 * directly modifying the speed and the number of nodes.  It is also
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    45
 * possible to change the characteristics of the network by changing
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    46
 * the transmit power (as power increases, the impact of mobility
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    47
 * decreases and the effective density increases).
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    48
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    49
 * By default, OLSR is used, but specifying a value of 2 for the protocol
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
 * will cause AODV to be used, and specifying a value of 3 will cause
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    51
 * DSDV to be used.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    52
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    53
 * By default, there are 10 source/sink data pairs sending UDP data
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    54
 * at an application rate of 2.048 Kb/s each.    This is typically done
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
 * at a rate of 4 64-byte packets per second.  Application data is
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
 * started at a random time between 50 and 51 seconds and continues
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    57
 * to the end of the simulation.
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    58
 *
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
 * The program outputs a few items:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
 * - packet receptions are notified to stdout such as:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    61
 *   <timestamp> <node-id> received one packet from <src-address>
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    62
 * - each second, the data reception statistics are tabulated and output
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    63
 *   to a comma-separated value (csv) file
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
 * - some tracing and flow monitor configuration that used to work is
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    65
 *   left commented inline in the program
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    66
 */
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    67
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    68
#include <fstream>
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    69
#include <iostream>
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    70
#include "ns3/core-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    71
#include "ns3/network-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    72
#include "ns3/internet-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    73
#include "ns3/mobility-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    74
#include "ns3/wifi-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    75
#include "ns3/aodv-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    76
#include "ns3/olsr-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    77
#include "ns3/dsdv-module.h"
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
    78
#include "ns3/dsr-module.h"
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    79
#include "ns3/applications-module.h"
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    80
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    81
using namespace ns3;
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
    82
using namespace dsr;
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    83
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    84
NS_LOG_COMPONENT_DEFINE ("manet-routing-compare");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    85
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    86
class RoutingExperiment
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    87
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    88
public:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    89
  RoutingExperiment ();
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
    90
  void Run (int nSinks, double txp, std::string CSVfileName);
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    91
  //static void SetMACParam (ns3::NetDeviceContainer & devices,
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    92
  //                                 int slotDistance);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    93
  std::string CommandSetup (int argc, char **argv);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    94
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    95
private:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    96
  Ptr<Socket> SetupPacketReceive (Ipv4Address addr, Ptr<Node> node);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    97
  void ReceivePacket (Ptr<Socket> socket);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    98
  void CheckThroughput ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    99
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   100
  uint32_t port;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   101
  uint32_t bytesTotal;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   102
  uint32_t packetsReceived;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   103
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   104
  std::string m_CSVfileName;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   105
  int m_nSinks;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   106
  std::string m_protocolName;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   107
  double m_txp;
7587
2bfdf6e82f51 enable optional mobility tracing on example
Tom Henderson <tomh@tomh.org>
parents: 7465
diff changeset
   108
  bool m_traceMobility;
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   109
  uint32_t m_protocol;
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   110
};
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   111
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   112
RoutingExperiment::RoutingExperiment ()
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   113
  : port (9),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   114
    bytesTotal (0),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   115
    packetsReceived (0),
7587
2bfdf6e82f51 enable optional mobility tracing on example
Tom Henderson <tomh@tomh.org>
parents: 7465
diff changeset
   116
    m_CSVfileName ("manet-routing.output.csv"),
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   117
    m_traceMobility (false),
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   118
    m_protocol (2) // AODV
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   119
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   120
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   121
7704
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   122
std::string
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   123
PrintReceivedPacket (Ptr<Socket> socket, Ptr<Packet> packet)
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   124
{
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   125
  SocketAddressTag tag;
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   126
  bool found;
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   127
  found = packet->PeekPacketTag (tag);
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   128
  std::ostringstream oss;
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   129
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   130
  oss << Simulator::Now ().GetSeconds () << " " << socket->GetNode ()->GetId ();
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   131
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   132
  if (found)
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   133
    {
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   134
      InetSocketAddress addr = InetSocketAddress::ConvertFrom (tag.GetAddress ());
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   135
      oss << " received one packet from " << addr.GetIpv4 ();
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   136
    }
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   137
  else
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   138
    {
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   139
      oss << " received one packet!";
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   140
    }
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   141
  return oss.str ();
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   142
}
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   143
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   144
void
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   145
RoutingExperiment::ReceivePacket (Ptr<Socket> socket)
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   146
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   147
  Ptr<Packet> packet;
7733
abd63101a73a Add parenthesis in while (packet = socket->Recv ()) to make clang++ (LLVM) happy
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 7704
diff changeset
   148
  while ((packet = socket->Recv ()))
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   149
    {
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   150
      bytesTotal += packet->GetSize ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   151
      packetsReceived += 1;
7704
aef733235832 Bug 1170: Formulate best practices for dealing with unused debug variables.
Andrey Mazo <mazo@iitp.ru>
parents: 7588
diff changeset
   152
      NS_LOG_UNCOND (PrintReceivedPacket (socket, packet));
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   153
    }
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   154
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   155
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   156
void
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   157
RoutingExperiment::CheckThroughput ()
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   158
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   159
  double kbs = (bytesTotal * 8.0) / 1000;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   160
  bytesTotal = 0;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   161
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   162
  std::ofstream out (m_CSVfileName.c_str (), std::ios::app);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   163
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   164
  out << (Simulator::Now ()).GetSeconds () << ","
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   165
      << kbs << ","
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   166
      << packetsReceived << ","
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   167
      << m_nSinks << ","
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   168
      << m_protocolName << ","
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   169
      << m_txp << ""
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   170
      << std::endl;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   171
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   172
  out.close ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   173
  packetsReceived = 0;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   174
  Simulator::Schedule (Seconds (1.0), &RoutingExperiment::CheckThroughput, this);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   175
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   176
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   177
Ptr<Socket>
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   178
RoutingExperiment::SetupPacketReceive (Ipv4Address addr, Ptr<Node> node)
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   179
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   180
  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   181
  Ptr<Socket> sink = Socket::CreateSocket (node, tid);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   182
  InetSocketAddress local = InetSocketAddress (addr, port);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   183
  sink->Bind (local);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   184
  sink->SetRecvCallback (MakeCallback (&RoutingExperiment::ReceivePacket, this));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   185
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   186
  return sink;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   187
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   188
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   189
std::string
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   190
RoutingExperiment::CommandSetup (int argc, char **argv)
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   191
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   192
  CommandLine cmd;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   193
  cmd.AddValue ("CSVfileName", "The name of the CSV output file name", m_CSVfileName);
7587
2bfdf6e82f51 enable optional mobility tracing on example
Tom Henderson <tomh@tomh.org>
parents: 7465
diff changeset
   194
  cmd.AddValue ("traceMobility", "Enable mobility tracing", m_traceMobility);
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   195
  cmd.AddValue ("protocol", "1=OLSR;2=AODV;3=DSDV;4=DSR", m_protocol);
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   196
  cmd.Parse (argc, argv);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   197
  return m_CSVfileName;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   198
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   199
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   200
int
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   201
main (int argc, char *argv[])
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   202
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   203
  RoutingExperiment experiment;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   204
  std::string CSVfileName = experiment.CommandSetup (argc,argv);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   205
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   206
  //blank out the last output file and write the column headers
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   207
  std::ofstream out (CSVfileName.c_str ());
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   208
  out << "SimulationSecond," <<
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   209
  "ReceiveRate," <<
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   210
  "PacketsReceived," <<
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   211
  "NumberOfSinks," <<
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   212
  "RoutingProtocol," <<
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   213
  "TransmissionPower" <<
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   214
  std::endl;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   215
  out.close ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   216
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   217
  int nSinks = 10;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   218
  double txp = 7.5;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   219
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   220
  experiment.Run (nSinks, txp, CSVfileName);
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   221
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   222
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   223
void
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   224
RoutingExperiment::Run (int nSinks, double txp, std::string CSVfileName)
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   225
{
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   226
  Packet::EnablePrinting ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   227
  m_nSinks = nSinks;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   228
  m_txp = txp;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   229
  m_CSVfileName = CSVfileName;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   230
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   231
  int nWifis = 50;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   232
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   233
  double TotalTime = 200.0;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   234
  std::string rate ("2048bps");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   235
  std::string phyMode ("DsssRate11Mbps");
7587
2bfdf6e82f51 enable optional mobility tracing on example
Tom Henderson <tomh@tomh.org>
parents: 7465
diff changeset
   236
  std::string tr_name ("manet-routing-compare");
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   237
  int nodeSpeed = 20; //in m/s
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   238
  int nodePause = 0; //in s
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   239
  m_protocolName = "protocol";
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   240
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   241
  Config::SetDefault  ("ns3::OnOffApplication::PacketSize",StringValue ("64"));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   242
  Config::SetDefault ("ns3::OnOffApplication::DataRate",  StringValue (rate));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   243
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   244
  //Set Non-unicastMode rate to unicast mode
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   245
  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",StringValue (phyMode));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   246
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   247
  NodeContainer adhocNodes;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   248
  adhocNodes.Create (nWifis);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   249
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   250
  // setting up wifi phy and channel using helpers
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   251
  WifiHelper wifi;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   252
  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   253
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   254
  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   255
  YansWifiChannelHelper wifiChannel;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   256
  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   257
  wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   258
  wifiPhy.SetChannel (wifiChannel.Create ());
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   259
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   260
  // Add a non-QoS upper mac, and disable rate control
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   261
  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   262
  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   263
                                "DataMode",StringValue (phyMode),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   264
                                "ControlMode",StringValue (phyMode));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   265
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   266
  wifiPhy.Set ("TxPowerStart",DoubleValue (txp));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   267
  wifiPhy.Set ("TxPowerEnd", DoubleValue (txp));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   268
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   269
  wifiMac.SetType ("ns3::AdhocWifiMac");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   270
  NetDeviceContainer adhocDevices = wifi.Install (wifiPhy, wifiMac, adhocNodes);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   271
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   272
  AodvHelper aodv;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   273
  OlsrHelper olsr;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   274
  DsdvHelper dsdv;
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   275
  DsrHelper dsr;
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   276
  DsrMainHelper dsrMain;
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   277
  Ipv4ListRoutingHelper list;
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   278
  InternetStackHelper internet;
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   279
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   280
  switch (m_protocol)
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   281
    {
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   282
    case 1:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   283
      list.Add (olsr, 100);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   284
      m_protocolName = "OLSR";
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   285
      break;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   286
    case 2:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   287
      list.Add (aodv, 100);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   288
      m_protocolName = "AODV";
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   289
      break;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   290
    case 3:
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   291
      list.Add (dsdv, 100);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   292
      m_protocolName = "DSDV";
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   293
      break;
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   294
    case 4:
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   295
      m_protocolName = "DSR";
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   296
      break;
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   297
    default:
7588
92191520182a add protocol selection as command-line argument
Tom Henderson <tomh@tomh.org>
parents: 7587
diff changeset
   298
      NS_FATAL_ERROR ("No such protocol:" << m_protocol);
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   299
    }
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   300
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   301
  if (m_protocol < 4)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   302
    {
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   303
      internet.SetRoutingHelper (list);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   304
      internet.Install (adhocNodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   305
    }
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   306
  else if (m_protocol == 4)
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   307
    {
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   308
      internet.Install (adhocNodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   309
      dsrMain.Install (dsr, adhocNodes);
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   310
    }
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   311
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   312
  NS_LOG_INFO ("assigning ip address");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   313
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   314
  Ipv4AddressHelper addressAdhoc;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   315
  addressAdhoc.SetBase ("10.1.1.0", "255.255.255.0");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   316
  Ipv4InterfaceContainer adhocInterfaces;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   317
  adhocInterfaces = addressAdhoc.Assign (adhocDevices);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   318
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   319
  MobilityHelper mobilityAdhoc;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   320
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   321
  ObjectFactory pos;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   322
  pos.SetTypeId ("ns3::RandomRectanglePositionAllocator");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   323
  pos.Set ("X", RandomVariableValue (UniformVariable (0.0, 300.0)));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   324
  pos.Set ("Y", RandomVariableValue (UniformVariable (0.0, 1500.0)));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   325
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   326
  Ptr<PositionAllocator> taPositionAlloc = pos.Create ()->GetObject<PositionAllocator> ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   327
  mobilityAdhoc.SetMobilityModel ("ns3::RandomWaypointMobilityModel",
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   328
                                  "Speed", RandomVariableValue (UniformVariable (0.0, nodeSpeed)),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   329
                                  "Pause", RandomVariableValue (ConstantVariable (nodePause)),
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   330
                                  "PositionAllocator", PointerValue (taPositionAlloc));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   331
  mobilityAdhoc.SetPositionAllocator (taPositionAlloc);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   332
  mobilityAdhoc.Install (adhocNodes);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   333
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   334
  OnOffHelper onoff1 ("ns3::UdpSocketFactory",Address ());
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   335
  onoff1.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable  (1)));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   336
  onoff1.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   337
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   338
  for (int i = 0; i <= nSinks - 1; i++)
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   339
    {
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   340
      Ptr<Socket> sink = SetupPacketReceive (adhocInterfaces.GetAddress (i), adhocNodes.Get (i));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   341
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   342
      AddressValue remoteAddress (InetSocketAddress (adhocInterfaces.GetAddress (i), port));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   343
      onoff1.SetAttribute ("Remote", remoteAddress);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   344
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   345
      UniformVariable var;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   346
      ApplicationContainer temp = onoff1.Install (adhocNodes.Get (i + nSinks));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   347
      temp.Start (Seconds (var.GetValue (50.0,51.0)));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   348
      temp.Stop (Seconds (TotalTime));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   349
    }
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   350
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   351
  std::stringstream ss;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   352
  ss << nWifis;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   353
  std::string nodes = ss.str ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   354
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   355
  std::stringstream ss2;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   356
  ss2 << nodeSpeed;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   357
  std::string sNodeSpeed = ss2.str ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   358
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   359
  std::stringstream ss3;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   360
  ss3 << nodePause;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   361
  std::string sNodePause = ss3.str ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   362
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   363
  std::stringstream ss4;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   364
  ss4 << rate;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   365
  std::string sRate = ss4.str ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   366
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   367
  //NS_LOG_INFO ("Configure Tracing.");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   368
  //tr_name = tr_name + "_" + m_protocolName +"_" + nodes + "nodes_" + sNodeSpeed + "speed_" + sNodePause + "pause_" + sRate + "rate";
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   369
7465
ed1e4ae79208 update manet-routing-compare example to use current tracing API
Tom Henderson <tomh@tomh.org>
parents: 7260
diff changeset
   370
  //AsciiTraceHelper ascii;
ed1e4ae79208 update manet-routing-compare example to use current tracing API
Tom Henderson <tomh@tomh.org>
parents: 7260
diff changeset
   371
  //Ptr<OutputStreamWrapper> osw = ascii.CreateFileStream ( (tr_name + ".tr").c_str());
ed1e4ae79208 update manet-routing-compare example to use current tracing API
Tom Henderson <tomh@tomh.org>
parents: 7260
diff changeset
   372
  //wifiPhy.EnableAsciiAll (osw);
7587
2bfdf6e82f51 enable optional mobility tracing on example
Tom Henderson <tomh@tomh.org>
parents: 7465
diff changeset
   373
  std::ofstream os;
8751
efad81f3cb47 Add IPv4 DSR routing
Yufei Cheng <yfcheng@ittc.ku.edu>
parents: 7733
diff changeset
   374
  os.open ((tr_name + ".mob").c_str ());
7587
2bfdf6e82f51 enable optional mobility tracing on example
Tom Henderson <tomh@tomh.org>
parents: 7465
diff changeset
   375
  MobilityHelper::EnableAsciiAll (os);
7248
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   376
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   377
  //Ptr<FlowMonitor> flowmon;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   378
  //FlowMonitorHelper flowmonHelper;
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   379
  //flowmon = flowmonHelper.InstallAll ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   380
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   381
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   382
  NS_LOG_INFO ("Run Simulation.");
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   383
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   384
  CheckThroughput ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   385
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   386
  Simulator::Stop (Seconds (TotalTime));
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   387
  Simulator::Run ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   388
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   389
  //flowmon->SerializeToXmlFile ((tr_name + ".flowmon").c_str(), false, false);
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   390
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   391
  Simulator::Destroy ();
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   392
}
3895c1620ccb add manet routing example
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   393