examples/tcp-large-transfer.cc
author Florian Westphal <fw@strlen.de>
Wed, 03 Sep 2008 23:24:59 +0200
changeset 3595 693faf7f4e9b
parent 3381 3cdd9d60f7c7
child 3643 7afa66c2b291
permissions -rw-r--r--
nsc: Fix build problem if gtk config store is disabled gtk config store pulled in libdl.so for us, so things fail to link of the config store isn't enabled. This makes nsc pull in libdl itself when its enabled.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     2
/*
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     3
 * This program is free software; you can redistribute it and/or modify
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     4
 * it under the terms of the GNU General Public License version 2 as
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     5
 * published by the Free Software Foundation;
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     6
 *
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     7
 * This program is distributed in the hope that it will be useful,
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
     9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    10
 * GNU General Public License for more details.
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    11
 *
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    12
 * You should have received a copy of the GNU General Public License
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    13
 * along with this program; if not, write to the Free Software
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    15
 *
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    16
 */
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    17
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    18
//
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    19
// Network topology
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    20
//
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    21
//           10Mb/s, 10ms       10Mb/s, 10ms
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    22
//       n0-----------------n1-----------------n2
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    23
//
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    24
//
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    25
// - Tracing of queues and packet receptions to file 
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    26
//   "tcp-large-transfer.tr"
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    27
// - pcap traces also generated in the following files
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    28
//   "tcp-large-transfer-$n-$i.pcap" where n and i represent node and interface
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    29
// numbers respectively
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    30
//  Usage (e.g.): ./waf --run tcp-large-transfer
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    31
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
    32
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    33
#include <ctype.h>
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    34
#include <iostream>
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    35
#include <fstream>
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    36
#include <string>
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    37
#include <cassert>
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    38
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    39
#include "ns3/core-module.h"
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    40
#include "ns3/helper-module.h"
2753
1f03a5531746 fallout from gustavo's header inclusion policy change.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2749
diff changeset
    41
#include "ns3/node-module.h"
1f03a5531746 fallout from gustavo's header inclusion policy change.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2749
diff changeset
    42
#include "ns3/global-route-manager.h"
1f03a5531746 fallout from gustavo's header inclusion policy change.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2749
diff changeset
    43
#include "ns3/simulator-module.h"
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    44
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    45
using namespace ns3;
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    46
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    47
NS_LOG_COMPONENT_DEFINE ("TcpLargeTransfer");
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    48
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    49
// The number of bytes to send in this simulation.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    50
static uint32_t txBytes = 2000000;
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    51
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    52
// These are for starting the writing process, and handling the sending 
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    53
// socket's notification upcalls (events).  These two together more or less
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    54
// implement a sending "Application", although not a proper ns3::Application
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    55
// subclass.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    56
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    57
void StartFlow(Ptr<Socket>, Ipv4Address, uint16_t);
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
    58
void WriteUntilBufferFull (Ptr<Socket>, uint32_t);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    59
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    60
int main (int argc, char *argv[])
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    61
{
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    62
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    63
  // Users may find it convenient to turn on explicit debugging
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    64
  // for selected modules; the below lines suggest how to do this
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    65
  //  LogComponentEnable("TcpL4Protocol", LOG_LEVEL_ALL);
3276
8869a79a391f Changes for bug 205, unlisted FIN bug
Craig Dowell <craigdo@ee.washington.edu>
parents: 3269
diff changeset
    66
  //  LogComponentEnable("TcpSocketImpl", LOG_LEVEL_ALL);
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    67
  //  LogComponentEnable("PacketSink", LOG_LEVEL_ALL);
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    68
  //  LogComponentEnable("TcpLargeTransfer", LOG_LEVEL_ALL);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    69
2865
d40eb18a4da0 Point regression tests to final locations, update release steps, bug 158
Craig Dowell <craigdo@ee.washington.edu>
parents: 2845
diff changeset
    70
  //
d40eb18a4da0 Point regression tests to final locations, update release steps, bug 158
Craig Dowell <craigdo@ee.washington.edu>
parents: 2845
diff changeset
    71
  // Make the random number generators generate reproducible results.
d40eb18a4da0 Point regression tests to final locations, update release steps, bug 158
Craig Dowell <craigdo@ee.washington.edu>
parents: 2845
diff changeset
    72
  //
d40eb18a4da0 Point regression tests to final locations, update release steps, bug 158
Craig Dowell <craigdo@ee.washington.edu>
parents: 2845
diff changeset
    73
  RandomVariable::UseGlobalSeed (1, 1, 2, 3, 5, 8);
d40eb18a4da0 Point regression tests to final locations, update release steps, bug 158
Craig Dowell <craigdo@ee.washington.edu>
parents: 2845
diff changeset
    74
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    75
  // Allow the user to override any of the defaults and the above
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    76
  // Bind()s at run-time, via command-line arguments
2575
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2540
diff changeset
    77
  CommandLine cmd;
1aae382e65e2 rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2540
diff changeset
    78
  cmd.Parse (argc, argv);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    79
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    80
  // Here, we will explicitly create three nodes.  The first container contains
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    81
  // nodes 0 and 1 from the diagram above, and the second one contains nodes
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    82
  // 1 and 2.  This reflects the channel connectivity, and will be used to
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    83
  // install the network interfaces and connect them with a channel.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    84
  NodeContainer n0n1;
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    85
  n0n1.Create (2);
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    86
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    87
  NodeContainer n1n2;
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    88
  n1n2.Add (n0n1.Get (1));
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    89
  n1n2.Create (1);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    90
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
    91
  // We create the channels first without any IP addressing information
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    92
  // First make and configure the helper, so that it will put the appropriate
3381
3cdd9d60f7c7 bug 232, references to Parameter obsolete
Craig Dowell <craigdo@ee.washington.edu>
parents: 3294
diff changeset
    93
  // attributes on the network interfaces and channels we are about to install.
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    94
  PointToPointHelper p2p;
3381
3cdd9d60f7c7 bug 232, references to Parameter obsolete
Craig Dowell <craigdo@ee.washington.edu>
parents: 3294
diff changeset
    95
  p2p.SetDeviceAttribute ("DataRate", DataRateValue (DataRate(10000000)));
3cdd9d60f7c7 bug 232, references to Parameter obsolete
Craig Dowell <craigdo@ee.washington.edu>
parents: 3294
diff changeset
    96
  p2p.SetChannelAttribute ("Delay", TimeValue (MilliSeconds(10)));
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    97
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    98
  // And then install devices and channels connecting our topology.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
    99
  NetDeviceContainer dev0 = p2p.Install (n0n1);
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   100
  NetDeviceContainer dev1 = p2p.Install (n1n2);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   101
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   102
  // Now add ip/tcp stack to all nodes.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   103
  NodeContainer allNodes = NodeContainer (n0n1, n1n2.Get (1));
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   104
  InternetStackHelper internet;
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   105
  internet.Install (allNodes);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   106
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   107
  // Later, we add IP addresses.
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   108
  Ipv4AddressHelper ipv4;
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   109
  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
2888
872dc8466352 Ipv4AddressHelper::Allocate -> Ipv4AddressHelper::Assign
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2887
diff changeset
   110
  ipv4.Assign (dev0);
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   111
  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
2888
872dc8466352 Ipv4AddressHelper::Allocate -> Ipv4AddressHelper::Assign
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2887
diff changeset
   112
  Ipv4InterfaceContainer ipInterfs = ipv4.Assign (dev1);
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   113
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   114
  // and setup ip routing tables to get total ip-level connectivity.
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   115
  GlobalRouteManager::PopulateRoutingTables ();
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   116
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   117
  ///////////////////////////////////////////////////////////////////////////
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   118
  // Simulation 1
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   119
  //
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   120
  // Send 2000000 bytes over a connection to server port 50000 at time 0
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   121
  // Should observe SYN exchange, a lot of data segments and ACKS, and FIN 
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   122
  // exchange.  FIN exchange isn't quite compliant with TCP spec (see release
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   123
  // notes for more info)
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   124
  //
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   125
  ///////////////////////////////////////////////////////////////////////////
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   126
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   127
  uint16_t servPort = 50000;
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   128
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   129
  // Create a packet sink to receive these packets on n2...
3132
b0b0abb911cd move Tcp to TcpSocketFactory
Tom Henderson <tomh@tomh.org>
parents: 3116
diff changeset
   130
  PacketSinkHelper sink ("ns3::TcpSocketFactory",
2965
4b28e9740e3b get rid of Attribute class. Use AttributeValue subclasses directly.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2890
diff changeset
   131
                         InetSocketAddress (Ipv4Address::GetAny (), servPort));
2890
172baa5960ff rework app constructors
Craig Dowell <craigdo@ee.washington.edu>
parents: 2889
diff changeset
   132
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   133
  ApplicationContainer apps = sink.Install (n1n2.Get (1));
2746
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   134
  apps.Start (Seconds (0.0));
177a8a3f3c65 convert to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
   135
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   136
  // Create a source to send packets from n0.  Instead of a full Application
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   137
  // and the helper APIs you might see in other example files, this example
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   138
  // will use sockets directly and register some socket callbacks as a sending
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   139
  // "Application".
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   140
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   141
  // Create and bind the socket...
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   142
  Ptr<Socket> localSocket =
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   143
      Socket::CreateSocket (n0n1.Get (0), TcpSocketFactory::GetTypeId ());
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   144
  localSocket->Bind ();
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   145
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   146
  // ...and schedule the sending "Application"; This is similar to what an 
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   147
  // ns3::Application subclass would do internally.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   148
  Simulator::ScheduleNow (&StartFlow, localSocket,
2749
0aa031496023 use Ipv4InterfaceContainer to avoid hardcoding ip addresses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2746
diff changeset
   149
                          ipInterfs.GetAddress (1), servPort);
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   150
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   151
  // One can toggle the comment for the following line on or off to see the
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   152
  // effects of finite send buffer modelling.  One can also change the size of
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   153
  // said buffer.
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   154
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   155
  //localSocket->SetAttribute("SndBufSize", UintegerValue(4096));
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   156
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   157
  //Ask for ASCII and pcap traces of network traffic
2789
47e92324cf4b configure tracing post-topology construction, not before.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2788
diff changeset
   158
  std::ofstream ascii;
47e92324cf4b configure tracing post-topology construction, not before.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2788
diff changeset
   159
  ascii.open ("tcp-large-transfer.tr");
2996
a83b94e277d4 EnablePcap()->EnablePcapAll(); EnableAscii()->EnableAsciiAll()
Tom Henderson <tomh@tomh.org>
parents: 2890
diff changeset
   160
  PointToPointHelper::EnableAsciiAll (ascii);
2789
47e92324cf4b configure tracing post-topology construction, not before.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2788
diff changeset
   161
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2997
diff changeset
   162
  PointToPointHelper::EnablePcapAll ("tcp-large-transfer");
2789
47e92324cf4b configure tracing post-topology construction, not before.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2788
diff changeset
   163
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   164
  // Finally, set up the simulator to run.  The 1000 second hard limit is a
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   165
  // failsafe in case some change above causes the simulation to never end
3174
efeb6e5c276d Make Application::Start/Stop times relative, Simulator::StopAt(time) renamed to Simulator::Stop(time) and time also made relative, to improve consistency of the API which uses relative times everywhere else. Closes bug #191.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 3132
diff changeset
   166
  Simulator::Stop (Seconds(1000));
2224
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   167
  Simulator::Run ();
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   168
  Simulator::Destroy ();
6f97d21a99c2 Added in ns-3-tcp (second try)
Raj Bhattacharjea <raj.b@gatech.edu>
parents:
diff changeset
   169
}
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   170
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   171
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   172
//-----------------------------------------------------------------------------
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   173
//-----------------------------------------------------------------------------
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   174
//-----------------------------------------------------------------------------
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   175
//begin implementation of sending "Application"
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   176
void StartFlow(Ptr<Socket> localSocket,
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   177
               Ipv4Address servAddress,
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   178
               uint16_t servPort)
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   179
{
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   180
  NS_LOG_LOGIC("Starting flow at time " <<  Simulator::Now ().GetSeconds ());
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   181
  localSocket->Connect (InetSocketAddress (servAddress, servPort));//connect
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   182
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   183
  // tell the tcp implementation to call WriteUntilBufferFull again
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   184
  // if we blocked and new tx buffer space becomes available
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   185
  localSocket->SetSendCallback (MakeCallback (&WriteUntilBufferFull));
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   186
  WriteUntilBufferFull (localSocket, txBytes);
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   187
}
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   188
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   189
void WriteUntilBufferFull (Ptr<Socket> localSocket, uint32_t txSpace)
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   190
{
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   191
  // Perform series of 1040 byte writes (this is a multiple of 26 since
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   192
  // we want to detect data splicing in the output stream)
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   193
  uint32_t writeSize = 1040;
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   194
  uint8_t data[writeSize];
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   195
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   196
  while (txBytes > 0) {
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   197
    uint32_t curSize= txBytes > writeSize ? writeSize : txBytes;
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   198
    if (curSize > txSpace)
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   199
      curSize = txSpace;
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   200
    for(uint32_t i = 0; i < curSize; ++i)
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   201
    {
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   202
      char m = toascii (97 + i % 26);
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   203
      data[i] = m;
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   204
    }
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   205
    int amountSent = localSocket->Send (data, curSize, 0);
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   206
    if(amountSent < 0)
3241
284705f0775f Use the correct semantics for sendcallback
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3240
diff changeset
   207
      {
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   208
        // we will be called again when new tx space becomes available.
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   209
        std::cout << "Socket blocking, " << txBytes << " left to write, returning" << std::endl;
3241
284705f0775f Use the correct semantics for sendcallback
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3240
diff changeset
   210
        return;
284705f0775f Use the correct semantics for sendcallback
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3240
diff changeset
   211
      }
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   212
    txBytes -= curSize;
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   213
    if (amountSent != (int)curSize)
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   214
      {
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   215
        std::cout << "Short Write, returning" << std::endl;
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   216
        return;
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   217
      }
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   218
  }
3294
2ade6552db36 Patch addresses bug 227.
craigdo@craig-dowells-imac.local
parents: 3276
diff changeset
   219
  localSocket->Close ();
3240
965da7165e78 Tcp large transfer modified to keep sending for 10 seconds
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 3239
diff changeset
   220
}