22 #define NS_LOG_APPEND_CONTEXT \
23 if (m_node) { std::clog << " [node " << m_node->GetId () << "] "; }
25 #include "ns3/abort.h"
27 #include "ns3/inet-socket-address.h"
28 #include "ns3/inet6-socket-address.h"
32 #include "ns3/ipv4-interface-address.h"
33 #include "ns3/ipv4-route.h"
34 #include "ns3/ipv6-route.h"
35 #include "ns3/ipv4-routing-protocol.h"
36 #include "ns3/ipv6-routing-protocol.h"
37 #include "ns3/simulation-singleton.h"
38 #include "ns3/simulator.h"
39 #include "ns3/packet.h"
40 #include "ns3/uinteger.h"
41 #include "ns3/double.h"
42 #include "ns3/pointer.h"
43 #include "ns3/trace-source-accessor.h"
69 .SetGroupName (
"Internet")
76 .AddAttribute (
"MaxSegLifetime",
77 "Maximum segment lifetime in seconds, use for TIME_WAIT state transition to CLOSED state",
80 MakeDoubleChecker<double> (0))
81 .AddAttribute (
"MaxWindowSize",
"Max size of advertised window",
84 MakeUintegerChecker<uint16_t> ())
85 .AddAttribute (
"IcmpCallback",
"Callback invoked whenever an icmp error is received on this socket.",
89 .AddAttribute (
"IcmpCallback6",
"Callback invoked whenever an icmpv6 error is received on this socket.",
93 .AddAttribute (
"WindowScaling",
"Enable or disable Window Scaling option",
97 .AddAttribute (
"Timestamp",
"Enable or disable Timestamp option",
101 .AddAttribute (
"MinRto",
102 "Minimum retransmit timeout value",
108 .AddAttribute (
"ClockGranularity",
109 "Clock Granularity used in RTO calculations",
114 .AddAttribute (
"TxBuffer",
118 MakePointerChecker<TcpTxBuffer> ())
119 .AddAttribute (
"RxBuffer",
123 MakePointerChecker<TcpRxBuffer> ())
124 .AddAttribute (
"ReTxThreshold",
"Threshold for fast retransmit",
127 MakeUintegerChecker<uint32_t> ())
128 .AddAttribute (
"LimitedTransmit",
"Enable limited transmit",
132 .AddTraceSource (
"RTO",
133 "Retransmission timeout",
135 "ns3::Time::TracedValueCallback")
136 .AddTraceSource (
"RTT",
139 "ns3::Time::TracedValueCallback")
140 .AddTraceSource (
"NextTxSequence",
141 "Next sequence number to send (SND.NXT)",
143 "ns3::SequenceNumber32TracedValueCallback")
144 .AddTraceSource (
"HighestSequence",
145 "Highest sequence number ever sent in socket's life time",
147 "ns3::SequenceNumber32TracedValueCallback")
148 .AddTraceSource (
"State",
151 "ns3::TcpStatesTracedValueCallback")
152 .AddTraceSource (
"CongState",
153 "TCP Congestion machine state",
155 "ns3::TcpSocketState::TcpCongStatesTracedValueCallback")
156 .AddTraceSource (
"RWND",
157 "Remote side's flow control window",
159 "ns3::TracedValueCallback::Uint32")
160 .AddTraceSource (
"BytesInFlight",
161 "Socket estimation of bytes in flight",
163 "ns3::TracedValueCallback::Uint32")
164 .AddTraceSource (
"HighestRxSequence",
165 "Highest sequence number received from peer",
167 "ns3::SequenceNumber32TracedValueCallback")
168 .AddTraceSource (
"HighestRxAck",
169 "Highest ack received from peer",
171 "ns3::SequenceNumber32TracedValueCallback")
172 .AddTraceSource (
"CongestionWindow",
173 "The TCP connection's congestion window",
175 "ns3::TracedValueCallback::Uint32")
176 .AddTraceSource (
"SlowStartThreshold",
177 "TCP slow start threshold (bytes)",
179 "ns3::TracedValueCallback::Uint32")
180 .AddTraceSource (
"Tx",
181 "Send tcp packet to IP protocol",
183 "ns3::TcpSocketBase::TcpTxRxTracedCallback")
184 .AddTraceSource (
"Rx",
185 "Receive tcp packet from IP protocol",
187 "ns3::TcpSocketBase::TcpTxRxTracedCallback")
204 .SetGroupName (
"Internet")
206 .AddTraceSource (
"CongestionWindow",
207 "The TCP connection's congestion window",
209 "ns3::TracedValue::Uint32Callback")
210 .AddTraceSource (
"SlowStartThreshold",
211 "TCP slow start threshold (bytes)",
213 "ns3::TracedValue::Uint32Callback")
214 .AddTraceSource (
"CongState",
215 "TCP Congestion machine state",
217 "ns3::TracedValue::TcpCongStatesTracedValueCallback")
218 .AddTraceSource (
"HighestSequence",
219 "Highest sequence number received from peer",
221 "ns3::SequenceNumber32TracedValueCallback")
222 .AddTraceSource (
"NextTxSequence",
223 "Next sequence number to send (SND.NXT)",
225 "ns3::SequenceNumber32TracedValueCallback")
235 m_initialSsThresh (0),
238 m_congState (CA_OPEN),
247 m_cWnd (other.m_cWnd),
248 m_ssThresh (other.m_ssThresh),
249 m_initialCWnd (other.m_initialCWnd),
250 m_initialSsThresh (other.m_initialSsThresh),
251 m_segmentSize (other.m_segmentSize),
252 m_lastAckedSeq (other.m_lastAckedSeq),
253 m_congState (other.m_congState),
254 m_highTxMark (other.m_highTxMark),
255 m_nextTxSequence (other.m_nextTxSequence)
262 "CA_OPEN",
"CA_DISORDER",
"CA_CWR",
"CA_RECOVERY",
"CA_LOSS"
274 m_delAckMaxCount (0),
282 m_clockGranularity (
Seconds (0.001)),
284 m_delAckTimeout (
Seconds (0.0)),
285 m_persistTimeout (
Seconds (0.0)),
295 m_errno (ERROR_NOTERROR),
296 m_closeNotified (false),
297 m_closeOnEmpty (false),
298 m_shutdownSend (false),
299 m_shutdownRecv (false),
307 m_bytesAckedNotProcessed (0),
309 m_winScalingEnabled (false),
312 m_timestampEnabled (true),
313 m_timestampToEcho (0),
314 m_sendPendingDataEvent (),
320 m_congestionControl (0),
321 m_isFirstPartialAck (true)
326 m_tcb = CreateObject<TcpSocketState> ();
330 ok = m_tcb->TraceConnectWithoutContext (
"CongestionWindow",
334 ok = m_tcb->TraceConnectWithoutContext (
"SlowStartThreshold",
338 ok = m_tcb->TraceConnectWithoutContext (
"CongState",
342 ok = m_tcb->TraceConnectWithoutContext (
"HighestSequence",
350 m_dupAckCount (sock.m_dupAckCount),
352 m_delAckMaxCount (sock.m_delAckMaxCount),
353 m_noDelay (sock.m_noDelay),
354 m_synCount (sock.m_synCount),
355 m_synRetries (sock.m_synRetries),
356 m_dataRetrCount (sock.m_dataRetrCount),
357 m_dataRetries (sock.m_dataRetries),
359 m_minRto (sock.m_minRto),
360 m_clockGranularity (sock.m_clockGranularity),
361 m_lastRtt (sock.m_lastRtt),
362 m_delAckTimeout (sock.m_delAckTimeout),
363 m_persistTimeout (sock.m_persistTimeout),
364 m_cnTimeout (sock.m_cnTimeout),
367 m_node (sock.m_node),
369 m_state (sock.m_state),
370 m_errno (sock.m_errno),
371 m_closeNotified (sock.m_closeNotified),
372 m_closeOnEmpty (sock.m_closeOnEmpty),
373 m_shutdownSend (sock.m_shutdownSend),
374 m_shutdownRecv (sock.m_shutdownRecv),
375 m_connected (sock.m_connected),
377 m_maxWinSize (sock.m_maxWinSize),
378 m_rWnd (sock.m_rWnd),
379 m_highRxMark (sock.m_highRxMark),
380 m_highRxAckMark (sock.m_highRxAckMark),
381 m_bytesAckedNotProcessed (sock.m_bytesAckedNotProcessed),
382 m_bytesInFlight (sock.m_bytesInFlight),
383 m_winScalingEnabled (sock.m_winScalingEnabled),
384 m_rcvWindShift (sock.m_rcvWindShift),
385 m_sndWindShift (sock.m_sndWindShift),
386 m_timestampEnabled (sock.m_timestampEnabled),
387 m_timestampToEcho (sock.m_timestampToEcho),
388 m_recover (sock.m_recover),
389 m_retxThresh (sock.m_retxThresh),
390 m_limitedTx (sock.m_limitedTx),
391 m_retransOut (sock.m_retransOut),
392 m_isFirstPartialAck (sock.m_isFirstPartialAck),
393 m_txTrace (sock.m_txTrace),
394 m_rxTrace (sock.m_rxTrace)
406 Callback<void, Ptr<Socket>, uint32_t> vPSUI = MakeNullCallback<void, Ptr<Socket>, uint32_t> ();
421 ok =
m_tcb->TraceConnectWithoutContext (
"CongestionWindow",
425 ok =
m_tcb->TraceConnectWithoutContext (
"SlowStartThreshold",
429 ok =
m_tcb->TraceConnectWithoutContext (
"CongState",
433 ok =
m_tcb->TraceConnectWithoutContext (
"HighestSequence",
521 m_tcp->AddSocket (
this);
537 m_tcp->AddSocket (
this);
607 m_tcp->AddSocket (
this);
618 "TcpSocketBase::SetSSThresh() cannot change initial ssThresh after connection started.");
620 m_tcb->m_initialSsThresh = threshold;
626 return m_tcb->m_initialSsThresh;
633 "TcpSocketBase::SetInitialCwnd() cannot change initial cwnd after connection started.");
635 m_tcb->m_initialCWnd = cwnd;
641 return m_tcb->m_initialCWnd;
669 NS_LOG_ERROR (
"Route to destination does not exist ?!");
746 NS_LOG_WARN (
"Socket " <<
this <<
" << unread rx data during close. Sending reset." <<
747 "This is probably due to a bad sink application; check its code");
813 NS_ABORT_MSG_IF (flags,
"use of flags is not supported in TcpSocketBase::Send()");
851 return Send (p, flags);
860 NS_ABORT_MSG_IF (flags,
"use of flags is not supported in TcpSocketBase::Recv()");
863 return Create<Packet> ();
876 if (packet != 0 && packet->
GetSize () != 0)
1113 return (
m_rxBuffer->NextRxSequence () != head);
1117 return (tail < m_rxBuffer->NextRxSequence () ||
m_rxBuffer->MaxRxSequence () <= head);
1159 uint8_t icmpType, uint8_t icmpCode,
1162 NS_LOG_FUNCTION (
this << icmpSource << (uint32_t)icmpTtl << (uint32_t)icmpType <<
1163 (uint32_t)icmpCode << icmpInfo);
1166 m_icmpCallback (icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo);
1172 uint8_t icmpType, uint8_t icmpCode,
1175 NS_LOG_FUNCTION (
this << icmpSource << (uint32_t)icmpTtl << (uint32_t)icmpType <<
1176 (uint32_t)icmpCode << icmpInfo);
1189 uint32_t bytesRemoved = packet->
RemoveHeader (tcpHeader);
1191 if (bytesRemoved == 0 || bytesRemoved > 60)
1193 NS_LOG_ERROR (
"Bytes removed: " << bytesRemoved <<
" invalid");
1200 " received packet of seq [" << seq <<
1201 ":" << seq + packet->
GetSize () <<
1202 ") out of range [" <<
m_rxBuffer->NextRxSequence () <<
":" <<
1261 " received packet of seq [" << seq <<
1262 ":" << seq + packet->
GetSize () <<
1263 ") without TS option. Silently discard it");
1280 NS_LOG_LOGIC (
this <<
" Enter zerowindow persist state");
1281 NS_LOG_LOGIC (
this <<
" Cancelled ReTxTimeout event which was set to expire at " <<
1345 NS_LOG_LOGIC (
this <<
" Leaving zerowindow persist state");
1376 " SND.UNA = " <<
m_txBuffer->HeadSequence ());
1386 " HighTxMark = " <<
m_tcb->m_highTxMark);
1409 else if (tcpflags == 0)
1438 uint32_t bytesAcked = ackNumber -
m_txBuffer->HeadSequence ();
1439 uint32_t segsAcked = bytesAcked /
m_tcb->m_segmentSize;
1449 " Segments acked: " << segsAcked <<
1453 " SND.UNA=" <<
m_txBuffer->HeadSequence () <<
1454 " SND.NXT=" <<
m_tcb->m_nextTxSequence);
1456 m_tcb->m_lastAckedSeq = ackNumber;
1459 && ackNumber <
m_tcb->m_nextTxSequence
1479 m_tcb->m_nextTxSequence += sz;
1500 "Reset cwnd to " <<
m_tcb->m_cWnd <<
", ssthresh to " <<
1509 m_tcb->m_nextTxSequence += sz;
1516 "Increase cwnd to " <<
m_tcb->m_cWnd);
1523 else if (ackNumber ==
m_txBuffer->HeadSequence ()
1524 && ackNumber ==
m_tcb->m_nextTxSequence)
1528 else if (ackNumber >
m_txBuffer->HeadSequence ())
1530 bool callCongestionControl =
true;
1531 bool resetRTO =
true;
1544 uint32_t newSegsAcked = segsAcked;
1596 callCongestionControl =
false;
1618 NS_LOG_INFO (
"Partial ACK for seq " << ackNumber <<
1619 " in fast recovery: cwnd set to " <<
m_tcb->m_cWnd <<
1641 NS_LOG_INFO (
"Received full ACK for seq " << ackNumber <<
1642 ". Leaving fast recovery with cwnd set to " <<
m_tcb->m_cWnd);
1658 if (callCongestionControl)
1663 " cWnd: " <<
m_tcb->m_cWnd <<
1664 " ssTh: " <<
m_tcb->m_ssThresh);
1675 NewAck (ackNumber, resetRTO);
1720 packet, tcpHeader, fromAddress, toAddress);
1763 m_tcb->m_highTxMark = ++
m_tcb->m_nextTxSequence;
1777 " received. Reset packet is sent.");
1805 m_tcb->m_highTxMark = ++
m_tcb->m_nextTxSequence;
1839 m_tcb->m_highTxMark = ++
m_tcb->m_nextTxSequence;
1859 " received. Reset packet is sent.");
1916 " received. Reset packet is sent.");
2071 NS_LOG_LOGIC (
"TCP " <<
this <<
" calling NotifyNormalClose");
2085 NS_LOG_LOGIC (
"TcpSocketBase " <<
this <<
" scheduling LATO1");
2100 m_tcp->RemoveSocket (
this);
2102 NS_LOG_LOGIC (
this <<
" Cancelled ReTxTimeout event which was set to expire at " <<
2116 m_tcp->RemoveSocket (
this);
2118 NS_LOG_LOGIC (
this <<
" Cancelled ReTxTimeout event which was set to expire at " <<
2168 NS_LOG_WARN (
"Failed to send empty packet due to null endpoint");
2180 header.SetFlags (flags);
2181 header.SetSequenceNumber (s);
2182 header.SetAckNumber (
m_rxBuffer->NextRxSequence ());
2234 header.SetWindowSize (windowSize);
2260 NS_LOG_LOGIC (
"Schedule retransmission timeout at time "
2287 m_tcp->RemoveSocket (
this);
2295 m_tcp->RemoveSocket (
this);
2306 if (ipv4->GetRoutingProtocol () == 0)
2317 route = ipv4->GetRoutingProtocol ()->RouteOutput (
Ptr<Packet> (), header, oif, errno_);
2336 if (ipv6->GetRoutingProtocol () == 0)
2347 route = ipv6->GetRoutingProtocol ()->RouteOutput (
Ptr<Packet> (), header, oif, errno_);
2384 m_tcp->AddSocket (
this);
2419 bool isRetransmission =
false;
2420 if (seq !=
m_tcb->m_highTxMark)
2422 isRetransmission =
true;
2505 if (isRetransmission)
2512 NS_LOG_LOGIC (
this <<
" SendDataPacket Schedule ReTxTimeout at time " <<
2524 NS_LOG_DEBUG (
"Send segment of size " << sz <<
" with remaining data " <<
2526 ". Header " << header);
2532 NS_LOG_DEBUG (
"Send segment of size " << sz <<
" with remaining data " <<
2534 ". Header " << header);
2540 if (seq + sz >
m_tcb->m_highTxMark)
2543 (seq + sz -
m_tcb->m_highTxMark.Get ()));
2552 bool isRetransmission)
2557 if (isRetransmission ==
false)
2591 uint32_t nPacketsSent = 0;
2596 if (w < m_tcb->m_segmentSize &&
m_txBuffer->SizeFromSequence (
m_tcb->m_nextTxSequence) >
w)
2598 NS_LOG_LOGIC (
"Preventing Silly Window Syndrome. Wait to send.");
2606 NS_LOG_LOGIC (
"Invoking Nagle's algorithm. Wait to send.");
2609 NS_LOG_LOGIC (
"TcpSocketBase " <<
this <<
" SendPendingData" <<
2612 " segsize " <<
m_tcb->m_segmentSize <<
2613 " nextTxSeq " <<
m_tcb->m_nextTxSequence <<
2614 " highestRxAck " <<
m_txBuffer->HeadSequence () <<
2616 " pd->SFS " <<
m_txBuffer->SizeFromSequence (
m_tcb->m_nextTxSequence));
2619 " cWnd: " <<
m_tcb->m_cWnd <<
2625 m_tcb->m_nextTxSequence += sz;
2627 if (nPacketsSent > 0)
2629 NS_LOG_DEBUG (
"SendPendingData sent " << nPacketsSent <<
" segments");
2631 return (nPacketsSent > 0);
2651 uint32_t flightSize =
m_tcb->m_nextTxSequence.Get () -
m_txBuffer->HeadSequence ();
2652 uint32_t duplicatedSize;
2653 uint32_t bytesInFlight;
2658 bytesInFlight = flightSize + duplicatedSize;
2663 bytesInFlight = duplicatedSize > flightSize ? 0 : flightSize - duplicatedSize;
2673 return bytesInFlight;
2688 uint32_t win =
Window ();
2690 NS_LOG_DEBUG (
"UnAckCount=" << unack <<
", Win=" << win);
2691 return (win < unack) ? 0 : (win - unack);
2707 NS_LOG_WARN (
"Adv window size truncated to " <<
m_maxWinSize <<
"; possibly to avoid overflow of the 16-bit integer");
2709 NS_LOG_DEBUG (
"Returning AdvertisedWindowSize of " << static_cast<uint16_t> (w));
2710 return static_cast<uint16_t
> (
w);
2719 " pkt size=" << p->
GetSize () );
2750 if (expectedSeq < m_rxBuffer->NextRxSequence ())
2759 NS_LOG_WARN (
"Why TCP " <<
this <<
" got data after close notification?");
2817 m_rtt->Measurement (m);
2835 NS_LOG_LOGIC (
this <<
" Cancelled ReTxTimeout event which was set to expire at " <<
2842 NS_LOG_LOGIC (
this <<
" Schedule ReTxTimeout at time " <<
2850 " numberAck " << (ack -
m_txBuffer->HeadSequence ()));
2856 if (ack >
m_tcb->m_nextTxSequence)
2858 m_tcb->m_nextTxSequence = ack;
2862 NS_LOG_LOGIC (
this <<
" Cancelled ReTxTimeout event which was set to expire at " <<
2880 if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >=
m_tcb->m_highTxMark)
2965 if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >=
m_tcb->m_highTxMark)
3013 m_tcb->m_ssThresh <<
", restart from seqnum " <<
m_tcb->m_nextTxSequence);
3037 NS_LOG_INFO (
"No more data retries available. Dropping connection");
3133 m_tcb->m_segmentSize = size;
3141 return m_tcb->m_segmentSize;
3240 return (!allowBroadcast);
3271 if (m_sndWindShift > 14)
3273 NS_LOG_WARN (
"Possible error; m_sndWindShift exceeds 14: " << m_sndWindShift);
3274 m_sndWindShift = 14;
3285 uint32_t maxSpace =
m_rxBuffer->MaxBufferSize ();
3290 maxSpace = maxSpace >> 1;
3296 NS_LOG_WARN (
"Possible error; scale exceeds 14: " << scale);
3301 static_cast<int> (scale) <<
" for buffer size " <<
m_rxBuffer->MaxBufferSize ());
3317 option->SetScale (m_rcvWindShift);
3364 NS_LOG_INFO (
"Received (scaled) window is " << receivedWindow <<
" bytes");
3378 bool update =
false;
3482 return CopyObject<TcpSocketBase> (
this);
TracedCallback< SequenceNumber32, SequenceNumber32 > m_highTxMarkTrace
Callback pointer for high tx mark chaining.
void SetCongestionControlAlgorithm(Ptr< TcpCongestionOps > algo)
Install a congestion control algorithm on this socket.
static Time GetDelayLeft(const EventId &id)
Get the remaining time until this event will execute.
Ipv6Address GetLocalAddress()
Get the local address.
void PeerClose(Ptr< Packet > p, const TcpHeader &tcpHeader)
Received a FIN from peer, notify rx buffer.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
TracedValue< uint32_t > m_bytesInFlight
Bytes in flight.
Custom version of log2() to deal with Bug 1467.
void SetTclass(uint8_t tclass)
Set the tag's Tclass.
bool m_limitedTx
perform limited transmit
void ProcessListen(Ptr< Packet > packet, const TcpHeader &tcpHeader, const Address &fromAddress, const Address &toAddress)
Received a packet upon LISTEN state.
virtual void SetInitialCwnd(uint32_t cwnd)
Set the initial Congestion Window.
Ipv6Address GetIpv6(void) const
Get the IPv6 address.
virtual int Listen(void)
Listen for incoming connections.
Simulation virtual time values and global simulation resolution.
bool IsManualIpTtl(void) const
Checks if the socket has a specific IPv4 TTL set.
virtual int GetSockName(Address &address) const
Get socket address.
Ipv4Address GetIpv4(void) const
static Ipv4Address GetAny(void)
virtual uint32_t Window(void) const
Return the max possible number of unacked bytes.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
void ProcessWait(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon CLOSE_WAIT, FIN_WAIT_1, FIN_WAIT_2.
Normal state, no dubious events.
uint32_t m_dataRetries
Number of data retransmission attempts.
virtual void SetInitialSSThresh(uint32_t threshold)
Set the initial Slow Start Threshold.
AttributeValue implementation for Boolean.
virtual uint8_t GetIpTtl(void) const
Query the value of IP Time to Live field of this socket.
bool m_noDelay
Set to true to disable Nagle's algorithm.
virtual uint32_t GetSegSize(void) const
Get the segment size.
CWND was reduced, we are fast-retransmitting.
In all the respects it is "Open", but requires a bit more attention.
Time GetClockGranularity(void) const
Get the Clock Granularity (used in RTO calcs).
uint8_t GetIpTos(void) const
Query the value of IP Type of Service of this socket.
This class implements a tag that carries the socket-specific HOPLIMIT of a packet to the IPv6 layer...
uint32_t SendDataPacket(SequenceNumber32 seq, uint32_t maxSize, bool withAck)
Extract at most maxSize bytes from the TxBuffer at sequence seq, add the TCP header, and send to TcpL4Protocol.
(abstract) base class of all TcpSockets
Ipv4EndPoint * m_endPoint
the IPv4 endpoint
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
static Time ElapsedTimeFromTsValue(uint32_t echoTime)
Estimate the Time elapsed from a TS echo value.
virtual ~TcpSocketBase(void)
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
uint32_t m_dataRetrCount
Count of remaining data retransmission attempts.
TracedValue< Time > m_lastRtt
Last RTT sample collected.
uint32_t m_synRetries
Number of connection attempts.
void NotifyDataRecv(void)
Notify through the callback (if set) that some data have been received.
TracedValue< SequenceNumber32 > m_highRxAckMark
Highest ack received.
virtual int ShutdownRecv(void)
void SetRxCallback(Callback< void, Ptr< Packet >, Ipv4Header, uint16_t, Ptr< Ipv4Interface > > callback)
Set the reception callback.
TcpSocketBase(void)
Create an unbound TCP socket.
void SetClockGranularity(Time clockGranularity)
Sets the Clock Granularity (used in RTO calcs).
EventId m_retxEvent
Retransmission event.
Ptr< Packet > Recv(void)
Read a single packet from the socket.
IPv6 layer implementation.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void SetDestroyCallback(Callback< void > callback)
Set the default destroy callback.
void ForwardUp6(Ptr< Packet > packet, Ipv6Header header, uint16_t port, Ptr< Ipv6Interface > incomingInterface)
Called by the L3 protocol when it received a packet to pass on to TCP.
void AddPacketTag(const Tag &tag) const
Add a packet tag.
virtual void SetPersistTimeout(Time timeout)
Set the timout for persistent connection.
virtual int Send(Ptr< Packet > p, uint32_t flags)
Send data (or dummy data) to the remote host.
virtual bool GetAllowBroadcast(void) const
Query whether broadcast datagram transmissions are allowed.
EventId m_timewaitEvent
TIME_WAIT expiration event: Move this socket to CLOSED state.
void NotifyConnectionFailed(void)
Notify through the callback (if set) that the connection has not been established due to an error...
static const char *const TcpCongStateName[TcpSocketState::CA_LAST_STATE]
Literal names of TCP states for use in log messages.
static TypeId GetTypeId(void)
Get the type ID.
void ProcessOptionTimestamp(const Ptr< const TcpOption > option, const SequenceNumber32 &seq)
Process the timestamp option from other side.
Both sides have shutdown but we still have data we have to finish sending.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
void UpdateHighTxMark(SequenceNumber32 oldValue, SequenceNumber32 newValue)
Callback function to hook to TcpSocketState high tx mark.
void SendRST(void)
Send reset and tear down this socket.
static Ipv6Address GetAny()
Get the "any" (::) Ipv6Address.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Ptr< TcpSocketState > m_tcb
Congestion control informations.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
bool m_winScalingEnabled
Window Scale option enabled (RFC 7323)
bool m_timestampEnabled
Timestamp option enabled.
uint16_t m_maxWinSize
Maximum window size to advertise.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
bool retx
True if this has been retransmitted.
virtual void NewAck(SequenceNumber32 const &seq, bool resetRTO)
Update buffers w.r.t.
bool IsManualIpTos(void) const
Checks if the socket has a specific IPv4 ToS set.
Callback< void, Ipv4Address, uint8_t, uint8_t, uint8_t, uint32_t > m_icmpCallback
ICMP callback.
void CancelAllTimers(void)
Cancel all timer when endpoint is deleted.
uint32_t count
Number of bytes sent.
void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
virtual uint8_t GetIpv6HopLimit(void) const
Query the value of IP Hop Limit field of this socket.
Time m_cnTimeout
Timeout for connection retry.
Data structure that records the congestion state of a connection.
bool IsRunning(void) const
This method is syntactic sugar for !IsExpired().
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
EventId m_lastAckEvent
Last ACK timeout event.
void ConnectionSucceeded(void)
Schedule-friendly wrapper for Socket::NotifyConnectionSucceeded()
All buffered data sent, waiting for remote to shutdown.
void SetTos(uint8_t tos)
Set the tag's TOS.
virtual void ReceivedAck(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received an ACK packet.
T Get(void) const
Get the underlying value.
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
virtual uint32_t GetDataRetries(void) const
Get the number of data transmission retries before giving up.
virtual Time GetPersistTimeout(void) const
Get the timout for persistent connection.
SocketErrno
Enumeration of the possible errors returned by a socket.
void DoPeerClose(void)
FIN is in sequence, notify app and respond with a FIN.
bool NotifyConnectionRequest(const Address &from)
Notify through the callback (if set) that an incoming connection is being requested by a remote host...
virtual void PersistTimeout(void)
Send 1 byte probe to get an updated window size.
virtual void SetSynRetries(uint32_t count)
Set the number of connection retries before giving up.
Ptr< TcpTxBuffer > GetTxBuffer(void) const
Get a pointer to the Tx buffer.
TracedValue< TcpStates_t > m_state
TCP state.
uint32_t m_delAckMaxCount
Number of packet to fire an ACK before delay timeout.
uint8_t CalculateWScale() const
Calculate window scale value based on receive buffer space.
a polymophic address class
void SetMinRto(Time minRto)
Sets the Minimum RTO.
void SetDestroyCallback(Callback< void > callback)
Set the default destroy callback.
uint16_t GetPeerPort()
Get the peer port.
AttributeValue implementation for Callback.
virtual uint32_t GetRcvBufSize(void) const
Get the receive buffer size.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
uint32_t m_delAckCount
Delayed ACK counter.
virtual bool GetTcpNoDelay(void) const
Check if Nagle's algorithm is enabled or not.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
SequenceNumber32 m_recover
Previous highest Tx seqnum for fast recovery.
void ForwardIcmp6(Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo)
Called by the L3 protocol when it received an ICMPv6 packet to pass on to TCP.
virtual int Bind(void)
Allocate a local IPv4 endpoint for this socket.
virtual int GetPeerName(Address &address) const
Get the peer address of a connected socket.
virtual void Retransmit(void)
Halving cwnd and call DoRetransmit()
void SetLocalAddress(Ipv6Address addr)
Set the local address.
virtual void SetDataRetries(uint32_t retries)
Set the number of data transmission retries before giving up.
Ptr< TcpCongestionOps > m_congestionControl
Congestion control.
static const char *const TcpStateName[TcpSocket::LAST_STATE]
Literal names of TCP states for use in log messages.
int64x64_t Min(const int64x64_t &a, const int64x64_t &b)
Minimum.
void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)
Send data to a specified peer.
void UpdateCwnd(uint32_t oldValue, uint32_t newValue)
Callback function to hook to TcpSocketState congestion window.
virtual void EstimateRtt(const TcpHeader &tcpHeader)
Take into account the packet for RTT estimation.
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static EventId Schedule(Time const &delay, MEM mem_ptr, OBJ obj)
Schedule an event to expire after delay.
Time time
Time this one was sent.
virtual void UpdateRttHistory(const SequenceNumber32 &seq, uint32_t sz, bool isRetransmission)
Update the RTT history, when we send TCP segments.
Ptr< TcpTxBuffer > m_txBuffer
Tx buffer.
void ForwardUp(Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface)
Called by the L3 protocol when it received a packet to pass on to TCP.
void SetTtl(uint8_t ttl)
Set the tag's TTL.
AttributeValue implementation for Time.
virtual uint32_t GetSndBufSize(void) const
Get the send buffer size.
virtual enum SocketType GetSocketType(void) const
uint16_t GetLocalPort()
Get the local port.
virtual uint16_t AdvertisedWindowSize(bool scale=true) const
The amount of Rx window announced to the peer.
void UpdateWindowSize(const TcpHeader &header)
Update the receiver window (RWND) based on the value of the window field in the header.
void AddOptionTimestamp(TcpHeader &header)
Add the timestamp option to the header.
Hold an unsigned integer type.
SequenceNumber32 m_highTxAck
Highest ack sent.
TracedCallback< uint32_t, uint32_t > m_cWndTrace
Callback pointer for cWnd trace chaining.
Ipv6EndPoint * m_endPoint6
the IPv6 endpoint
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
virtual uint32_t GetSynRetries(void) const
Get the number of connection retries before giving up.
bool OutOfRange(SequenceNumber32 head, SequenceNumber32 tail) const
Check if a sequence number range is within the rx window.
virtual bool SetAllowBroadcast(bool allowBroadcast)
Configure whether broadcast datagram transmissions are allowed.
Ptr< const AttributeAccessor > MakeCallbackAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Ipv4Address GetLocalAddress(void)
Get the local address.
int64x64_t Max(const int64x64_t &a, const int64x64_t &b)
Maximum.
virtual void SetTcpNoDelay(bool noDelay)
Enable/Disable Nagle's algorithm.
RttHistory(SequenceNumber32 s, uint32_t c, Time t)
Constructor - builds an RttHistory with the given parameters.
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void UpdateCongState(TcpSocketState::TcpCongState_t oldValue, TcpSocketState::TcpCongState_t newValue)
Callback function to hook to TcpSocketState congestion state.
bool IsManualIpv6Tclass(void) const
Checks if the socket has a specific IPv6 Tclass set.
void NotifyDataSent(uint32_t size)
Notify through the callback (if set) that some data have been sent.
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read.
enum SocketErrno m_errno
Socket error code.
Ipv4Address GetSource(void) const
friend Ptr< T > CopyObject(Ptr< T > object)
Copy an Object.
A base class for implementation of a stream socket using TCP.
Ptr< RttEstimator > m_rtt
Round trip time estimator.
bool m_closeNotified
Told app to close socket.
void ProcessSynSent(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon SYN_SENT.
static uint32_t SafeSubtraction(uint32_t a, uint32_t b)
Performs a safe subtraction between a and b (a-b)
Ptr< TcpRxBuffer > m_rxBuffer
Rx buffer (reordering buffer)
int SetupCallback(void)
Common part of the two Bind(), i.e.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
virtual void SetTcp(Ptr< TcpL4Protocol > tcp)
Set the associated TCP L4 protocol.
bool m_isFirstPartialAck
First partial ACK during RECOVERY.
Ptr< TcpL4Protocol > m_tcp
the associated TCP L4 protocol
void SetHopLimit(uint8_t hopLimit)
Set the tag's Hop Limit.
TracedValue< uint32_t > m_ssThresh
Slow start threshold.
void ProcessSynRcvd(Ptr< Packet > packet, const TcpHeader &tcpHeader, const Address &fromAddress, const Address &toAddress)
Received a packet upon SYN_RCVD.
virtual int ShutdownSend(void)
void NotifyConnectionSucceeded(void)
Notify through the callback (if set) that the connection has been established.
uint32_t m_retxThresh
Fast Retransmit threshold.
Access to the Ipv4 forwarding table, interfaces, and configuration.
TcpCongState_t
Definition of the Congestion state machine.
bool IsManualIpv6HopLimit(void) const
Checks if the socket has a specific IPv6 Hop Limit set.
virtual void SetDelAckMaxCount(uint32_t count)
Set the number of packet to fire an ACK before delay timeout.
void NotifyNormalClose(void)
Notify through the callback (if set) that the connection has been closed.
int DoConnect(void)
Perform the real connection tasks: Send SYN if allowed, RST if invalid.
virtual void CompleteFork(Ptr< Packet > p, const TcpHeader &tcpHeader, const Address &fromAddress, const Address &toAddress)
Complete a connection by forking the socket.
virtual void AddOptions(TcpHeader &tcpHeader)
Add options to TcpHeader.
void UpdateNextTxSequence(SequenceNumber32 oldValue, SequenceNumber32 newValue)
Callback function to hook to TcpSocketState next tx sequence.
uint32_t m_dupAckCount
Dupack counter.
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address.
Used only in debug messages.
Ptr< Node > m_node
the associated node
Hold objects of type Ptr<T>.
void NotifyNewConnectionCreated(Ptr< Socket > socket, const Address &from)
Notify through the callback (if set) that a new connection has been created.
TracedValue< TcpCongState_t > m_congState
State in the Congestion state machine.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
void TimeWait(void)
Move from CLOSING or FIN_WAIT_2 to TIME_WAIT state.
virtual void SetNode(Ptr< Node > node)
Set the associated node.
void SetIcmpCallback(Callback< void, Ipv6Address, uint8_t, uint8_t, uint8_t, uint32_t > callback)
Set the ICMP callback.
virtual uint32_t UnAckDataCount(void) const
Return count of number of unacked bytes.
virtual uint32_t BytesInFlight(void)
Return total bytes in flight.
indicates whether the socket has IPV6_TCLASS set.
uint8_t GetIpv6Tclass(void) const
Query the value of IPv6 Traffic Class field of this socket.
void Destroy(void)
Kill this socket by zeroing its attributes (IPv4)
Timeout to catch resent junk before entering closed, can only be entered from FIN_WAIT2 or CLOSING...
static TypeId GetTypeId(void)
Get the type ID.
virtual uint32_t GetInitialSSThresh(void) const
Get the initial Slow Start Threshold.
virtual int Connect(const Address &address)
Initiate a connection to a remote host.
Time TimeStep(uint64_t ts)
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
virtual int Close(void)
Close a socket.
static Ipv4Address GetZero(void)
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Our side has shutdown after remote has shutdown.
void SetPeer(Ipv4Address address, uint16_t port)
Set the peer informations (address and port).
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.
Remote side has shutdown and is waiting for us to finish writing our data and to shutdown (we have to...
Sent a connection request, waiting for ack.
virtual void SetRtt(Ptr< RttEstimator > rtt)
Set the associated RTT estimator.
double m_msl
Max segment lifetime.
virtual void ReTxTimeout(void)
Call Retransmit() upon RTO event.
Ptr< const AttributeChecker > MakeCallbackChecker(void)
static uint32_t NowToTsValue()
Return an uint32_t value which represent "now".
Time m_minRto
minimum value of the Retransmit timeout
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
virtual void SendEmptyPacket(uint8_t flags)
Send a empty packet that carries a flag, e.g.
Time m_delAckTimeout
Time to delay an ACK.
TracedValue< uint32_t > m_cWnd
Congestion window.
void SetDataSentCallback(Callback< void, Ptr< Socket >, uint32_t > dataSent)
Notify application when a packet has been sent from transport protocol (non-standard socket call) ...
Listening for a connection.
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_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void SetLocalAddress(Ipv4Address address)
Set the local address.
virtual void SetSndBufSize(uint32_t size)
Set the send buffer size.
virtual TypeId GetInstanceTypeId() const
Get the instance TypeId.
static Time FromDouble(double value, enum Unit unit)
Create a Time equal to value in unit unit.
virtual void SetDelAckTimeout(Time timeout)
Set the time to delay an ACK.
void DeallocateEndPoint(void)
Deallocate m_endPoint and m_endPoint6.
Ptr< TcpRxBuffer > GetRxBuffer(void) const
Get a pointer to the Rx buffer.
Describes an IPv6 address.
Ipv4 addresses are stored in host order in this class.
Time GetMinRto(void) const
Get the Minimum RTO.
void ProcessEstablished(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon ESTABLISHED state.
void ProcessOptionWScale(const Ptr< const TcpOption > option)
Read and parse the Window scale option.
Ptr< NetDevice > m_boundnetdevice
the device this socket is bound to (might be null).
bool m_connected
Connection established.
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
uint32_t GetId(void) const
TracedValue< Time > m_rto
Retransmit timeout.
Helper class to store RTT measurements.
uint16_t GetLocalPort(void)
Get the local port.
uint8_t m_rcvWindShift
Window shift to apply to outgoing segments.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Ipv6Address GetPeerAddress()
Get the peer address.
int DoClose(void)
Close a socket by sending RST, FIN, or FIN+ACK, depend on the current state.
SequenceNumber32 seq
First sequence number in packet sent.
Our side has shutdown, waiting to complete transmission of remaining buffered data.
CWND was reduced due to RTO timeout or SACK reneging.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
RttHistory_t m_history
List of sent packet.
Time Seconds(double value)
Construct a Time in the indicated unit.
static Inet6SocketAddress ConvertFrom(const Address &addr)
Convert the address to a InetSocketAddress.
virtual uint32_t GetInitialCwnd(void) const
Get the initial Congestion Window.
Ipv4Address GetPeerAddress(void)
Get the peer address.
uint32_t m_timestampToEcho
Timestamp to echo.
uint32_t m_synCount
Count of remaining connection retries.
void SetRxCallback(Callback< void, Ptr< Packet >, Ipv6Header, uint16_t, Ptr< Ipv6Interface > > callback)
Set the reception callback.
static bool IsMatchingType(const Address &addr)
If the address match.
uint16_t GetPeerPort(void)
Get the peer port.
TracedValue< SequenceNumber32 > m_highRxMark
Highest seqno received.
uint16_t GetPort(void) const
Get the port.
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method.
virtual enum SocketErrno GetErrno(void) const
Get last error number.
TracedValue< SequenceNumber32 > m_highTxMark
Highest seqno ever sent, regardless of ReTx.
void ProcessLastAck(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon LAST_ACK.
Ipv4Address GetIpv4MappedAddress() const
Return the Ipv4 address.
void UpdateSsThresh(uint32_t oldValue, uint32_t newValue)
Callback function to hook to TcpSocketState slow start threshold.
virtual void SetSegSize(uint32_t size)
Set the segment size.
void ProcessClosing(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon CLOSING.
Received a connection request, sent ack, waiting for final ack in three-way handshake.
#define NS_LOG_ERROR(msg)
Use NS_LOG to output a message of level LOG_ERROR.
uint16_t GetPort(void) const
virtual void ReceivedData(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Recv of a data, put into buffer, call L7 to get it if necessary.
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.
void CloseAndNotify(void)
Peacefully close the socket by notifying the upper layer and deallocate end point.
Callback< void, Ipv6Address, uint8_t, uint8_t, uint8_t, uint32_t > m_icmpCallback6
ICMPv6 callback.
A base class which provides memory management and object aggregation.
virtual Ptr< Node > GetNode(void) const
Return the node this socket is associated with.
virtual void SetRcvBufSize(uint32_t size)
Set the receive buffer size.
bool m_shutdownRecv
Receive no longer allowed.
uint32_t m_retransOut
Number of retransmission in this window.
virtual Time GetDelAckTimeout(void) const
Get the time to delay an ACK.
TracedCallback< uint32_t, uint32_t > m_ssThTrace
Callback pointer for ssTh trace chaining.
EventId m_sendPendingDataEvent
micro-delay event to send pending data
virtual void DelAckTimeout(void)
Action upon delay ACK timeout, i.e.
virtual void LastAckTimeout(void)
Timeout at LAST_ACK, close the connection.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
uint32_t m_bytesAckedNotProcessed
Bytes acked, but not processed.
virtual int Bind6(void)
Allocate a local IPv6 endpoint for this socket.
TracedCallback< SequenceNumber32, SequenceNumber32 > m_nextTxSequenceTrace
Callback pointer for next tx sequence chaining.
indicates whether the socket has IP_TOS set.
bool IsExpired(void) const
This method is syntactic sugar for the ns3::Simulator::IsExpired method.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void SetIcmpCallback(Callback< void, Ipv4Address, uint8_t, uint8_t, uint8_t, uint32_t > callback)
Set the ICMP callback.
SocketType
Enumeration of the possible socket types.
bool IsIpv4MappedAddress() const
If the address is an IPv4-mapped address.
EventId m_delAckEvent
Delayed ACK timeout event.
a unique identifier for an interface.
uint8_t m_sndWindShift
Window shift to apply to incoming segments.
bool m_shutdownSend
Send no longer allowed.
virtual Ptr< TcpSocketBase > Fork(void)
Call CopyObject<> to clone me.
int SetupEndpoint6(void)
Configure the endpoint v6 to a local address.
void NotifySend(uint32_t spaceAvailable)
Notify through the callback (if set) that some data have been sent.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Time m_clockGranularity
Clock Granularity used in RTO calcs.
bool SendPendingData(bool withAck=false)
Send as much pending data as possible according to the Tx window.
void ForwardIcmp(Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo)
Called by the L3 protocol when it received an ICMP packet to pass on to TCP.
TracedValue< uint32_t > m_rWnd
Receiver window (RCV.WND in RFC793)
TracedCallback< Ptr< const Packet >, const TcpHeader &, Ptr< const TcpSocketBase > > m_rxTrace
Trace of received packets.
virtual void DoForwardUp(Ptr< Packet > packet, const Address &fromAddress, const Address &toAddress)
Called by TcpSocketBase::ForwardUp{,6}().
static bool IsMatchingType(const Address &address)
void NotifyErrorClose(void)
Notify through the callback (if set) that the connection has been closed due to an error...
SequenceNumber< uint32_t, int32_t > SequenceNumber32
32 bit Sequence number.
virtual void DoRetransmit(void)
Retransmit the oldest packet.
bool m_closeOnEmpty
Close socket upon tx buffer emptied.
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
TracedCallback< Ptr< const Packet >, const TcpHeader &, Ptr< const TcpSocketBase > > m_txTrace
Trace of transmitted packets.
void AddOptionWScale(TcpHeader &header)
Add the window scale option to the header.
virtual uint32_t GetDelAckMaxCount(void) const
Get the number of packet to fire an ACK before delay timeout.
virtual void SetConnTimeout(Time timeout)
Set the connection timeout.
EventId m_persistEvent
Persist event: Send 1 byte to probe for a non-zero Rx window.
void SetPeer(Ipv6Address addr, uint16_t port)
Set the peer informations (address and port).
int SetupEndpoint(void)
Configure the endpoint to a local address.
virtual Time GetConnTimeout(void) const
Get the connection timeout.
TracedCallback< TcpSocketState::TcpCongState_t, TcpSocketState::TcpCongState_t > m_congStateTrace
Callback pointer for congestion state trace chaining.
void Destroy6(void)
Kill this socket by zeroing its attributes (IPv6)
TracedValue< SequenceNumber32 > m_nextTxSequence
Next seqnum to be sent (SND.NXT), ReTx pushes it back.
virtual uint32_t AvailableWindow(void) const
Return unfilled portion of window.
Time m_persistTimeout
Time between sending 1-byte probes.
virtual uint32_t GetTxAvailable(void) const
Returns the number of bytes which can be sent in a single call to Send.
virtual uint32_t GetRxAvailable(void) const
Return number of bytes which can be returned from one or multiple calls to Recv.