examples/tcp/tcp-nsc-comparison.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Thu, 14 Nov 2013 09:22:14 -0800
changeset 10403 798e90c6c12f
parent 9273 537e3d356935
child 11146 27cbf395bc8d
permissions -rw-r--r--
Unix line endings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     2
/*
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     3
 * Copyright (c) 2012 NICT
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     4
 *
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     7
 * published by the Free Software Foundation;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     8
 *
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    12
 * GNU General Public License for more details.
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    13
 *
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    14
 * You should have received a copy of the GNU General Public License
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    15
 * along with this program; if not, write to the Free Software
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    17
 *
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    18
 * Author: Hajime Tazaki <tazaki@nict.go.jp>
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    19
 *
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    20
 * This code is a modified version of the code used for the the experiments in the paper
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    21
 * "DCE Cradle: Simulate Network Protocols with Real Stacks for Better Realism"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    22
 * by Hajime Tazaki, Frederic Urbani and Thierry Turlett presented at WNS3 2013
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    23
 *
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    24
 */
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    25
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    26
#include "ns3/log.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    27
#include "ns3/core-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    28
#include "ns3/network-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    29
#include "ns3/internet-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    30
#include "ns3/point-to-point-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    31
#include "ns3/applications-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    32
#include "ns3/flow-monitor-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    33
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    34
using namespace ns3;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    35
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    36
NS_LOG_COMPONENT_DEFINE ("TcpNscComparison");
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    37
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    38
std::string m_stack = "nsc-linux";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    39
std::string sock_factory;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    40
int m_seed = 1;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    41
double startTime = 4.0;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    42
double stopTime = 20.0;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    43
uint32_t m_nNodes = 2;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    44
bool enablePcap = false;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    45
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    46
int
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    47
main (int argc, char *argv[])
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    48
{
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    49
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    50
  //ensure the ns3 TCP default values match what nsc is using
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    51
  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1448));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    52
  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    53
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    54
  CommandLine cmd;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    55
  cmd.AddValue ("stack", "choose network stack", m_stack);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    56
  cmd.AddValue ("seed", "randomize seed", m_seed);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    57
  cmd.AddValue ("nNodes", "the number of nodes in left side", m_nNodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    58
  cmd.AddValue ("stopTime", "duration", stopTime);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    59
  cmd.AddValue ("enablePcap", "pcap", enablePcap);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    60
  cmd.Parse (argc, argv);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    61
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    62
  SeedManager::SetSeed (m_seed);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    63
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    64
  NodeContainer lefts, routers, rights, nodes;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    65
  lefts.Create (m_nNodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    66
  routers.Create (2);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    67
  rights.Create (m_nNodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    68
  nodes = NodeContainer (lefts, routers, rights);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    69
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    70
  InternetStackHelper internetStack;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    71
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    72
  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    73
  if (m_stack == "ns3")
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    74
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    75
      sock_factory = "ns3::TcpSocketFactory";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    76
      internetStack.Install (nodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    77
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    78
  else if (m_stack == "nsc-linux")
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    79
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    80
      internetStack.Install (routers);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    81
      sock_factory = "ns3::TcpSocketFactory";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    82
      internetStack.SetTcp ("ns3::NscTcpL4Protocol",
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    83
                            "Library", StringValue ("liblinux2.6.26.so"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    84
      internetStack.Install (lefts);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    85
      internetStack.Install (rights);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    86
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    87
      //these are not implemented in ns3 tcp so disable for comparison
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    88
      Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    89
      Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    90
      Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    91
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    92
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    93
  PointToPointHelper pointToPoint;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    94
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    95
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    96
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    97
  Ipv4AddressHelper address;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    98
  Ipv4InterfaceContainer interfaces;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    99
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   100
  NetDeviceContainer dev0, dev1, dev2;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   101
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   102
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   103
      std::ostringstream oss;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   104
      oss << "10.0." << i << ".0";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   105
      address.SetBase (oss.str ().c_str (), "255.255.255.0");
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   106
      dev0 = pointToPoint.Install (NodeContainer (lefts.Get (i), routers.Get (0)));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   107
      address.Assign (dev0);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   108
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   109
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   110
  // bottle neck link
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   111
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("2Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   112
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("100ms"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   113
  dev1 = pointToPoint.Install (NodeContainer (routers.Get (0), routers.Get (1)));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   114
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   115
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   116
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   117
  // for right links
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   118
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   119
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   120
      std::ostringstream oss;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   121
      oss << "10.2." << i << ".0";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   122
      address.SetBase (oss.str ().c_str (), "255.255.255.0");
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   123
      dev2 = pointToPoint.Install (NodeContainer (routers.Get (1), rights.Get (i)));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   124
      address.Assign (dev2);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   125
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   126
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   127
  // bottle neck link
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   128
  Ptr<RateErrorModel> em1 =
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   129
    CreateObjectWithAttributes<RateErrorModel> (
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   130
      "ErrorRate", DoubleValue (0.05),
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   131
      "ErrorUnit", EnumValue (RateErrorModel::ERROR_UNIT_PACKET)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   132
      );
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   133
  dev1.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em1));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   134
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   135
  address.SetBase ("10.1.0.0", "255.255.255.0");
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   136
  address.Assign (dev1);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   137
  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   138
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   139
  ApplicationContainer apps;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   140
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   141
  OnOffHelper onoff = OnOffHelper (sock_factory,
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   142
                                   InetSocketAddress (Ipv4Address ("10.2.0.2"), 2000));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   143
  onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   144
  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   145
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   146
  // Flow 1 - n
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   147
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   148
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   149
      std::ostringstream oss;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   150
      oss << "10.2." << i << ".2";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   151
      onoff.SetAttribute ("Remote", AddressValue (InetSocketAddress (Ipv4Address (oss.str ().c_str ()), 2000)));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   152
      onoff.SetAttribute ("PacketSize", StringValue ("1024"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   153
      onoff.SetAttribute ("DataRate", StringValue ("1Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   154
      onoff.SetAttribute ("StartTime", TimeValue (Seconds (startTime)));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   155
      apps = onoff.Install (lefts.Get (i));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   156
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   157
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   158
  PacketSinkHelper sink = PacketSinkHelper (sock_factory,
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   159
                                            InetSocketAddress (Ipv4Address::GetAny (), 2000));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   160
  apps = sink.Install (rights);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   161
  apps.Start (Seconds (3.9999));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   162
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   163
  pointToPoint.EnablePcapAll ("nsc.pcap");
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   164
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   165
  Simulator::Stop (Seconds (stopTime));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   166
  Simulator::Run ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   167
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   168
  Ptr<PacketSink> pktsink;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   169
  std::cout << "Total ";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   170
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   171
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   172
      pktsink = apps.Get (i)->GetObject<PacketSink> ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   173
      std::cout << "Rx(" << i << ") = " << pktsink->GetTotalRx () <<
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   174
      " bytes (" << pktsink->GetTotalRx () * 8 / (stopTime - startTime) << " bps), ";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   175
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   176
  std::cout << std::endl;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   177
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   178
  Simulator::Destroy ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   179
  return 0;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   180
}