samples/main-simple.cc
author Tom Henderson <tomh@tomh.org>
Fri, 02 May 2008 09:21:01 -0700
changeset 3102 a225be367c1d
parent 3100 70b98532fe5c
child 3103 91c6fce46125
permissions -rw-r--r--
more cleanup
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
     1
#include <iostream>
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
     2
2730
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
     3
#include "ns3/core-module.h"
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
     4
#include "ns3/helper-module.h"
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
     5
#include "ns3/node-module.h"
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
     6
#include "ns3/simulator-module.h"
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
using namespace ns3;
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    10
static void
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 567
diff changeset
    11
GenerateTraffic (Ptr<Socket> socket, uint32_t size)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    12
{
250
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    13
  std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, tx bytes=" << size << std::endl;
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1308
diff changeset
    14
  socket->Send (Create<Packet> (size));
250
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    15
  if (size > 0)
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    16
    {
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    17
      Simulator::Schedule (Seconds (0.5), &GenerateTraffic, socket, size - 50);
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    18
    }
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    19
  else
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    20
    {
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    21
      socket->Close ();
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    22
    }
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    23
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    24
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    25
static void
3100
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    26
SocketPrinter (Ptr<Socket> socket)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    27
{
3100
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    28
  Ptr<Packet> packet;
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    29
  uint32_t maxSize = std::numeric_limits<uint32_t>::max();
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    30
  uint32_t flags = 0;  // no flags
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    31
  while (packet = socket->Recv (maxSize, flags))
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    32
    { 
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    33
      std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << packet->GetSize () << std::endl;
70b98532fe5c remove previous socket receive methods
Tom Henderson <tomh@tomh.org>
parents: 2887
diff changeset
    34
    }
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    35
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    36
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    37
static void
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 567
diff changeset
    38
PrintTraffic (Ptr<Socket> socket)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    39
{
3102
a225be367c1d more cleanup
Tom Henderson <tomh@tomh.org>
parents: 3100
diff changeset
    40
  socket->SetRecvCallback (MakeCallback (&SocketPrinter));
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    41
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    42
567
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    43
void
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    44
RunSimulation (void)
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
{
2730
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    46
  NodeContainer c;
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    47
  c.Create (1);
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    48
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    49
  InternetStackHelper internet;
2887
9a637e6daee0 Build -> Install
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2730
diff changeset
    50
  internet.Install (c);
2730
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    51
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    52
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2257
diff changeset
    53
  TypeId tid = TypeId::LookupByName ("ns3::Udp");
2730
b79415813a1c port to helper API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2602
diff changeset
    54
  Ptr<SocketFactory> socketFactory = c.Get (0)->GetObject<SocketFactory> (tid);
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    55
619
528f0554b677 make OnOffApplication not depend on IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 607
diff changeset
    56
  Ptr<Socket> sink = socketFactory->CreateSocket ();
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    57
  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
1204
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    58
  sink->Bind (local);
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    59
619
528f0554b677 make OnOffApplication not depend on IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 607
diff changeset
    60
  Ptr<Socket> source = socketFactory->CreateSocket ();
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    61
  InetSocketAddress remote = InetSocketAddress (Ipv4Address::GetLoopback (), 80);
1204
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    62
  source->Connect (remote);
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    63
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    64
  GenerateTraffic (source, 500);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    65
  PrintTraffic (sink);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    66
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
  Simulator::Run ();
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
  Simulator::Destroy ();
567
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    71
}
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    72
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    73
int main (int argc, char *argv[])
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    74
{
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 519
diff changeset
    75
  RunSimulation ();
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  return 0;
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
}