22 #include "ns3/address.h" 24 #include "ns3/nstime.h" 25 #include "ns3/socket.h" 26 #include "ns3/simulator.h" 27 #include "ns3/socket-factory.h" 28 #include "ns3/packet.h" 29 #include "ns3/uinteger.h" 30 #include "ns3/trace-source-accessor.h" 31 #include "ns3/tcp-socket-factory.h" 32 #include "ns3/boolean.h" 46 .SetGroupName(
"Applications")
48 .AddAttribute (
"SendSize",
"The amount of data to send each time.",
51 MakeUintegerChecker<uint32_t> (1))
52 .AddAttribute (
"Remote",
"The address of the destination",
56 .AddAttribute (
"Local",
57 "The Address on which to bind the socket. If not set, it is generated automatically.",
61 .AddAttribute (
"MaxBytes",
62 "The total number of bytes to send. " 63 "Once these bytes are sent, " 64 "no data is sent again. The value zero means " 65 "that there is no limit.",
68 MakeUintegerChecker<uint64_t> ())
69 .AddAttribute (
"Protocol",
"The type of protocol to use.",
73 .AddAttribute (
"EnableSeqTsSizeHeader",
74 "Add SeqTsSizeHeader to each packet",
78 .AddTraceSource (
"Tx",
"A new packet is sent",
80 "ns3::Packet::TracedCallback")
81 .AddTraceSource (
"TxWithSeqTsSize",
"A new packet is created with SeqTsSizeHeader",
83 "ns3::PacketSink::SeqTsSizeCallback")
144 NS_FATAL_ERROR (
"Using BulkSend with an incompatible socket type. " 145 "BulkSend requires SOCK_STREAM or SOCK_SEQPACKET. " 146 "In other words, use TCP instead of UDP.");
153 "Incompatible peer and local address IP version");
199 NS_LOG_WARN (
"BulkSendApplication found null socket to close in StopApplication");
240 packet->AddHeader (header);
244 packet = Create<Packet> (toSend);
248 if ((
unsigned) actual == toSend)
254 else if (actual == -1)
259 NS_LOG_DEBUG (
"Unable to send packet; caching for later attempt");
263 else if (actual > 0 && (
unsigned) actual < toSend)
268 NS_LOG_DEBUG (
"Packet size: " << packet->
GetSize () <<
"; sent: " << actual <<
"; fragment saved: " << toSend - (unsigned) actual);
278 NS_FATAL_ERROR (
"Unexpected return value from m_socket->Send ()");
292 NS_LOG_LOGIC (
"BulkSendApplication Connection succeeded");
303 NS_LOG_LOGIC (
"BulkSendApplication, Connection Failed");
Ptr< Socket > GetSocket(void) const
Get the socket this application is attached to.
void SendData(const Address &from, const Address &to)
Send data until the L4 transmission buffer is full.
virtual ~BulkSendApplication()
bool IsInvalid(void) const
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
AttributeValue implementation for Boolean.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
virtual int Bind6()=0
Allocate a local IPv6 endpoint for this socket.
TracedCallback< Ptr< const Packet >, const Address &, const Address &, const SeqTsSizeHeader & > m_txTraceWithSeqTsSize
Callback for tracing the packet Tx events, includes source, destination, the packet sent...
bool m_enableSeqTsSizeHeader
Enable or disable the SeqTsSizeHeader.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void ConnectionFailed(Ptr< Socket > socket)
Connection Failed (called by Socket through a callback)
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const
Create a new packet which contains a fragment of the original packet.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
virtual int GetSockName(Address &address) const =0
Get socket address.
virtual int ShutdownRecv(void)=0
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
virtual void DoDispose(void)
Destructor implementation.
a polymophic address class
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
virtual void StopApplication(void)
Application specific shutdown code.
Ptr< const AttributeAccessor > MakeAddressAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
The base class for all ns3 applications.
Send as much traffic as possible, trying to fill the bandwidth.
virtual void StartApplication(void)
Application specific startup code.
Hold an unsigned integer type.
AttributeValue implementation for TypeId.
void DataSend(Ptr< Socket >, uint32_t)
Send more data as soon as some has been transmitted.
static Ptr< Socket > CreateSocket(Ptr< Node > node, TypeId tid)
This method wraps the creation of sockets that is performed on a given node by a SocketFactory specif...
virtual enum Socket::SocketType GetSocketType(void) const =0
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Ptr< Node > GetNode() const
TypeId m_tid
The type of protocol to use.
static TypeId GetTypeId(void)
Get the type ID.
uint64_t m_totBytes
Total bytes sent so far.
virtual int Connect(const Address &address)=0
Initiate a connection to a remote host.
virtual void DoDispose(void)
Destructor implementation.
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< const AttributeChecker > MakeTypeIdChecker(void)
Address m_local
Local address to bind to.
static Time Now(void)
Return the current simulation virtual time.
void SetSendCallback(Callback< void, Ptr< Socket >, uint32_t > sendCb)
Notify application when space in transmit buffer is added.
Ptr< Socket > m_socket
Associated socket.
void ConnectionSucceeded(Ptr< Socket > socket)
Connection Succeeded (called by Socket through a callback)
#define NS_ABORT_IF(cond)
Abnormal program termination if a condition is true.
Ptr< const AttributeAccessor > MakeTypeIdAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
AttributeValue implementation for Address.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
void SetMaxBytes(uint64_t maxBytes)
Set the upper bound for the total number of bytes to send.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
bool m_connected
True if connected.
Address m_peer
Peer address.
static bool IsMatchingType(const Address &addr)
If the address match.
static TypeId GetTypeId(void)
Get the type ID.
virtual int GetPeerName(Address &address) const =0
Get the peer address of a connected socket.
void SetConnectCallback(Callback< void, Ptr< Socket > > connectionSucceeded, Callback< void, Ptr< Socket > > connectionFailed)
Specify callbacks to allow the caller to determine if the connection succeeds of fails.
uint32_t m_sendSize
Size of data to send each time.
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host.
virtual int Close(void)=0
Close a socket.
uint64_t m_maxBytes
Limit total number of bytes sent.
Ptr< Packet > m_unsentPacket
Variable to cache unsent packet.
TracedCallback< Ptr< const Packet > > m_txTrace
Traced Callback: sent packets.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface.
Ptr< const AttributeChecker > MakeAddressChecker(void)
TypeId SetParent(TypeId tid)
Set the parent TypeId.
static bool IsMatchingType(const Address &address)
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...