examples/tcp/tcp-bulk-send.cc
author Tom Henderson <tomh@tomh.org>
Mon, 15 Sep 2014 20:51:08 -0700
changeset 10956 fa4be182ef17
parent 6865 220373544a6c
permissions -rw-r--r--
rescan remaining bindings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6690
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     2
/*
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     3
 * This program is free software; you can redistribute it and/or modify
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     4
 * it under the terms of the GNU General Public License version 2 as
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     5
 * published by the Free Software Foundation;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     6
 *
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     7
 * This program is distributed in the hope that it will be useful,
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    10
 * GNU General Public License for more details.
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    11
 *
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    12
 * You should have received a copy of the GNU General Public License
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    13
 * along with this program; if not, write to the Free Software
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    15
 */
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    16
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    17
// Network topology
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    18
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    19
//       n0 ----------- n1
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    20
//            500 Kbps
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    21
//             5 ms
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    22
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    23
// - Flow from n0 to n1 using BulkSendApplication.
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    24
// - Tracing of queues and packet receptions to file "tcp-bulk-send.tr"
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    25
//   and pcap tracing available when tracing is turned on.
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    26
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    27
#include <string>
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    28
#include <fstream>
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    29
#include "ns3/core-module.h"
6848
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6847
diff changeset
    30
#include "ns3/point-to-point-module.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6847
diff changeset
    31
#include "ns3/internet-module.h"
6847
138f00c56381 Move applications to a single module
Mitch Watrous <watrous@u.washington.edu>
parents: 6845
diff changeset
    32
#include "ns3/applications-module.h"
6823
a27f86fb4e55 Merge node and common modules into new network module
Tom Henderson <tomh@tomh.org>
parents: 6821
diff changeset
    33
#include "ns3/network-module.h"
6690
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    34
#include "ns3/packet-sink.h"
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    35
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    36
using namespace ns3;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    37
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    38
NS_LOG_COMPONENT_DEFINE ("TcpBulkSendExample");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    39
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    40
int
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    41
main (int argc, char *argv[])
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    42
{
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    43
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    44
  bool tracing = false;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    45
  uint32_t maxBytes = 0;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    46
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    47
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    48
// Allow the user to override any of the defaults at
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    49
// run-time, via command-line arguments
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    50
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    51
  CommandLine cmd;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    52
  cmd.AddValue ("tracing", "Flag to enable/disable tracing", tracing);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    53
  cmd.AddValue ("maxBytes",
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    54
                "Total number of bytes for application to send", maxBytes);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    55
  cmd.Parse (argc, argv);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    56
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    57
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    58
// Explicitly create the nodes required by the topology (shown above).
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    59
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    60
  NS_LOG_INFO ("Create nodes.");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    61
  NodeContainer nodes;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    62
  nodes.Create (2);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    63
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    64
  NS_LOG_INFO ("Create channels.");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    65
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    66
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    67
// Explicitly create the point-to-point link required by the topology (shown above).
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    68
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    69
  PointToPointHelper pointToPoint;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    70
  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("500Kbps"));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    71
  pointToPoint.SetChannelAttribute ("Delay", StringValue ("5ms"));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    72
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    73
  NetDeviceContainer devices;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    74
  devices = pointToPoint.Install (nodes);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    75
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    76
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    77
// Install the internet stack on the nodes
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    78
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    79
  InternetStackHelper internet;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    80
  internet.Install (nodes);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    81
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    82
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    83
// We've got the "hardware" in place.  Now we need to add IP addresses.
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    84
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    85
  NS_LOG_INFO ("Assign IP Addresses.");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    86
  Ipv4AddressHelper ipv4;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    87
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    88
  Ipv4InterfaceContainer i = ipv4.Assign (devices);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    89
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    90
  NS_LOG_INFO ("Create Applications.");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    91
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    92
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    93
// Create a BulkSendApplication and install it on node 0
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    94
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    95
  uint16_t port = 9;  // well-known echo port number
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    96
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    97
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    98
  BulkSendHelper source ("ns3::TcpSocketFactory",
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    99
                         InetSocketAddress (i.GetAddress (1), port));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   100
  // Set the amount of data to send in bytes.  Zero is unlimited.
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   101
  source.SetAttribute ("MaxBytes", UintegerValue (maxBytes));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   102
  ApplicationContainer sourceApps = source.Install (nodes.Get (0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   103
  sourceApps.Start (Seconds (0.0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   104
  sourceApps.Stop (Seconds (10.0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   105
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   106
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   107
// Create a PacketSinkApplication and install it on node 1
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   108
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   109
  PacketSinkHelper sink ("ns3::TcpSocketFactory",
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   110
                         InetSocketAddress (Ipv4Address::GetAny (), port));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   111
  ApplicationContainer sinkApps = sink.Install (nodes.Get (1));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   112
  sinkApps.Start (Seconds (0.0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   113
  sinkApps.Stop (Seconds (10.0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   114
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   115
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   116
// Set up tracing if enabled
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   117
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   118
  if (tracing)
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   119
    {
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   120
      AsciiTraceHelper ascii;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   121
      pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("tcp-bulk-send.tr"));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   122
      pointToPoint.EnablePcapAll ("tcp-bulk-send", false);
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   123
    }
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   124
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   125
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   126
// Now, do the actual simulation.
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   127
//
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   128
  NS_LOG_INFO ("Run Simulation.");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   129
  Simulator::Stop (Seconds (10.0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   130
  Simulator::Run ();
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   131
  Simulator::Destroy ();
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   132
  NS_LOG_INFO ("Done.");
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   133
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   134
  Ptr<PacketSink> sink1 = DynamicCast<PacketSink> (sinkApps.Get (0));
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   135
  std::cout << "Total Bytes Received: " << sink1->GetTotalRx () << std::endl;
3fab9a03dacd Add BulkSendApplication
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   136
}