examples/tcp/tcp-nsc-comparison.cc
author Tom Henderson <tomh@tomh.org>
Mon, 28 Sep 2015 20:27:25 -0700
changeset 11676 05ea1489e509
parent 11149 eedec750f97e
permissions -rw-r--r--
bug 2184: Integer overflow in MacLow
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
 *
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    24
 * By default, TCP timestamps, window scale, and SACK are disabled because
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    25
 * they were not supported in ns-3 at the time of this paper.  TCP timestamp
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    26
 * and window scale can be enabled by command line arguments.  
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    27
 *
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    28
 */
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    29
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    30
#include "ns3/log.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    31
#include "ns3/core-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    32
#include "ns3/network-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    33
#include "ns3/internet-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    34
#include "ns3/point-to-point-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    35
#include "ns3/applications-module.h"
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    36
#include "ns3/flow-monitor-module.h"
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
using namespace ns3;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    39
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    40
NS_LOG_COMPONENT_DEFINE ("TcpNscComparison");
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    41
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    42
std::string m_stack = "nsc-linux";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    43
std::string sock_factory;
11146
27cbf395bc8d rng seed should be uint32_t
Tom Henderson <tomh@tomh.org>
parents: 10403
diff changeset
    44
uint32_t m_seed = 1;
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    45
double startTime = 4.0;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    46
double stopTime = 20.0;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    47
uint32_t m_nNodes = 2;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    48
bool enablePcap = false;
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    49
bool enableTimestamps = false;
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    50
bool enableWindowScale = false;
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    51
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    52
int
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    53
main (int argc, char *argv[])
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    54
{
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    55
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    56
  //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
    57
  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1448));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    58
  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    59
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    60
  CommandLine cmd;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    61
  cmd.AddValue ("stack", "choose network stack", m_stack);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    62
  cmd.AddValue ("seed", "randomize seed", m_seed);
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    63
  cmd.AddValue ("nNodes", "the number of source and sink nodes", m_nNodes);
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    64
  cmd.AddValue ("stopTime", "duration", stopTime);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    65
  cmd.AddValue ("enablePcap", "pcap", enablePcap);
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    66
  cmd.AddValue ("enableTimestamps", "use TCP Timestamps option", enableTimestamps);
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    67
  cmd.AddValue ("enableWindowScale", "use TCP Window Scale option", enableWindowScale);
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    68
  cmd.Parse (argc, argv);
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
  SeedManager::SetSeed (m_seed);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    71
11147
d09d0155bde0 error check program input
Tom Henderson <tomh@tomh.org>
parents: 11146
diff changeset
    72
  if (m_stack != "nsc-linux" && m_stack != "ns3")
d09d0155bde0 error check program input
Tom Henderson <tomh@tomh.org>
parents: 11146
diff changeset
    73
    {
d09d0155bde0 error check program input
Tom Henderson <tomh@tomh.org>
parents: 11146
diff changeset
    74
      NS_FATAL_ERROR ("Error, stack named " << m_stack << " is not supported");
d09d0155bde0 error check program input
Tom Henderson <tomh@tomh.org>
parents: 11146
diff changeset
    75
    }
d09d0155bde0 error check program input
Tom Henderson <tomh@tomh.org>
parents: 11146
diff changeset
    76
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    77
  NodeContainer lefts, routers, rights, nodes;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    78
  lefts.Create (m_nNodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    79
  routers.Create (2);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    80
  rights.Create (m_nNodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    81
  nodes = NodeContainer (lefts, routers, rights);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    82
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    83
  InternetStackHelper internetStack;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    84
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    85
  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    86
  if (m_stack == "ns3")
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    87
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    88
      sock_factory = "ns3::TcpSocketFactory";
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    89
      if (enableTimestamps == false)
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    90
        {
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    91
          Config::SetDefault ("ns3::TcpSocketBase::WindowScaling", BooleanValue (false));
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    92
        }
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    93
      if (enableWindowScale == false)
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    94
        {
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    95
          Config::SetDefault ("ns3::TcpSocketBase::Timestamp", BooleanValue (false));
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
    96
        }
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    97
      internetStack.Install (nodes);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    98
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
    99
  else if (m_stack == "nsc-linux")
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   100
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   101
      internetStack.Install (routers);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   102
      sock_factory = "ns3::TcpSocketFactory";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   103
      internetStack.SetTcp ("ns3::NscTcpL4Protocol",
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   104
                            "Library", StringValue ("liblinux2.6.26.so"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   105
      internetStack.Install (lefts);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   106
      internetStack.Install (rights);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   107
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   108
      // at the time this program was written, these were not implemented 
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   109
      // in ns3 tcp, so disable for comparison
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   110
      Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
11148
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   111
      if (enableTimestamps == false)
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   112
        {
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   113
          Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   114
        }
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   115
      if (enableWindowScale == false)
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   116
        {
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   117
          Config::Set ("/NodeList/*/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
93d8acd78f68 add timestamps and window scale options
Tom Henderson <tomh@tomh.org>
parents: 11147
diff changeset
   118
        }
10403
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
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   121
  PointToPointHelper pointToPoint;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   122
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   123
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   124
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   125
  Ipv4AddressHelper address;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   126
  Ipv4InterfaceContainer interfaces;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   127
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   128
  NetDeviceContainer dev0, dev1, dev2;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   129
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   130
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   131
      std::ostringstream oss;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   132
      oss << "10.0." << i << ".0";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   133
      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
   134
      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
   135
      address.Assign (dev0);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   136
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   137
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   138
  // bottle neck link
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   139
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("2Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   140
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("100ms"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   141
  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
   142
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   143
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   144
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("1ns"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   145
  // for right links
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   146
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   147
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   148
      std::ostringstream oss;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   149
      oss << "10.2." << i << ".0";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   150
      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
   151
      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
   152
      address.Assign (dev2);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   153
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   154
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   155
  // bottle neck link
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   156
  Ptr<RateErrorModel> em1 =
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   157
    CreateObjectWithAttributes<RateErrorModel> (
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   158
      "ErrorRate", DoubleValue (0.05),
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   159
      "ErrorUnit", EnumValue (RateErrorModel::ERROR_UNIT_PACKET)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   160
      );
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   161
  dev1.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em1));
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
  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
   164
  address.Assign (dev1);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   165
  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   166
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   167
  ApplicationContainer apps;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   168
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   169
  OnOffHelper onoff = OnOffHelper (sock_factory,
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   170
                                   InetSocketAddress (Ipv4Address ("10.2.0.2"), 2000));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   171
  onoff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   172
  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   173
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   174
  // Flow 1 - n
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   175
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   176
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   177
      std::ostringstream oss;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   178
      oss << "10.2." << i << ".2";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   179
      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
   180
      onoff.SetAttribute ("PacketSize", StringValue ("1024"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   181
      onoff.SetAttribute ("DataRate", StringValue ("1Mbps"));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   182
      onoff.SetAttribute ("StartTime", TimeValue (Seconds (startTime)));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   183
      apps = onoff.Install (lefts.Get (i));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   184
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   185
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   186
  PacketSinkHelper sink = PacketSinkHelper (sock_factory,
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   187
                                            InetSocketAddress (Ipv4Address::GetAny (), 2000));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   188
  apps = sink.Install (rights);
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   189
  apps.Start (Seconds (3.9999));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   190
11149
eedec750f97e enablePcap argument was disabled
Tom Henderson <tomh@tomh.org>
parents: 11148
diff changeset
   191
  if (enablePcap)
eedec750f97e enablePcap argument was disabled
Tom Henderson <tomh@tomh.org>
parents: 11148
diff changeset
   192
    {
eedec750f97e enablePcap argument was disabled
Tom Henderson <tomh@tomh.org>
parents: 11148
diff changeset
   193
      pointToPoint.EnablePcapAll ("nsc.pcap");
eedec750f97e enablePcap argument was disabled
Tom Henderson <tomh@tomh.org>
parents: 11148
diff changeset
   194
    }
10403
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   195
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   196
  Simulator::Stop (Seconds (stopTime));
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   197
  Simulator::Run ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   198
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   199
  Ptr<PacketSink> pktsink;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   200
  std::cout << "Total ";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   201
  for (uint32_t i = 0; i < m_nNodes; i++)
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   202
    {
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   203
      pktsink = apps.Get (i)->GetObject<PacketSink> ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   204
      std::cout << "Rx(" << i << ") = " << pktsink->GetTotalRx () <<
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   205
      " bytes (" << pktsink->GetTotalRx () * 8 / (stopTime - startTime) << " bps), ";
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   206
    }
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   207
  std::cout << std::endl;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   208
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   209
  Simulator::Destroy ();
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   210
  return 0;
798e90c6c12f Unix line endings
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9273
diff changeset
   211
}