22 #include "ns3/ipv4-address.h"
23 #include "ns3/nstime.h"
24 #include "ns3/inet-socket-address.h"
25 #include "ns3/inet6-socket-address.h"
26 #include "ns3/socket.h"
27 #include "ns3/simulator.h"
28 #include "ns3/socket-factory.h"
29 #include "ns3/packet.h"
30 #include "ns3/uinteger.h"
31 #include "udp-client.h"
32 #include "seq-ts-header.h"
39 NS_OBJECT_ENSURE_REGISTERED (UdpClient);
42 UdpClient::GetTypeId (
void)
44 static TypeId tid = TypeId (
"ns3::UdpClient")
45 .SetParent<Application> ()
46 .AddConstructor<UdpClient> ()
47 .AddAttribute (
"MaxPackets",
48 "The maximum number of packets the application will send",
50 MakeUintegerAccessor (&UdpClient::m_count),
51 MakeUintegerChecker<uint32_t> ())
52 .AddAttribute (
"Interval",
53 "The time to wait between packets", TimeValue (
Seconds (1.0)),
54 MakeTimeAccessor (&UdpClient::m_interval),
58 "The destination Address of the outbound packets",
60 MakeAddressAccessor (&UdpClient::m_peerAddress),
61 MakeAddressChecker ())
62 .AddAttribute (
"RemotePort",
"The destination port of the outbound packets",
64 MakeUintegerAccessor (&UdpClient::m_peerPort),
65 MakeUintegerChecker<uint16_t> ())
66 .AddAttribute (
"PacketSize",
67 "Size of packets generated. The minimum packet size is 12 bytes which is the size of the header carrying the sequence number and the time stamp.",
69 MakeUintegerAccessor (&UdpClient::m_size),
70 MakeUintegerChecker<uint32_t> (12,1500))
75 UdpClient::UdpClient ()
80 m_sendEvent = EventId ();
83 UdpClient::~UdpClient ()
152 UdpClient::Send (
void)
159 p->AddHeader (seqTs);
161 std::stringstream peerAddressStringStream;
171 if ((m_socket->
Send (p)) >= 0)
174 NS_LOG_INFO (
"TraceDelay TX " << m_size <<
" bytes to "
175 << peerAddressStringStream.str () <<
" Uid: "
176 << p->GetUid () <<
" Time: "
182 NS_LOG_INFO (
"Error while sending " << m_size <<
" bytes to "
183 << peerAddressStringStream.str ());
186 if (m_sent < m_count)
static bool IsMatchingType(const Address &address)
If the Address matches the type.
#define NS_LOG_FUNCTION(parameters)
virtual int Bind6()=0
Allocate a local IPv6 endpoint for this socket.
virtual void StartApplication(void)
Application specific startup code.
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
static void Cancel(const EventId &id)
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
virtual void StopApplication(void)
Application specific shutdown code.
a polymophic address class
Ptr< Node > GetNode() const
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read.
static Ptr< Socket > CreateSocket(Ptr< Node > node, TypeId tid)
static bool IsMatchingType(const Address &address)
virtual int Connect(const Address &address)=0
Initiate a connection to a remote host.
virtual void DoDispose(void)
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
Callback< R > MakeNullCallback(void)
Describes an IPv6 address.
Ipv4 addresses are stored in host order in this class.
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
static Ipv4Address ConvertFrom(const Address &address)
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host.
virtual void DoDispose(void)
bool IsExpired(void) const
void SetRemote(Ipv4Address ip, uint16_t port)
set the remote address and port
a unique identifier for an interface.
static TypeId LookupByName(std::string name)
static Ipv6Address ConvertFrom(const Address &address)
Convert the Address object into an Ipv6Address ones.