Files
ns-3-dev/examples/stats/wifi-example-apps.cc
T
Tom Henderson 94f27656f5 Rename internet-stack to internet, and organize module
--HG--
rename : src/helper/internet-stack-helper.cc => src/internet/helper/internet-stack-helper.cc
rename : src/helper/internet-stack-helper.h => src/internet/helper/internet-stack-helper.h
rename : src/helper/ipv4-address-helper.cc => src/internet/helper/ipv4-address-helper.cc
rename : src/helper/ipv4-address-helper.h => src/internet/helper/ipv4-address-helper.h
rename : src/routing/global-routing/helper/ipv4-global-routing-helper.cc => src/internet/helper/ipv4-global-routing-helper.cc
rename : src/routing/global-routing/helper/ipv4-global-routing-helper.h => src/internet/helper/ipv4-global-routing-helper.h
rename : src/helper/ipv4-interface-container.cc => src/internet/helper/ipv4-interface-container.cc
rename : src/helper/ipv4-interface-container.h => src/internet/helper/ipv4-interface-container.h
rename : src/routing/list-routing/helper/ipv4-list-routing-helper.cc => src/internet/helper/ipv4-list-routing-helper.cc
rename : src/routing/list-routing/helper/ipv4-list-routing-helper.h => src/internet/helper/ipv4-list-routing-helper.h
rename : src/helper/ipv4-routing-helper.cc => src/internet/helper/ipv4-routing-helper.cc
rename : src/helper/ipv4-routing-helper.h => src/internet/helper/ipv4-routing-helper.h
rename : src/routing/static-routing/helper/ipv4-static-routing-helper.cc => src/internet/helper/ipv4-static-routing-helper.cc
rename : src/routing/static-routing/helper/ipv4-static-routing-helper.h => src/internet/helper/ipv4-static-routing-helper.h
rename : src/helper/ipv6-address-helper.cc => src/internet/helper/ipv6-address-helper.cc
rename : src/helper/ipv6-address-helper.h => src/internet/helper/ipv6-address-helper.h
rename : src/helper/ipv6-interface-container.cc => src/internet/helper/ipv6-interface-container.cc
rename : src/helper/ipv6-interface-container.h => src/internet/helper/ipv6-interface-container.h
rename : src/routing/list-routing/helper/ipv6-list-routing-helper.cc => src/internet/helper/ipv6-list-routing-helper.cc
rename : src/routing/list-routing/helper/ipv6-list-routing-helper.h => src/internet/helper/ipv6-list-routing-helper.h
rename : src/helper/ipv6-routing-helper.cc => src/internet/helper/ipv6-routing-helper.cc
rename : src/helper/ipv6-routing-helper.h => src/internet/helper/ipv6-routing-helper.h
rename : src/routing/static-routing/helper/ipv6-static-routing-helper.cc => src/internet/helper/ipv6-static-routing-helper.cc
rename : src/routing/static-routing/helper/ipv6-static-routing-helper.h => src/internet/helper/ipv6-static-routing-helper.h
rename : src/helper/trace-helper.cc => src/internet/helper/trace-helper.cc
rename : src/helper/trace-helper.h => src/internet/helper/trace-helper.h
rename : src/internet-stack/arp-cache.cc => src/internet/model/arp-cache.cc
rename : src/internet-stack/arp-cache.h => src/internet/model/arp-cache.h
rename : src/internet-stack/arp-header.cc => src/internet/model/arp-header.cc
rename : src/internet-stack/arp-header.h => src/internet/model/arp-header.h
rename : src/internet-stack/arp-l3-protocol.cc => src/internet/model/arp-l3-protocol.cc
rename : src/internet-stack/arp-l3-protocol.h => src/internet/model/arp-l3-protocol.h
rename : src/routing/global-routing/model/candidate-queue.cc => src/internet/model/candidate-queue.cc
rename : src/routing/global-routing/model/candidate-queue.h => src/internet/model/candidate-queue.h
rename : src/routing/global-routing/model/global-route-manager-impl.cc => src/internet/model/global-route-manager-impl.cc
rename : src/routing/global-routing/model/global-route-manager-impl.h => src/internet/model/global-route-manager-impl.h
rename : src/routing/global-routing/model/global-route-manager.cc => src/internet/model/global-route-manager.cc
rename : src/routing/global-routing/model/global-route-manager.h => src/internet/model/global-route-manager.h
rename : src/routing/global-routing/model/global-router-interface.cc => src/internet/model/global-router-interface.cc
rename : src/routing/global-routing/model/global-router-interface.h => src/internet/model/global-router-interface.h
rename : src/routing/global-routing/model/global-routing.h => src/internet/model/global-routing.h
rename : src/internet-stack/icmpv4-l4-protocol.cc => src/internet/model/icmpv4-l4-protocol.cc
rename : src/internet-stack/icmpv4-l4-protocol.h => src/internet/model/icmpv4-l4-protocol.h
rename : src/internet-stack/icmpv4.cc => src/internet/model/icmpv4.cc
rename : src/internet-stack/icmpv4.h => src/internet/model/icmpv4.h
rename : src/internet-stack/icmpv6-header.cc => src/internet/model/icmpv6-header.cc
rename : src/internet-stack/icmpv6-header.h => src/internet/model/icmpv6-header.h
rename : src/internet-stack/icmpv6-l4-protocol.cc => src/internet/model/icmpv6-l4-protocol.cc
rename : src/internet-stack/icmpv6-l4-protocol.h => src/internet/model/icmpv6-l4-protocol.h
rename : src/internet-stack/ipv4-address-generator.cc => src/internet/model/ipv4-address-generator.cc
rename : src/internet-stack/ipv4-address-generator.h => src/internet/model/ipv4-address-generator.h
rename : src/internet-stack/ipv4-end-point-demux.cc => src/internet/model/ipv4-end-point-demux.cc
rename : src/internet-stack/ipv4-end-point-demux.h => src/internet/model/ipv4-end-point-demux.h
rename : src/internet-stack/ipv4-end-point.cc => src/internet/model/ipv4-end-point.cc
rename : src/internet-stack/ipv4-end-point.h => src/internet/model/ipv4-end-point.h
rename : src/routing/global-routing/model/ipv4-global-routing.cc => src/internet/model/ipv4-global-routing.cc
rename : src/routing/global-routing/model/ipv4-global-routing.h => src/internet/model/ipv4-global-routing.h
rename : src/internet-stack/ipv4-header.cc => src/internet/model/ipv4-header.cc
rename : src/internet-stack/ipv4-header.h => src/internet/model/ipv4-header.h
rename : src/internet-stack/ipv4-interface-address.cc => src/internet/model/ipv4-interface-address.cc
rename : src/internet-stack/ipv4-interface-address.h => src/internet/model/ipv4-interface-address.h
rename : src/internet-stack/ipv4-interface.cc => src/internet/model/ipv4-interface.cc
rename : src/internet-stack/ipv4-interface.h => src/internet/model/ipv4-interface.h
rename : src/internet-stack/ipv4-l3-protocol.cc => src/internet/model/ipv4-l3-protocol.cc
rename : src/internet-stack/ipv4-l3-protocol.h => src/internet/model/ipv4-l3-protocol.h
rename : src/internet-stack/ipv4-l4-protocol.cc => src/internet/model/ipv4-l4-protocol.cc
rename : src/internet-stack/ipv4-l4-protocol.h => src/internet/model/ipv4-l4-protocol.h
rename : src/routing/list-routing/model/ipv4-list-routing.cc => src/internet/model/ipv4-list-routing.cc
rename : src/routing/list-routing/model/ipv4-list-routing.h => src/internet/model/ipv4-list-routing.h
rename : src/internet-stack/ipv4-packet-info-tag.cc => src/internet/model/ipv4-packet-info-tag.cc
rename : src/internet-stack/ipv4-packet-info-tag.h => src/internet/model/ipv4-packet-info-tag.h
rename : src/internet-stack/ipv4-raw-socket-factory-impl.cc => src/internet/model/ipv4-raw-socket-factory-impl.cc
rename : src/internet-stack/ipv4-raw-socket-factory-impl.h => src/internet/model/ipv4-raw-socket-factory-impl.h
rename : src/internet-stack/ipv4-raw-socket-factory.cc => src/internet/model/ipv4-raw-socket-factory.cc
rename : src/internet-stack/ipv4-raw-socket-factory.h => src/internet/model/ipv4-raw-socket-factory.h
rename : src/internet-stack/ipv4-raw-socket-impl.cc => src/internet/model/ipv4-raw-socket-impl.cc
rename : src/internet-stack/ipv4-raw-socket-impl.h => src/internet/model/ipv4-raw-socket-impl.h
rename : src/internet-stack/ipv4-route.cc => src/internet/model/ipv4-route.cc
rename : src/internet-stack/ipv4-route.h => src/internet/model/ipv4-route.h
rename : src/internet-stack/ipv4-routing-protocol.cc => src/internet/model/ipv4-routing-protocol.cc
rename : src/internet-stack/ipv4-routing-protocol.h => src/internet/model/ipv4-routing-protocol.h
rename : src/routing/static-routing/model/ipv4-routing-table-entry.cc => src/internet/model/ipv4-routing-table-entry.cc
rename : src/routing/static-routing/model/ipv4-routing-table-entry.h => src/internet/model/ipv4-routing-table-entry.h
rename : src/routing/static-routing/model/ipv4-static-routing.cc => src/internet/model/ipv4-static-routing.cc
rename : src/routing/static-routing/model/ipv4-static-routing.h => src/internet/model/ipv4-static-routing.h
rename : src/internet-stack/ipv4.cc => src/internet/model/ipv4.cc
rename : src/internet-stack/ipv4.h => src/internet/model/ipv4.h
rename : src/internet-stack/ipv6-autoconfigured-prefix.cc => src/internet/model/ipv6-autoconfigured-prefix.cc
rename : src/internet-stack/ipv6-autoconfigured-prefix.h => src/internet/model/ipv6-autoconfigured-prefix.h
rename : src/internet-stack/ipv6-end-point-demux.cc => src/internet/model/ipv6-end-point-demux.cc
rename : src/internet-stack/ipv6-end-point-demux.h => src/internet/model/ipv6-end-point-demux.h
rename : src/internet-stack/ipv6-end-point.cc => src/internet/model/ipv6-end-point.cc
rename : src/internet-stack/ipv6-end-point.h => src/internet/model/ipv6-end-point.h
rename : src/internet-stack/ipv6-extension-demux.cc => src/internet/model/ipv6-extension-demux.cc
rename : src/internet-stack/ipv6-extension-demux.h => src/internet/model/ipv6-extension-demux.h
rename : src/internet-stack/ipv6-extension-header.cc => src/internet/model/ipv6-extension-header.cc
rename : src/internet-stack/ipv6-extension-header.h => src/internet/model/ipv6-extension-header.h
rename : src/internet-stack/ipv6-extension.cc => src/internet/model/ipv6-extension.cc
rename : src/internet-stack/ipv6-extension.h => src/internet/model/ipv6-extension.h
rename : src/internet-stack/ipv6-header.cc => src/internet/model/ipv6-header.cc
rename : src/internet-stack/ipv6-header.h => src/internet/model/ipv6-header.h
rename : src/internet-stack/ipv6-interface-address.cc => src/internet/model/ipv6-interface-address.cc
rename : src/internet-stack/ipv6-interface-address.h => src/internet/model/ipv6-interface-address.h
rename : src/internet-stack/ipv6-interface.cc => src/internet/model/ipv6-interface.cc
rename : src/internet-stack/ipv6-interface.h => src/internet/model/ipv6-interface.h
rename : src/internet-stack/ipv6-l3-protocol.cc => src/internet/model/ipv6-l3-protocol.cc
rename : src/internet-stack/ipv6-l3-protocol.h => src/internet/model/ipv6-l3-protocol.h
rename : src/internet-stack/ipv6-l4-protocol.cc => src/internet/model/ipv6-l4-protocol.cc
rename : src/internet-stack/ipv6-l4-protocol.h => src/internet/model/ipv6-l4-protocol.h
rename : src/routing/list-routing/model/ipv6-list-routing.cc => src/internet/model/ipv6-list-routing.cc
rename : src/routing/list-routing/model/ipv6-list-routing.h => src/internet/model/ipv6-list-routing.h
rename : src/internet-stack/ipv6-option-demux.cc => src/internet/model/ipv6-option-demux.cc
rename : src/internet-stack/ipv6-option-demux.h => src/internet/model/ipv6-option-demux.h
rename : src/internet-stack/ipv6-option-header.cc => src/internet/model/ipv6-option-header.cc
rename : src/internet-stack/ipv6-option-header.h => src/internet/model/ipv6-option-header.h
rename : src/internet-stack/ipv6-option.cc => src/internet/model/ipv6-option.cc
rename : src/internet-stack/ipv6-option.h => src/internet/model/ipv6-option.h
rename : src/internet-stack/ipv6-packet-info-tag.cc => src/internet/model/ipv6-packet-info-tag.cc
rename : src/internet-stack/ipv6-packet-info-tag.h => src/internet/model/ipv6-packet-info-tag.h
rename : src/internet-stack/ipv6-raw-socket-factory-impl.cc => src/internet/model/ipv6-raw-socket-factory-impl.cc
rename : src/internet-stack/ipv6-raw-socket-factory-impl.h => src/internet/model/ipv6-raw-socket-factory-impl.h
rename : src/internet-stack/ipv6-raw-socket-factory.cc => src/internet/model/ipv6-raw-socket-factory.cc
rename : src/internet-stack/ipv6-raw-socket-factory.h => src/internet/model/ipv6-raw-socket-factory.h
rename : src/internet-stack/ipv6-raw-socket-impl.cc => src/internet/model/ipv6-raw-socket-impl.cc
rename : src/internet-stack/ipv6-raw-socket-impl.h => src/internet/model/ipv6-raw-socket-impl.h
rename : src/internet-stack/ipv6-route.cc => src/internet/model/ipv6-route.cc
rename : src/internet-stack/ipv6-route.h => src/internet/model/ipv6-route.h
rename : src/internet-stack/ipv6-routing-protocol.cc => src/internet/model/ipv6-routing-protocol.cc
rename : src/internet-stack/ipv6-routing-protocol.h => src/internet/model/ipv6-routing-protocol.h
rename : src/routing/static-routing/model/ipv6-routing-table-entry.cc => src/internet/model/ipv6-routing-table-entry.cc
rename : src/routing/static-routing/model/ipv6-routing-table-entry.h => src/internet/model/ipv6-routing-table-entry.h
rename : src/routing/static-routing/model/ipv6-static-routing.cc => src/internet/model/ipv6-static-routing.cc
rename : src/routing/static-routing/model/ipv6-static-routing.h => src/internet/model/ipv6-static-routing.h
rename : src/internet-stack/ipv6.cc => src/internet/model/ipv6.cc
rename : src/internet-stack/ipv6.h => src/internet/model/ipv6.h
rename : src/internet-stack/loopback-net-device.cc => src/internet/model/loopback-net-device.cc
rename : src/internet-stack/loopback-net-device.h => src/internet/model/loopback-net-device.h
rename : src/internet-stack/ndisc-cache.cc => src/internet/model/ndisc-cache.cc
rename : src/internet-stack/ndisc-cache.h => src/internet/model/ndisc-cache.h
rename : src/internet-stack/nsc-sysctl.cc => src/internet/model/nsc-sysctl.cc
rename : src/internet-stack/nsc-sysctl.h => src/internet/model/nsc-sysctl.h
rename : src/internet-stack/nsc-tcp-l4-protocol.cc => src/internet/model/nsc-tcp-l4-protocol.cc
rename : src/internet-stack/nsc-tcp-l4-protocol.h => src/internet/model/nsc-tcp-l4-protocol.h
rename : src/internet-stack/nsc-tcp-socket-factory-impl.cc => src/internet/model/nsc-tcp-socket-factory-impl.cc
rename : src/internet-stack/nsc-tcp-socket-factory-impl.h => src/internet/model/nsc-tcp-socket-factory-impl.h
rename : src/internet-stack/nsc-tcp-socket-impl.cc => src/internet/model/nsc-tcp-socket-impl.cc
rename : src/internet-stack/nsc-tcp-socket-impl.h => src/internet/model/nsc-tcp-socket-impl.h
rename : src/internet-stack/pending-data.cc => src/internet/model/pending-data.cc
rename : src/internet-stack/pending-data.h => src/internet/model/pending-data.h
rename : src/internet-stack/rtt-estimator.cc => src/internet/model/rtt-estimator.cc
rename : src/internet-stack/rtt-estimator.h => src/internet/model/rtt-estimator.h
rename : src/internet-stack/sim_errno.h => src/internet/model/sim_errno.h
rename : src/internet-stack/sim_interface.h => src/internet/model/sim_interface.h
rename : src/internet-stack/tcp-header.cc => src/internet/model/tcp-header.cc
rename : src/internet-stack/tcp-header.h => src/internet/model/tcp-header.h
rename : src/internet-stack/tcp-l4-protocol.cc => src/internet/model/tcp-l4-protocol.cc
rename : src/internet-stack/tcp-l4-protocol.h => src/internet/model/tcp-l4-protocol.h
rename : src/internet-stack/tcp-newreno.cc => src/internet/model/tcp-newreno.cc
rename : src/internet-stack/tcp-newreno.h => src/internet/model/tcp-newreno.h
rename : src/internet-stack/tcp-reno.cc => src/internet/model/tcp-reno.cc
rename : src/internet-stack/tcp-reno.h => src/internet/model/tcp-reno.h
rename : src/internet-stack/tcp-rfc793.cc => src/internet/model/tcp-rfc793.cc
rename : src/internet-stack/tcp-rfc793.h => src/internet/model/tcp-rfc793.h
rename : src/internet-stack/tcp-rx-buffer.cc => src/internet/model/tcp-rx-buffer.cc
rename : src/internet-stack/tcp-rx-buffer.h => src/internet/model/tcp-rx-buffer.h
rename : src/internet-stack/tcp-socket-base.cc => src/internet/model/tcp-socket-base.cc
rename : src/internet-stack/tcp-socket-base.h => src/internet/model/tcp-socket-base.h
rename : src/internet-stack/tcp-socket-factory-impl.cc => src/internet/model/tcp-socket-factory-impl.cc
rename : src/internet-stack/tcp-socket-factory-impl.h => src/internet/model/tcp-socket-factory-impl.h
rename : src/internet-stack/tcp-socket-factory.cc => src/internet/model/tcp-socket-factory.cc
rename : src/internet-stack/tcp-socket-factory.h => src/internet/model/tcp-socket-factory.h
rename : src/internet-stack/tcp-socket.cc => src/internet/model/tcp-socket.cc
rename : src/internet-stack/tcp-socket.h => src/internet/model/tcp-socket.h
rename : src/internet-stack/tcp-tahoe.cc => src/internet/model/tcp-tahoe.cc
rename : src/internet-stack/tcp-tahoe.h => src/internet/model/tcp-tahoe.h
rename : src/internet-stack/tcp-tx-buffer.cc => src/internet/model/tcp-tx-buffer.cc
rename : src/internet-stack/tcp-tx-buffer.h => src/internet/model/tcp-tx-buffer.h
rename : src/internet-stack/udp-header.cc => src/internet/model/udp-header.cc
rename : src/internet-stack/udp-header.h => src/internet/model/udp-header.h
rename : src/internet-stack/udp-l4-protocol.cc => src/internet/model/udp-l4-protocol.cc
rename : src/internet-stack/udp-l4-protocol.h => src/internet/model/udp-l4-protocol.h
rename : src/internet-stack/udp-socket-factory-impl.cc => src/internet/model/udp-socket-factory-impl.cc
rename : src/internet-stack/udp-socket-factory-impl.h => src/internet/model/udp-socket-factory-impl.h
rename : src/internet-stack/udp-socket-factory.cc => src/internet/model/udp-socket-factory.cc
rename : src/internet-stack/udp-socket-factory.h => src/internet/model/udp-socket-factory.h
rename : src/internet-stack/udp-socket-impl.cc => src/internet/model/udp-socket-impl.cc
rename : src/internet-stack/udp-socket-impl.h => src/internet/model/udp-socket-impl.h
rename : src/internet-stack/udp-socket.cc => src/internet/model/udp-socket.cc
rename : src/internet-stack/udp-socket.h => src/internet/model/udp-socket.h
rename : src/internet-stack/ipv4-raw-test.cc => src/internet/test/ipv4-raw-test.cc
rename : src/internet-stack/ipv4-test.cc => src/internet/test/ipv4-test.cc
rename : src/internet-stack/ipv6-extension-header-test-suite.cc => src/internet/test/ipv6-extension-header-test-suite.cc
rename : src/internet-stack/ipv6-test.cc => src/internet/test/ipv6-test.cc
rename : src/internet-stack/tcp-test.cc => src/internet/test/tcp-test.cc
rename : src/internet-stack/udp-test.cc => src/internet/test/udp-test.cc
rename : src/internet-stack/waf => src/internet/waf
rename : src/internet-stack/wscript => src/internet/wscript
2011-02-25 10:32:35 -08:00

332 lines
8.0 KiB
C++

/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors: Joe Kopena <tjkopena@cs.drexel.edu>
*
* These applications are used in the WiFi Distance Test experiment,
* described and implemented in test02.cc. That file should be in the
* same place as this file. The applications have two very simple
* jobs, they just generate and receive packets. We could use the
* standard Application classes included in the NS-3 distribution.
* These have been written just to change the behavior a little, and
* provide more examples.
*
*/
#include <ostream>
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/stats-module.h"
#include "wifi-example-apps.h"
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("WiFiDistanceApps");
TypeId
Sender::GetTypeId(void)
{
static TypeId tid = TypeId ("Sender")
.SetParent<Application> ()
.AddConstructor<Sender> ()
.AddAttribute ("PacketSize", "The size of packets transmitted.",
UintegerValue(64),
MakeUintegerAccessor(&Sender::m_pktSize),
MakeUintegerChecker<uint32_t>(1))
.AddAttribute("Destination", "Target host address.",
Ipv4AddressValue("255.255.255.255"),
MakeIpv4AddressAccessor(&Sender::m_destAddr),
MakeIpv4AddressChecker())
.AddAttribute("Port", "Destination app port.",
UintegerValue(1603),
MakeUintegerAccessor(&Sender::m_destPort),
MakeUintegerChecker<uint32_t>())
.AddAttribute("NumPackets", "Total number of packets to send.",
UintegerValue(30),
MakeUintegerAccessor(&Sender::m_numPkts),
MakeUintegerChecker<uint32_t>(1))
.AddAttribute ("Interval", "Delay between transmissions.",
RandomVariableValue(ConstantVariable(0.5)),
MakeRandomVariableAccessor(&Sender::m_interval),
MakeRandomVariableChecker())
.AddTraceSource ("Tx", "A new packet is created and is sent",
MakeTraceSourceAccessor (&Sender::m_txTrace))
;
return tid;
}
Sender::Sender()
{
NS_LOG_FUNCTION_NOARGS ();
m_socket = 0;
}
Sender::~Sender()
{
NS_LOG_FUNCTION_NOARGS ();
}
void
Sender::DoDispose (void)
{
NS_LOG_FUNCTION_NOARGS ();
m_socket = 0;
// chain up
Application::DoDispose ();
}
void Sender::StartApplication()
{
NS_LOG_FUNCTION_NOARGS ();
if (m_socket == 0) {
Ptr<SocketFactory> socketFactory = GetNode()->GetObject<SocketFactory>
(UdpSocketFactory::GetTypeId());
m_socket = socketFactory->CreateSocket ();
m_socket->Bind ();
}
m_count = 0;
Simulator::Cancel(m_sendEvent);
m_sendEvent = Simulator::ScheduleNow(&Sender::SendPacket, this);
// end Sender::StartApplication
}
void Sender::StopApplication()
{
NS_LOG_FUNCTION_NOARGS ();
Simulator::Cancel(m_sendEvent);
// end Sender::StopApplication
}
void Sender::SendPacket()
{
// NS_LOG_FUNCTION_NOARGS ();
NS_LOG_INFO("Sending packet at " << Simulator::Now() << " to " <<
m_destAddr);
Ptr<Packet> packet = Create<Packet>(m_pktSize);
TimestampTag timestamp;
timestamp.SetTimestamp(Simulator::Now());
packet->AddByteTag (timestamp);
// Could connect the socket since the address never changes; using SendTo
// here simply because all of the standard apps do not.
m_socket->SendTo(packet, 0, InetSocketAddress(m_destAddr, m_destPort));
// Report the event to the trace.
m_txTrace(packet);
if (++m_count < m_numPkts) {
m_sendEvent = Simulator::Schedule(Seconds(m_interval.GetValue()),
&Sender::SendPacket, this);
}
// end Sender::SendPacket
}
//----------------------------------------------------------------------
//-- Receiver
//------------------------------------------------------
TypeId
Receiver::GetTypeId(void)
{
static TypeId tid = TypeId ("Receiver")
.SetParent<Application> ()
.AddConstructor<Receiver> ()
.AddAttribute("Port", "Listening port.",
UintegerValue(1603),
MakeUintegerAccessor(&Receiver::m_port),
MakeUintegerChecker<uint32_t>())
;
return tid;
}
Receiver::Receiver() :
m_calc(0),
m_delay(0)
{
NS_LOG_FUNCTION_NOARGS ();
m_socket = 0;
}
Receiver::~Receiver()
{
NS_LOG_FUNCTION_NOARGS ();
}
void
Receiver::DoDispose (void)
{
NS_LOG_FUNCTION_NOARGS ();
m_socket = 0;
// chain up
Application::DoDispose ();
}
void
Receiver::StartApplication()
{
NS_LOG_FUNCTION_NOARGS ();
if (m_socket == 0) {
Ptr<SocketFactory> socketFactory = GetNode()->GetObject<SocketFactory>
(UdpSocketFactory::GetTypeId());
m_socket = socketFactory->CreateSocket();
InetSocketAddress local =
InetSocketAddress(Ipv4Address::GetAny(), m_port);
m_socket->Bind(local);
}
m_socket->SetRecvCallback(MakeCallback(&Receiver::Receive, this));
// end Receiver::StartApplication
}
void
Receiver::StopApplication()
{
NS_LOG_FUNCTION_NOARGS ();
if (m_socket != 0) {
m_socket->SetRecvCallback(MakeNullCallback<void, Ptr<Socket> > ());
}
// end Receiver::StopApplication
}
void
Receiver::SetCounter(Ptr<CounterCalculator<> > calc)
{
m_calc = calc;
// end Receiver::SetCounter
}
void
Receiver::SetDelayTracker(Ptr<TimeMinMaxAvgTotalCalculator> delay)
{
m_delay = delay;
// end Receiver::SetDelayTracker
}
void
Receiver::Receive(Ptr<Socket> socket)
{
// NS_LOG_FUNCTION (this << socket << packet << from);
Ptr<Packet> packet;
Address from;
while (packet = socket->RecvFrom(from)) {
if (InetSocketAddress::IsMatchingType (from)) {
InetSocketAddress address = InetSocketAddress::ConvertFrom (from);
NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " <<
address.GetIpv4());
}
TimestampTag timestamp;
// Should never not be found since the sender is adding it, but
// you never know.
if (packet->FindFirstMatchingByteTag(timestamp)) {
Time tx = timestamp.GetTimestamp();
if (m_delay != 0) {
m_delay->Update(Simulator::Now() - tx);
}
}
if (m_calc != 0) {
m_calc->Update();
}
// end receiving packets
}
// end Receiver::Receive
}
//----------------------------------------------------------------------
//-- TimestampTag
//------------------------------------------------------
TypeId
TimestampTag::GetTypeId(void)
{
static TypeId tid = TypeId ("TimestampTag")
.SetParent<Tag> ()
.AddConstructor<TimestampTag> ()
.AddAttribute ("Timestamp",
"Some momentous point in time!",
EmptyAttributeValue(),
MakeTimeAccessor(&TimestampTag::GetTimestamp),
MakeTimeChecker())
;
return tid;
}
TypeId
TimestampTag::GetInstanceTypeId(void) const
{
return GetTypeId ();
}
uint32_t
TimestampTag::GetSerializedSize (void) const
{
return 8;
}
void
TimestampTag::Serialize (TagBuffer i) const
{
int64_t t = m_timestamp.GetNanoSeconds();
i.Write((const uint8_t *)&t, 8);
}
void
TimestampTag::Deserialize (TagBuffer i)
{
int64_t t;
i.Read((uint8_t *)&t, 8);
m_timestamp = NanoSeconds(t);
}
void
TimestampTag::SetTimestamp(Time time)
{
m_timestamp = time;
}
Time
TimestampTag::GetTimestamp(void) const
{
return m_timestamp;
}
void
TimestampTag::Print(std::ostream &os) const
{
os << "t=" << m_timestamp;
}