|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
20 #define NS_LOG_APPEND_CONTEXT \
21 if (m_node) { std::clog << Simulator::Now ().As (Time::S) << " [node " << m_node->GetId () << "] "; }
24 #include "ns3/inet-socket-address.h"
30 #include "ns3/simulation-singleton.h"
31 #include "ns3/simulator.h"
32 #include "ns3/packet.h"
33 #include "ns3/uinteger.h"
34 #include "ns3/trace-source-accessor.h"
39 #include <arpa/inet.h>
40 #include <netinet/in.h>
57 .SetGroupName (
"Internet")
58 .AddTraceSource (
"CongestionWindow",
59 "The TCP connection's congestion window",
61 "ns3::TracedValueCallback::Uint32")
62 .AddTraceSource (
"SlowStartThreshold",
63 "TCP slow start threshold (bytes)",
65 "ns3::TracedValueCallback::Uint32")
66 .AddTraceSource (
"State",
69 "ns3::TcpStatesTracedValueCallback")
80 m_peerAddress (
"0.0.0.0", 0),
81 m_errno (ERROR_NOTERROR),
82 m_shutdownSend (false),
83 m_shutdownRecv (false),
86 m_closeOnEmpty (false),
88 m_lastMeasuredRtt (
Seconds (0.0))
95 m_delAckMaxCount (sock.m_delAckMaxCount),
96 m_delAckTimeout (sock.m_delAckTimeout),
97 m_noDelay (sock.m_noDelay),
101 m_remoteAddress (sock.m_remoteAddress),
102 m_remotePort (sock.m_remotePort),
103 m_localAddress (sock.m_localAddress),
104 m_localPort (sock.m_localPort),
105 m_peerAddress (sock.m_peerAddress),
106 m_errno (sock.m_errno),
107 m_shutdownSend (sock.m_shutdownSend),
108 m_shutdownRecv (sock.m_shutdownRecv),
109 m_connected (sock.m_connected),
110 m_state (sock.m_state),
111 m_closeOnEmpty (sock.m_closeOnEmpty),
112 m_txBufferSize (sock.m_txBufferSize),
113 m_segmentSize (sock.m_segmentSize),
114 m_rxWindowSize (sock.m_rxWindowSize),
115 m_advertisedWindowSize (sock.m_advertisedWindowSize),
116 m_cWnd (sock.m_cWnd),
117 m_ssThresh (sock.m_ssThresh),
118 m_initialCWnd (sock.m_initialCWnd),
119 m_initialSsThresh (sock.m_initialSsThresh),
120 m_lastMeasuredRtt (
Seconds (0.0)),
121 m_cnTimeout (sock.m_cnTimeout),
122 m_synRetries (sock.m_synRetries),
125 m_sndBufSize (sock.m_sndBufSize)
231 NS_LOG_LOGIC (
"NscTcpSocketImpl: ERROR_AFNOSUPPORT - Bind6 not supported");
312 " deferring close, state " <<
m_state);
316 NS_LOG_LOGIC (
"NscTcp socket " <<
this <<
" calling disconnect(); moving to CLOSED");
340 std::ostringstream ss;
342 std::string ipstring = ss.str ();
395 return Send (p, flags);
537 struct sockaddr_in sin;
538 size_t sin_len =
sizeof(sin);
552 sin_len =
sizeof(sin);
557 NS_LOG_LOGIC (
"NscTcpSocketImpl " <<
this <<
" accepted connection from "
571 struct sockaddr_in sin;
572 size_t sin_len =
sizeof(sin);
578 NS_LOG_LOGIC (
"NscTcpSocketImpl " <<
this <<
" connected to "
611 newSock->m_nscTcpSocket = newsock;
625 uint8_t buffer[8192];
626 len =
sizeof(buffer);
629 if (err == 0 && len == 0)
642 "during read_data, ns-3 errno set to" <<
m_errno);
667 size_t size, written = 0;
677 uint8_t *buf =
new uint8_t[size];
691 if ((
size_t)ret < size)
708 }
while ((
size_t) ret == size);
718 NS_LOG_DEBUG (
"Not notifying data sent, return value " << ret);
725 return CopyObject<NscTcpSocketImpl> (
this);
bool m_closeOnEmpty
true if socket will close when buffer is empty
a unique identifier for an interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void NotifyConnectionSucceeded(void)
Notify through the callback (if set) that the connection has been established.
@ SYN_SENT
Sent a connection request, waiting for ack
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)
Read a single packet from the socket and retrieve the sender address.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
static bool IsMatchingType(const Address &address)
uint32_t m_initialCWnd
Initial cWnd value.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
SocketErrno
Enumeration of the possible errors returned by a socket.
uint16_t GetPort(void) const
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual uint32_t GetAdvWin(void) const
Get the Advertised Window size.
virtual int getsockname(struct sockaddr *sa, size_t *salen)
Get the socket local name.
virtual int Close(void)
Close a socket.
uint32_t m_rxAvailable
receive buffer available size
Ptr< Packet > Recv(void)
Read a single packet from the socket.
uint32_t m_rcvBufSize
maximum receive socket buffer size
virtual uint32_t GetInitialSSThresh(void) const
Get the initial Slow Start Threshold.
Ipv4Address m_localAddress
local address
bool m_connected
Connection established.
uint32_t m_sndBufSize
buffer limit for the outgoing queue
virtual int Bind6(void)
Allocate a local IPv6 endpoint for this socket.
void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
virtual ~NscTcpSocketImpl()
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
virtual void disconnect()=0
Disconnect from a remote peer.
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer.
Ipv4 addresses are stored in host order in this class.
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
uint32_t m_txBufferSize
transmission buffer size
virtual void connect(const char *, int)=0
Connect to a remote peer.
virtual Time GetConnTimeout(void) const
Get the connection timeout.
Time m_persistTimeout
Time between sending 1-byte probes.
TracedValue< uint32_t > m_cWnd
Congestion window.
virtual bool is_connected()=0
Check the connection state.
static TypeId GetTypeId(void)
Get the type ID.
virtual int GetPeerName(Address &address) const
Get the peer address of a connected socket.
virtual void SetSndBufSize(uint32_t size)
Set the send buffer size.
uint32_t m_dataRetries
Count of remaining data retransmission attempts.
virtual bool is_listening()=0
Check the listening state.
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
virtual enum SocketType GetSocketType(void) const
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
virtual void SetSynRetries(uint32_t count)
Set the number of connection retries before giving up.
void ForwardUp(Ptr< Packet > p, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface)
Called by the L3 protocol when it received a packet to pass on to TCP.
virtual void SetInitialSSThresh(uint32_t threshold)
Set the initial Slow Start Threshold.
virtual void listen(int)=0
Put the socket in Listening state on a port.
virtual void SetSegSize(uint32_t size)
Set the segment size.
virtual int GetSockName(Address &address) const
Get socket address.
static Ipv4Address Deserialize(const uint8_t buf[4])
bool ReadPendingData(void)
Read all the pending data.
virtual uint32_t GetInitialCwnd(void) const
Get the initial Congestion Window.
Time m_delAckTimeout
Time to delay an ACK.
bool m_noDelay
Disable ACk delay.
uint16_t GetLocalPort(void)
Get the local port.
@ CLOSE_WAIT
Remote side has shutdown and is waiting for us to finish writing our data and to shutdown (we have to...
Ipv4Address m_remoteAddress
peer IP address
virtual int accept(INetStreamSocket **handler)=0
Accept an incoming connection.
virtual int ShutdownRecv(void)
@ ESTABLISHED
Connection established
void RemoveAtStart(uint32_t size)
Remove size bytes from the start of the current packet.
uint32_t m_initialSsThresh
Initial Slow Start Threshold.
a polymophic address class
virtual void SetRcvBufSize(uint32_t size)
Set the receive buffer size.
NscTcpSocketImpl()
Create an unbound tcp socket.
INetStreamSocket * m_nscTcpSocket
the real NSC TCP socket
virtual bool GetTcpNoDelay(void) const
Check if Nagle's algorithm is enabled or not.
virtual void SetTcpNoDelay(bool noDelay)
Enable/Disable Nagle's algorithm.
(abstract) base class of all TcpSockets
Ipv4Address GetIpv4(void) const
TracedValue< uint32_t > m_ssThresh
Slow Start Threshold.
virtual void SetDelAckMaxCount(uint32_t count)
Set the number of packet to fire an ACK before delay timeout.
virtual void SetAdvWin(uint32_t window)
Set the Advertised Window size.
std::queue< Ptr< Packet > > m_txBuffer
transmission buffer
SocketType
Enumeration of the possible socket types.
uint32_t m_delAckMaxCount
Number of packet to fire an ACK before delay timeout.
enum SocketErrno m_errno
last error number
@ LISTEN
Listening for a connection
virtual uint32_t GetTxAvailable(void) const
Returns the number of bytes which can be sent in a single call to Send.
@ CLOSED
Socket is finished
Ptr< NetDevice > GetBoundNetDevice()
Returns socket's bound NetDevice, if any.
Ipv4Address GetLocalAddress(void)
Get the local address.
nsc_errno
List of network stack errors that may happen in a simulation, and can be handled by the simulator in ...
TracedValue< TcpStates_t > m_state
state information
Simulation virtual time values and global simulation resolution.
Socket logic for the NSC TCP sockets.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)
Send data to a specified peer.
virtual uint32_t GetRcvBufSize(void) const
Get the receive buffer size.
virtual int Bind(void)
Allocate a local IPv4 endpoint for this socket.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
virtual void SetDelAckTimeout(Time timeout)
Set the time to delay an ACK.
Ptr< NscTcpSocketImpl > Copy()
Copy self.
virtual Time GetDelAckTimeout(void) const
Get the time to delay an ACK.
virtual uint32_t GetSegSize(void) const
Get the segment size.
uint16_t m_remotePort
peer port
virtual enum SocketErrno GetErrno(void) const
Get last error number.
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...
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Ptr< NscTcpL4Protocol > m_tcp
the associated TCP L4 protocol
enum Socket::SocketErrno GetNativeNs3Errno(int err) const
Translate between a NSC error and a ns-3 error code.
uint16_t m_localPort
local port
void CompleteFork(void)
Complete the Fork operations (after a connection has been accepted)
bool m_shutdownRecv
Receive no longer allowed.
void NotifyDataRecv(void)
Notify through the callback (if set) that some data have been received.
static Ipv4Address GetAny(void)
virtual int Connect(const Address &address)
Initiate a connection to a remote host.
Struct interface to NSC Stream (i.e., TCP) Sockets.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
bool SendPendingData(void)
Send all the pending data.
Time Seconds(double value)
Construct a Time in the indicated unit.
Ipv4EndPoint * m_endPoint
the IPv4 endpoint
virtual int Listen(void)
Listen for incoming connections.
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
virtual Time GetPersistTimeout(void) const
Get the timeout for persistent connection.
void ConnectionSucceeded()
Called when a connection is in Established state.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
void SetDestroyCallback(Callback< void > callback)
Set the default destroy callback.
bool m_shutdownSend
Send no longer allowed.
uint16_t GetPeerPort(void)
Get the peer port.
virtual bool SetAllowBroadcast(bool allowBroadcast)
Configure whether broadcast datagram transmissions are allowed.
virtual uint32_t GetSndBufSize(void) const
Get the send buffer size.
void NSCWakeup(void)
Called by NscTcpSocketImpl::ForwardUp()
Ptr< Node > m_node
the associated node
virtual int Send(Ptr< Packet > p, uint32_t flags)
Send data (or dummy data) to the remote host.
void SetRxCallback(Callback< void, Ptr< Packet >, Ipv4Header, uint16_t, Ptr< Ipv4Interface > > callback)
Set the reception callback.
uint32_t m_advertisedWindowSize
Window to advertise.
virtual int read_data(void *buf, int *buflen)=0
Read some data.
virtual uint32_t GetSynRetries(void) const
Get the number of connection retries before giving up.
virtual void SetInitialCwnd(uint32_t cwnd)
Set the initial Congestion Window.
virtual int send_data(const void *data, int datalen)=0
Send some data.
virtual uint32_t GetRxAvailable(void) const
Return number of bytes which can be returned from one or multiple calls to Recv.
std::queue< Ptr< Packet > > m_deliveryQueue
receive buffer
bool Accept(void)
Accept an incoming connection.
virtual uint32_t GetDelAckMaxCount(void) const
Get the number of packet to fire an ACK before delay timeout.
virtual bool GetAllowBroadcast() const
Query whether broadcast datagram transmissions are allowed.
Ipv4Address GetPeerAddress(void)
Get the peer address.
void NotifySend(uint32_t spaceAvailable)
Notify through the callback (if set) that some data have been sent.
void Destroy(void)
Kill this socket by zeroing its attributes (IPv4)
virtual int ShutdownSend(void)
void NotifyDataSent(uint32_t size)
Notify through the callback (if set) that some data have been sent.
void SetTcp(Ptr< NscTcpL4Protocol > tcp)
Set the associated TCP L4 protocol.
virtual Ptr< Node > GetNode(void) const
Return the node this socket is associated with.
void SetNode(Ptr< Node > node)
Set the associated node.
uint32_t m_segmentSize
SegmentSize.
static EventId ScheduleNow(FUNC f, Ts &&... args)
Schedule an event to expire Now.
virtual void SetDataRetries(uint32_t retries)
Set the number of data transmission retries before giving up.
InetSocketAddress m_peerAddress
peer IP and port
uint32_t m_synRetries
Count of remaining connection retries.
uint32_t m_rxWindowSize
Receive window size.
void Print(std::ostream &os) const
Print this address to the given output stream.
int FinishBind(void)
Finish the binding process.
virtual int getpeername(struct sockaddr *sa, size_t *salen)
Get the peer name.
virtual void SetConnTimeout(Time timeout)
Set the connection timeout.
virtual void SetPersistTimeout(Time timeout)
Set the timeout for persistent connection.
Time m_cnTimeout
Timeout for connection retry.
virtual uint32_t GetDataRetries(void) const
Get the number of data transmission retries before giving up.
void NotifyNewConnectionCreated(Ptr< Socket > socket, const Address &from)
Notify through the callback (if set) that a new connection has been created.