A Discrete-Event Network Simulator
API
tcp-socket-base.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007 Georgia Tech Research Corporation
4  * Copyright (c) 2010 Adrian Sai-wah Tam
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
20  */
21 #ifndef TCP_SOCKET_BASE_H
22 #define TCP_SOCKET_BASE_H
23 
24 #include <stdint.h>
25 #include <queue>
26 #include "ns3/callback.h"
27 #include "ns3/traced-value.h"
28 #include "ns3/tcp-socket.h"
29 #include "ns3/ptr.h"
30 #include "ns3/ipv4-address.h"
31 #include "ns3/ipv4-header.h"
32 #include "ns3/ipv4-interface.h"
33 #include "ns3/ipv6-header.h"
34 #include "ns3/ipv6-interface.h"
35 #include "ns3/event-id.h"
36 #include "tcp-tx-buffer.h"
37 #include "tcp-rx-buffer.h"
38 #include "rtt-estimator.h"
39 
40 namespace ns3 {
41 
42 class Ipv4EndPoint;
43 class Ipv6EndPoint;
44 class Node;
45 class Packet;
46 class TcpL4Protocol;
47 class TcpHeader;
48 
54 class RttHistory {
55 public:
62  RttHistory (SequenceNumber32 s, uint32_t c, Time t);
67  RttHistory (const RttHistory& h); // Copy constructor
68 public:
70  uint32_t count;
72  bool retx;
73 };
74 
76 typedef std::deque<RttHistory> RttHistory_t;
77 
91 class TcpSocketBase : public TcpSocket
92 {
93 public:
99  static TypeId GetTypeId (void);
103  TcpSocketBase (void);
104 
110  TcpSocketBase (const TcpSocketBase& sock);
111  virtual ~TcpSocketBase (void);
112 
113  // Set associated Node, TcpL4Protocol, RttEstimator to this socket
114 
119  virtual void SetNode (Ptr<Node> node);
120 
125  virtual void SetTcp (Ptr<TcpL4Protocol> tcp);
126 
131  virtual void SetRtt (Ptr<RttEstimator> rtt);
132 
137  void SetMinRto (Time minRto);
138 
143  Time GetMinRto (void) const;
144 
149  void SetClockGranularity (Time clockGranularity);
150 
155  Time GetClockGranularity (void) const;
156 
161  Ptr<TcpTxBuffer> GetTxBuffer (void) const;
162 
167  Ptr<TcpRxBuffer> GetRxBuffer (void) const;
168 
169 
170  // Necessary implementations of null functions from ns3::Socket
171  virtual enum SocketErrno GetErrno (void) const; // returns m_errno
172  virtual enum SocketType GetSocketType (void) const; // returns socket type
173  virtual Ptr<Node> GetNode (void) const; // returns m_node
174  virtual int Bind (void); // Bind a socket by setting up endpoint in TcpL4Protocol
175  virtual int Bind6 (void); // Bind a socket by setting up endpoint in TcpL4Protocol
176  virtual int Bind (const Address &address); // ... endpoint of specific addr or port
177  virtual int Connect (const Address &address); // Setup endpoint and call ProcessAction() to connect
178  virtual int Listen (void); // Verify the socket is in a correct state and call ProcessAction() to listen
179  virtual int Close (void); // Close by app: Kill socket upon tx buffer emptied
180  virtual int ShutdownSend (void); // Assert the m_shutdownSend flag to prevent send to network
181  virtual int ShutdownRecv (void); // Assert the m_shutdownRecv flag to prevent forward to app
182  virtual int Send (Ptr<Packet> p, uint32_t flags); // Call by app to send data to network
183  virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address &toAddress); // Same as Send(), toAddress is insignificant
184  virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags); // Return a packet to be forwarded to app
185  virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress); // ... and write the remote address at fromAddress
186  virtual uint32_t GetTxAvailable (void) const; // Available Tx buffer size
187  virtual uint32_t GetRxAvailable (void) const; // Available-to-read data size, i.e. value of m_rxAvailable
188  virtual int GetSockName (Address &address) const; // Return local addr:port in address
189  virtual void BindToNetDevice (Ptr<NetDevice> netdevice); // NetDevice with my m_endPoint
190 
191 protected:
192  // Implementing ns3::TcpSocket -- Attribute get/set
193  // inherited, no need to doc
194 
195  virtual void SetSndBufSize (uint32_t size);
196  virtual uint32_t GetSndBufSize (void) const;
197  virtual void SetRcvBufSize (uint32_t size);
198  virtual uint32_t GetRcvBufSize (void) const;
199  virtual void SetSegSize (uint32_t size);
200  virtual uint32_t GetSegSize (void) const;
201  virtual void SetInitialSSThresh (uint32_t threshold);
202  virtual uint32_t GetInitialSSThresh (void) const;
203  virtual void SetInitialCwnd (uint32_t cwnd);
204  virtual uint32_t GetInitialCwnd (void) const;
205  virtual void SetConnTimeout (Time timeout);
206  virtual Time GetConnTimeout (void) const;
207  virtual void SetConnCount (uint32_t count);
208  virtual uint32_t GetConnCount (void) const;
209  virtual void SetDelAckTimeout (Time timeout);
210  virtual Time GetDelAckTimeout (void) const;
211  virtual void SetDelAckMaxCount (uint32_t count);
212  virtual uint32_t GetDelAckMaxCount (void) const;
213  virtual void SetTcpNoDelay (bool noDelay);
214  virtual bool GetTcpNoDelay (void) const;
215  virtual void SetPersistTimeout (Time timeout);
216  virtual Time GetPersistTimeout (void) const;
217  virtual bool SetAllowBroadcast (bool allowBroadcast);
218  virtual bool GetAllowBroadcast (void) const;
219 
220 
221 
222  // Helper functions: Connection set up
223 
229  int SetupCallback (void);
230 
236  int DoConnect (void);
237 
241  void ConnectionSucceeded (void);
242 
248  int SetupEndpoint (void);
249 
255  int SetupEndpoint6 (void);
256 
269  void CompleteFork (Ptr<Packet> p, const TcpHeader& tcpHeader, const Address& fromAddress, const Address& toAddress);
270 
271 
272 
273  // Helper functions: Transfer operation
274 
283  void ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface);
284 
293  void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
294 
307  virtual void DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
308  const Address &toAddress);
309 
319  void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
320 
330  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
331 
340  bool SendPendingData (bool withAck = false);
341 
351  uint32_t SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck);
352 
358  void SendEmptyPacket (uint8_t flags);
359 
363  void SendRST (void);
364 
372  bool OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const;
373 
374 
375  // Helper functions: Connection close
376 
382  int DoClose (void);
383 
387  void CloseAndNotify (void);
388 
395  void Destroy (void);
396 
403  void Destroy6 (void);
404 
408  void DeallocateEndPoint (void);
409 
416  void PeerClose (Ptr<Packet> p, const TcpHeader& tcpHeader);
417 
421  void DoPeerClose (void);
422 
426  void CancelAllTimers (void);
427 
431  void TimeWait (void);
432 
433  // State transition functions
434 
443  void ProcessEstablished (Ptr<Packet> packet, const TcpHeader& tcpHeader); // Received a packet upon ESTABLISHED state
444 
453  void ProcessListen (Ptr<Packet> packet, const TcpHeader& tcpHeader,
454  const Address& fromAddress, const Address& toAddress);
455 
462  void ProcessSynSent (Ptr<Packet> packet, const TcpHeader& tcpHeader);
463 
472  void ProcessSynRcvd (Ptr<Packet> packet, const TcpHeader& tcpHeader,
473  const Address& fromAddress, const Address& toAddress);
474 
481  void ProcessWait (Ptr<Packet> packet, const TcpHeader& tcpHeader);
482 
489  void ProcessClosing (Ptr<Packet> packet, const TcpHeader& tcpHeader);
490 
497  void ProcessLastAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
498 
499  // Window management
500 
505  virtual uint32_t UnAckDataCount (void);
506 
511  virtual uint32_t BytesInFlight (void);
512 
517  virtual uint32_t Window (void);
518 
523  virtual uint32_t AvailableWindow (void);
524 
529  virtual uint16_t AdvertisedWindowSize (void);
530 
543  void UpdateWindowSize (const TcpHeader& header);
544 
545 
546  // Manage data tx/rx
547 
552  virtual Ptr<TcpSocketBase> Fork (void) = 0;
553 
559  virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
560 
566  virtual void ReceivedData (Ptr<Packet> packet, const TcpHeader& tcpHeader);
567 
572  virtual void EstimateRtt (const TcpHeader& tcpHeader);
573 
578  virtual void NewAck (SequenceNumber32 const& seq);
579 
585  virtual void DupAck (const TcpHeader& tcpHeader, uint32_t count) = 0;
586 
590  virtual void ReTxTimeout (void);
591 
595  virtual void Retransmit (void);
596 
600  virtual void DelAckTimeout (void);
601 
605  virtual void LastAckTimeout (void);
606 
610  virtual void PersistTimeout (void);
611 
615  virtual void DoRetransmit (void);
616 
629  virtual void ReadOptions (const TcpHeader& tcpHeader);
630 
638  virtual void AddOptions (TcpHeader& tcpHeader);
639 
648  void ProcessOptionWScale (const Ptr<const TcpOption> option);
657  void AddOptionWScale (TcpHeader& header);
658 
666  uint8_t CalculateWScale () const;
667 
677  void ProcessOptionTimestamp (const Ptr<const TcpOption> option);
686  void AddOptionTimestamp (TcpHeader& header);
687 
696  virtual void ScaleSsThresh (uint8_t scaleFactor);
697 
705  virtual void InitializeCwnd ();
706 
707 protected:
708  // Counters and events
714  uint32_t m_dupAckCount;
715  uint32_t m_delAckCount;
716  uint32_t m_delAckMaxCount;
717  bool m_noDelay;
718  uint32_t m_cnCount;
719  uint32_t m_cnRetries;
727  RttHistory_t m_history;
728 
729  // Connections to other layers of TCP/IP
736 
738 
739  // Rx and Tx buffer management
744 
745  // State-related attributes
752  bool m_connected;
753  double m_msl;
754 
755  // Window management
756  uint32_t m_segmentSize;
757  uint16_t m_maxWinSize;
761 
762  // Congestion control
765  uint32_t m_initialCWnd;
766  uint32_t m_initialSsThresh;
767 
768  // Options
772 
774  uint32_t m_timestampToEcho;
775 
777 };
778 
779 } // namespace ns3
780 
781 #endif /* TCP_SOCKET_BASE_H */
void PeerClose(Ptr< Packet > p, const TcpHeader &tcpHeader)
Received a FIN from peer, notify rx buffer.
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.
virtual int Listen(void)
Listen for incoming connections.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Introspection did not find any typical Config paths.
Definition: ipv6-header.h:33
virtual int GetSockName(Address &address) const
Get socket address.
void ProcessWait(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon CLOSE_WAIT, FIN_WAIT_1, FIN_WAIT_2.
SocketErrno
Enumeration of the possible errors returned by a socket.
Definition: socket.h:82
virtual void SetInitialSSThresh(uint32_t threshold)
Set the initial Slow Start Threshold.
virtual uint16_t AdvertisedWindowSize(void)
The amount of Rx window announced to the peer.
Callback template class.
Definition: callback.h:1164
bool m_noDelay
Set to true to disable Nagle's algorithm.
virtual uint32_t GetSegSize(void) const
Get the segment size.
Time GetClockGranularity(void) const
Get the Clock Granularity (used in RTO calcs).
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
Definition: tcp-socket.h:46
Ipv4EndPoint * m_endPoint
the IPv4 endpoint
virtual ~TcpSocketBase(void)
TracedValue< Time > m_lastRtt
Last RTT sample collected.
TracedValue< SequenceNumber32 > m_highRxAckMark
Highest ack received.
uint32_t m_initialSsThresh
Initial Slow Start Threshold value.
virtual int ShutdownRecv(void)
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.
Definition: socket.cc:175
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.
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.
static TypeId GetTypeId(void)
Get the type ID.
TracedValue< uint32_t > m_cWnd
Congestion window.
void SendRST(void)
Send reset and tear down this socket.
bool m_winScalingEnabled
Window Scale option enabled.
bool m_timestampEnabled
Timestamp option enabled.
uint16_t m_maxWinSize
Maximum window size to advertise.
bool retx
True if this has been retransmitted.
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.
Time m_cnTimeout
Timeout for connection retry.
uint32_t m_segmentSize
Segment size.
SocketType
Enumeration of the possible socket types.
Definition: socket.h:104
EventId m_lastAckEvent
Last ACK timeout event.
void ConnectionSucceeded(void)
Schedule-friendly wrapper for Socket::NotifyConnectionSucceeded()
TracedValue< SequenceNumber32 > m_nextTxSequence
Next seqnum to be sent (SND.NXT), ReTx pushes it back.
virtual void ReceivedAck(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received an ACK packet.
ns3::Time timeout
uint32_t m_cnCount
Count of remaining connection retries.
virtual Time GetPersistTimeout(void) const
Get the timout for persistent connection.
void DoPeerClose(void)
FIN is in sequence, notify app and respond with a FIN.
virtual void PersistTimeout(void)
Send 1 byte probe to get an updated window size.
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.
uint16_t port
Definition: dsdv-manet.cc:44
a polymophic address class
Definition: address.h:90
void SetMinRto(Time minRto)
Sets the Minimum RTO.
uint32_t m_cnRetries
Number of connection retries before giving up.
virtual uint32_t GetRcvBufSize(void) const
Get the receive buffer size.
uint32_t m_delAckCount
Delayed ACK counter.
virtual bool GetTcpNoDelay(void) const
Check if Nagle's algorithm is enabled or not.
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 void Retransmit(void)
Halving cwnd and call DoRetransmit()
Packet header for IPv4.
Definition: ipv4-header.h:31
virtual void ReadOptions(const TcpHeader &tcpHeader)
Read TCP options from incoming packets.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)
Send data to a specified peer.
virtual void EstimateRtt(const TcpHeader &tcpHeader)
Take into account the packet for RTT estimation.
Time time
Time this one was sent.
Ptr< TcpTxBuffer > m_txBuffer
Tx buffer.
virtual uint32_t UnAckDataCount(void)
Return count of number of unacked bytes.
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.
virtual uint32_t GetSndBufSize(void) const
Get the send buffer size.
virtual enum SocketType GetSocketType(void) const
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.
Ipv6EndPoint * m_endPoint6
the IPv6 endpoint
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
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.
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.
std::deque< RttHistory > RttHistory_t
Container for RttHistory objects.
virtual uint32_t GetConnCount(void) const
Get the number of connection retries before giving up.
enum SocketErrno m_errno
Socket error code.
A base class for implementation of a stream socket using TCP.
uint8_t m_sndScaleFactor
Sent Window Scale (i.e., the one of the node)
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.
Ptr< TcpRxBuffer > m_rxBuffer
Rx buffer (reordering buffer)
int SetupCallback(void)
Common part of the two Bind(), i.e.
virtual void SetTcp(Ptr< TcpL4Protocol > tcp)
Set the associated TCP L4 protocol.
Ptr< TcpL4Protocol > m_tcp
the associated TCP L4 protocol
void ProcessSynRcvd(Ptr< Packet > packet, const TcpHeader &tcpHeader, const Address &fromAddress, const Address &toAddress)
Received a packet upon SYN_RCVD.
virtual int ShutdownSend(void)
virtual void SetDelAckMaxCount(uint32_t count)
Set the number of packet to fire an ACK before delay timeout.
int DoConnect(void)
Perform the real connection tasks: Send SYN if allowed, RST if invalid.
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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint32_t m_dupAckCount
Dupack counter.
Ptr< Node > m_node
the associated node
virtual void ScaleSsThresh(uint8_t scaleFactor)
Scale the initial SsThresh value to the correct one.
void TimeWait(void)
Move from CLOSING or FIN_WAIT_2 to TIME_WAIT state.
Header for the Transmission Control Protocol.
Definition: tcp-header.h:44
virtual void SetNode(Ptr< Node > node)
Set the associated node.
virtual void InitializeCwnd()
Initialize congestion window.
virtual uint32_t BytesInFlight(void)
Return total bytes in flight.
void Destroy(void)
Kill this socket by zeroing its attributes (IPv4)
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.
virtual int Close(void)
Close a socket.
virtual uint32_t AvailableWindow(void)
Return unfilled portion of window.
virtual Ptr< TcpSocketBase > Fork(void)=0
Call CopyObject<> to clone me.
virtual void DupAck(const TcpHeader &tcpHeader, uint32_t count)=0
Received dupack (duplicate 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.
TracedValue< SequenceNumber32 > m_highTxMark
Highest seqno ever sent, regardless of ReTx.
Time m_minRto
minimum value of the Retransmit timeout
void SendEmptyPacket(uint8_t flags)
Send a empty packet that carries a flag, e.g.
Time m_delAckTimeout
Time to delay an 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.
virtual void SetSndBufSize(uint32_t size)
Set the send buffer size.
virtual void SetDelAckTimeout(Time timeout)
Set the time to delay an ACK.
virtual void NewAck(SequenceNumber32 const &seq)
Update buffers w.r.t.
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.
Definition: ipv6-address.h:47
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
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.
bool m_connected
Connection established.
TracedValue< Time > m_rto
Retransmit timeout.
An identifier for simulation events.
Definition: event-id.h:53
Helper class to store RTT measurements.
int DoClose(void)
Close a socket by sending RST, FIN, or FIN+ACK, depend on the current state.
virtual void SetConnCount(uint32_t count)
Set the number of connection retries before giving up.
SequenceNumber32 seq
First sequence number in packet sent.
RttHistory_t m_history
List of sent packet.
A representation of an internet IPv6 endpoint/connection.
TracedValue< uint32_t > m_ssThresh
Slow start threshold.
virtual uint32_t GetInitialCwnd(void) const
Get the initial Congestion Window.
uint32_t m_timestampToEcho
Timestamp to echo.
TracedValue< SequenceNumber32 > m_highRxMark
Highest seqno received.
virtual uint32_t Window(void)
Return the max possible number of unacked bytes.
virtual enum SocketErrno GetErrno(void) const
Get last error number.
void ProcessLastAck(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon LAST_ACK.
virtual void SetSegSize(uint32_t size)
Set the segment size.
void ProcessClosing(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon CLOSING.
virtual void ReceivedData(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Recv of a data, put into buffer, call L7 to get it if necessary.
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.
tuple address
Definition: first.py:37
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.
uint8_t m_rcvScaleFactor
Received Window Scale (i.e., the one of the peer)
bool m_shutdownRecv
Receive no longer allowed.
virtual Time GetDelAckTimeout(void) const
Get the time to delay an ACK.
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.
virtual int Bind6(void)
Allocate a local IPv6 endpoint for this socket.
void ProcessOptionTimestamp(const Ptr< const TcpOption > option)
Process the timestamp option from other side.
EventId m_delAckEvent
Delayed ACK timeout event.
a unique identifier for an interface.
Definition: type-id.h:58
bool m_shutdownSend
Send no longer allowed.
int SetupEndpoint6(void)
Configure the endpoint v6 to a local address.
uint32_t m_initialCWnd
Initial cWnd value.
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)
virtual void DoForwardUp(Ptr< Packet > packet, const Address &fromAddress, const Address &toAddress)
Called by TcpSocketBase::ForwardUp{,6}().
virtual void DoRetransmit(void)
Retransmit the oldest packet.
bool m_closeOnEmpty
Close socket upon tx buffer emptied.
void AddOptionWScale(TcpHeader &header)
Add the window scale option to the header.
A representation of an internet endpoint/connection.
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.
int SetupEndpoint(void)
Configure the endpoint to a local address.
virtual Time GetConnTimeout(void) const
Get the connection timeout.
void Destroy6(void)
Kill this socket by zeroing its attributes (IPv6)
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.