samples/main-simple.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 02 Jan 2008 09:09:24 +0100
changeset 2230 9f13ac3291e0
parent 1866 e7dbcc4df546
child 2250 18f432098389
permissions -rw-r--r--
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
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"
747
65afca7824d7 i-socket-factory.h -> socket-factory.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
     5
#include "ns3/socket-factory.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"
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
     7
#include "ns3/inet-socket-address.h"
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
     8
#include "ns3/nstime.h"
1265
7d9bdec626a1 remove uint8_t * buffers from socket receive API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1264
diff changeset
     9
#include "ns3/packet.h"
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
using namespace ns3;
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    13
static void
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 567
diff changeset
    14
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
    15
{
250
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    16
  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
    17
  socket->Send (Create<Packet> (size));
250
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    18
  if (size > 0)
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    19
    {
82e03c8debf5 make simple example work
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 249
diff changeset
    20
      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
    21
    }
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    22
  else
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    23
    {
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    24
      socket->Close ();
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    25
    }
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    26
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    27
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    28
static void
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1308
diff changeset
    29
SocketPrinter (Ptr<Socket> socket, Ptr<Packet> packet, const Address &from)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    30
{
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1308
diff changeset
    31
  std::cout << "at=" << Simulator::Now ().GetSeconds () << "s, rx bytes=" << packet->GetSize () << std::endl;
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    32
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    33
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    34
static void
568
e1660959ecbb use Ptr<> everywhere Object or NsUnknown are used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 567
diff changeset
    35
PrintTraffic (Ptr<Socket> socket)
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    36
{
1265
7d9bdec626a1 remove uint8_t * buffers from socket receive API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1264
diff changeset
    37
  socket->SetRecvCallback (MakeCallback (&SocketPrinter));
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    38
}
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    39
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
    40
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
    41
RunSimulation (void)
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
{
2230
9f13ac3291e0 add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1866
diff changeset
    43
  Ptr<Node> a = CreateObject<InternetNode> ();
453
ddbb935800d8 remove DatagramSocket, use Socket base class for UdpSocket subclass.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 347
diff changeset
    44
753
683626e722bd IUdp -> Udp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 748
diff changeset
    45
  InterfaceId iid = InterfaceId::LookupByName ("Udp");
748
381b884929c4 ISocketFactory -> SocketFactory
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 747
diff changeset
    46
  Ptr<SocketFactory> socketFactory = a->QueryInterface<SocketFactory> (iid);
501
612bd30cb669 port sample code to refcounting model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 482
diff changeset
    47
619
528f0554b677 make OnOffApplication not depend on IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 607
diff changeset
    48
  Ptr<Socket> sink = socketFactory->CreateSocket ();
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    49
  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
    50
  sink->Bind (local);
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    51
619
528f0554b677 make OnOffApplication not depend on IUdp
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 607
diff changeset
    52
  Ptr<Socket> source = socketFactory->CreateSocket ();
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    53
  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
    54
  source->Connect (remote);
249
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    55
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    56
  GenerateTraffic (source, 500);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    57
  PrintTraffic (sink);
66f64be80982 add some traffic generation to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 247
diff changeset
    58
247
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::Run ();
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
  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
    63
}
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
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
    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
  RunSimulation ();
247
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
  return 0;
fb7375bb43d7 make the sample code compile and link.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
}