samples/main-simple.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 10 May 2007 18:33:52 +0200
changeset 567 6fb98941c36f
parent 519 b045a3ab4595
child 568 e1660959ecbb
permissions -rw-r--r--
remove leaks and rework the Ptr class to work with a new refcount mechanism
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
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
#include "ns3/internet-node.h"
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include "ns3/simulator.h"
519
b045a3ab4595 define and implement IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 501
diff changeset
     5
#include "ns3/i-udp.h"
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
     6
#include "ns3/socket.h"
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
     7
#include "ns3/nstime.h"
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
using namespace ns3;
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    11
static void
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    12
GenerateTraffic (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
    13
{
250
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    14
  std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, tx bytes=" << size << std::endl;
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    15
  socket->Send (0, size);
250
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    16
  if (size > 0)
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    17
    {
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    18
      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
    19
    }
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    20
  else
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    21
    {
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    22
      socket->Close ();
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    23
    }
249
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
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    26
static void
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    27
SocketPrinter (Socket *socket, uint32_t size, const Ipv4Address &from, uint16_t fromPort)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    28
{
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    29
  std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << size << std::endl;
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    30
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    31
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    32
static void
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    33
PrintTraffic (Socket *socket)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    34
{
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    35
  socket->RecvDummy (MakeCallback (&SocketPrinter));
249
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
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
    38
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
    39
RunSimulation (void)
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
{
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
    41
  Ptr<InternetNode> a = new InternetNode ();
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    42
519
b045a3ab4595 define and implement IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 501
diff changeset
    43
  IUdp *udp;
b045a3ab4595 define and implement IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 501
diff changeset
    44
  udp = a->QueryInterface<IUdp> (IUdp::iid);
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    45
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    46
  Socket *sink = udp->CreateSocket ();
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    47
  sink->Bind (80);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    48
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    49
  Socket *source = udp->CreateSocket ();
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    50
  source->Connect (Ipv4Address::GetLoopback (), 80);
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    51
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    52
  udp->Unref ();
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    53
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    54
  GenerateTraffic (source, 500);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    55
  PrintTraffic (sink);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    56
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  Simulator::Run ();
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
  Simulator::Destroy ();
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    62
  sink->Unref ();
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    63
  source->Unref ();
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
    64
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
    65
  std::cout << "o" << std::endl;
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
    66
}
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
    67
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
    68
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
    69
{
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
    70
  RunSimulation ();
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
  return 0;
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
}