This documentation is not the Latest Release.
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 #include "tcp-congestion-ops.h"
40 
41 namespace ns3 {
42 
43 class Ipv4EndPoint;
44 class Ipv6EndPoint;
45 class Node;
46 class Packet;
47 class TcpL4Protocol;
48 class TcpHeader;
49 
55 class RttHistory {
56 public:
63  RttHistory (SequenceNumber32 s, uint32_t c, Time t);
68  RttHistory (const RttHistory& h); // Copy constructor
69 public:
71  uint32_t count;
73  bool retx;
74 };
75 
77 typedef std::deque<RttHistory> RttHistory_t;
78 
91 class TcpSocketState : public Object
92 {
93 public:
99  static TypeId GetTypeId (void);
100 
101  TcpSocketState ();
102  TcpSocketState (const TcpSocketState &other);
103 
118  typedef enum
119  {
130  } TcpCongState_t;
131 
139  typedef void (* TcpCongStatesTracedValueCallback)(const TcpCongState_t oldValue,
140  const TcpCongState_t newValue);
141 
146 
147  // Congestion control
150  uint32_t m_initialCWnd;
151  uint32_t m_initialSsThresh;
152 
153  // Segment
154  uint32_t m_segmentSize;
155 
157 
163  uint32_t GetCwndInSegments () const { return m_cWnd / m_segmentSize; }
164 };
165 
238 class TcpSocketBase : public TcpSocket
239 {
240 public:
246  static TypeId GetTypeId (void);
247 
248  friend class TcpGeneralTest;
249 
253  TcpSocketBase (void);
254 
260  TcpSocketBase (const TcpSocketBase& sock);
261  virtual ~TcpSocketBase (void);
262 
263  // Set associated Node, TcpL4Protocol, RttEstimator to this socket
264 
269  virtual void SetNode (Ptr<Node> node);
270 
275  virtual void SetTcp (Ptr<TcpL4Protocol> tcp);
276 
281  virtual void SetRtt (Ptr<RttEstimator> rtt);
282 
287  void SetMinRto (Time minRto);
288 
293  Time GetMinRto (void) const;
294 
299  void SetClockGranularity (Time clockGranularity);
300 
305  Time GetClockGranularity (void) const;
306 
311  Ptr<TcpTxBuffer> GetTxBuffer (void) const;
312 
317  Ptr<TcpRxBuffer> GetRxBuffer (void) const;
318 
323 
328 
333 
339  void UpdateCwnd (uint32_t oldValue, uint32_t newValue);
340 
346  void UpdateSsThresh (uint32_t oldValue, uint32_t newValue);
347 
355 
362 
363  // Necessary implementations of null functions from ns3::Socket
364  virtual enum SocketErrno GetErrno (void) const; // returns m_errno
365  virtual enum SocketType GetSocketType (void) const; // returns socket type
366  virtual Ptr<Node> GetNode (void) const; // returns m_node
367  virtual int Bind (void); // Bind a socket by setting up endpoint in TcpL4Protocol
368  virtual int Bind6 (void); // Bind a socket by setting up endpoint in TcpL4Protocol
369  virtual int Bind (const Address &address); // ... endpoint of specific addr or port
370  virtual int Connect (const Address &address); // Setup endpoint and call ProcessAction() to connect
371  virtual int Listen (void); // Verify the socket is in a correct state and call ProcessAction() to listen
372  virtual int Close (void); // Close by app: Kill socket upon tx buffer emptied
373  virtual int ShutdownSend (void); // Assert the m_shutdownSend flag to prevent send to network
374  virtual int ShutdownRecv (void); // Assert the m_shutdownRecv flag to prevent forward to app
375  virtual int Send (Ptr<Packet> p, uint32_t flags); // Call by app to send data to network
376  virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address &toAddress); // Same as Send(), toAddress is insignificant
377  virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags); // Return a packet to be forwarded to app
378  virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress); // ... and write the remote address at fromAddress
379  virtual uint32_t GetTxAvailable (void) const; // Available Tx buffer size
380  virtual uint32_t GetRxAvailable (void) const; // Available-to-read data size, i.e. value of m_rxAvailable
381  virtual int GetSockName (Address &address) const; // Return local addr:port in address
382  virtual void BindToNetDevice (Ptr<NetDevice> netdevice); // NetDevice with my m_endPoint
383 
391  typedef void (* TcpTxRxTracedCallback)
392  (const Ptr<const Packet> packet, const TcpHeader& header,
393  const Ptr<const TcpSocketBase> socket);
394 
395 protected:
396  // Implementing ns3::TcpSocket -- Attribute get/set
397  // inherited, no need to doc
398 
399  virtual void SetSndBufSize (uint32_t size);
400  virtual uint32_t GetSndBufSize (void) const;
401  virtual void SetRcvBufSize (uint32_t size);
402  virtual uint32_t GetRcvBufSize (void) const;
403  virtual void SetSegSize (uint32_t size);
404  virtual uint32_t GetSegSize (void) const;
405  virtual void SetInitialSSThresh (uint32_t threshold);
406  virtual uint32_t GetInitialSSThresh (void) const;
407  virtual void SetInitialCwnd (uint32_t cwnd);
408  virtual uint32_t GetInitialCwnd (void) const;
409  virtual void SetConnTimeout (Time timeout);
410  virtual Time GetConnTimeout (void) const;
411  virtual void SetSynRetries (uint32_t count);
412  virtual uint32_t GetSynRetries (void) const;
413  virtual void SetDataRetries (uint32_t retries);
414  virtual uint32_t GetDataRetries (void) const;
415  virtual void SetDelAckTimeout (Time timeout);
416  virtual Time GetDelAckTimeout (void) const;
417  virtual void SetDelAckMaxCount (uint32_t count);
418  virtual uint32_t GetDelAckMaxCount (void) const;
419  virtual void SetTcpNoDelay (bool noDelay);
420  virtual bool GetTcpNoDelay (void) const;
421  virtual void SetPersistTimeout (Time timeout);
422  virtual Time GetPersistTimeout (void) const;
423  virtual bool SetAllowBroadcast (bool allowBroadcast);
424  virtual bool GetAllowBroadcast (void) const;
425 
426 
427 
428  // Helper functions: Connection set up
429 
435  int SetupCallback (void);
436 
442  int DoConnect (void);
443 
447  void ConnectionSucceeded (void);
448 
454  int SetupEndpoint (void);
455 
461  int SetupEndpoint6 (void);
462 
475  virtual void CompleteFork (Ptr<Packet> p, const TcpHeader& tcpHeader,
476  const Address& fromAddress, const Address& toAddress);
477 
478 
479 
480  // Helper functions: Transfer operation
481 
490  void ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface);
491 
500  void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
501 
514  virtual void DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
515  const Address &toAddress);
516 
526  void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
527 
537  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
538 
547  bool SendPendingData (bool withAck = false);
548 
558  uint32_t SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck);
559 
565  virtual void SendEmptyPacket (uint8_t flags);
566 
570  void SendRST (void);
571 
579  bool OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const;
580 
581 
582  // Helper functions: Connection close
583 
589  int DoClose (void);
590 
594  void CloseAndNotify (void);
595 
602  void Destroy (void);
603 
610  void Destroy6 (void);
611 
615  void DeallocateEndPoint (void);
616 
623  void PeerClose (Ptr<Packet> p, const TcpHeader& tcpHeader);
624 
628  void DoPeerClose (void);
629 
633  void CancelAllTimers (void);
634 
638  void TimeWait (void);
639 
640  // State transition functions
641 
650  void ProcessEstablished (Ptr<Packet> packet, const TcpHeader& tcpHeader); // Received a packet upon ESTABLISHED state
651 
660  void ProcessListen (Ptr<Packet> packet, const TcpHeader& tcpHeader,
661  const Address& fromAddress, const Address& toAddress);
662 
669  void ProcessSynSent (Ptr<Packet> packet, const TcpHeader& tcpHeader);
670 
679  void ProcessSynRcvd (Ptr<Packet> packet, const TcpHeader& tcpHeader,
680  const Address& fromAddress, const Address& toAddress);
681 
688  void ProcessWait (Ptr<Packet> packet, const TcpHeader& tcpHeader);
689 
696  void ProcessClosing (Ptr<Packet> packet, const TcpHeader& tcpHeader);
697 
704  void ProcessLastAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
705 
706  // Window management
707 
712  virtual uint32_t UnAckDataCount (void) const;
713 
718  virtual uint32_t BytesInFlight (void) const;
719 
724  virtual uint32_t Window (void) const;
725 
730  virtual uint32_t AvailableWindow (void) const;
731 
736  virtual uint16_t AdvertisedWindowSize (void) const;
737 
750  void UpdateWindowSize (const TcpHeader& header);
751 
752 
753  // Manage data tx/rx
754 
759  virtual Ptr<TcpSocketBase> Fork (void);
760 
766  virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
767 
773  virtual void ReceivedData (Ptr<Packet> packet, const TcpHeader& tcpHeader);
774 
779  virtual void EstimateRtt (const TcpHeader& tcpHeader);
780 
786  virtual void NewAck (SequenceNumber32 const& seq, bool resetRTO);
787 
791  virtual void ReTxTimeout (void);
792 
796  virtual void Retransmit (void);
797 
801  virtual void DelAckTimeout (void);
802 
806  virtual void LastAckTimeout (void);
807 
811  virtual void PersistTimeout (void);
812 
816  virtual void DoRetransmit (void);
817 
830  virtual void ReadOptions (const TcpHeader& tcpHeader);
831 
839  virtual void AddOptions (TcpHeader& tcpHeader);
840 
849  void ProcessOptionWScale (const Ptr<const TcpOption> option);
858  void AddOptionWScale (TcpHeader& header);
859 
867  uint8_t CalculateWScale () const;
868 
878  void ProcessOptionTimestamp (const Ptr<const TcpOption> option);
887  void AddOptionTimestamp (TcpHeader& header);
888 
897  virtual void ScaleSsThresh (uint8_t scaleFactor);
898 
906  virtual void InitializeCwnd ();
907 
908 protected:
909  // Counters and events
915  uint32_t m_dupAckCount;
916  uint32_t m_delAckCount;
917  uint32_t m_delAckMaxCount;
918  bool m_noDelay;
919  uint32_t m_synCount;
920  uint32_t m_synRetries;
921  uint32_t m_dataRetrCount;
922  uint32_t m_dataRetries;
930  RttHistory_t m_history;
931 
932  // Connections to other layers of TCP/IP
939 
941 
942  // Rx and Tx buffer management
947 
948  // State-related attributes
955  bool m_connected;
956  double m_msl;
957 
958  // Window management
959  uint16_t m_maxWinSize;
964 
965  // Options
969 
971  uint32_t m_timestampToEcho;
972 
974 
975  // Fast Retransmit and Recovery
977  uint32_t m_retxThresh;
978  bool m_limitedTx;
979 
980  // Transmission Control Block
983 
984  // Guesses over the other connection end
986 
987  // The following two traces pass a packet with a TCP header
990 
991  TracedCallback<Ptr<const Packet>, const TcpHeader&,
993 };
994 
1003  const TcpSocketState::TcpCongState_t newValue);
1004 
1005 } // namespace ns3
1006 
1007 #endif /* TCP_SOCKET_BASE_H */
void SetCongestionControlAlgorithm(Ptr< TcpCongestionOps > algo)
Install a congestion control algorithm on this socket.
void PeerClose(Ptr< Packet > p, const TcpHeader &tcpHeader)
Received a FIN from peer, notify rx buffer.
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.
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(* TcpCongStatesTracedValueCallback)(const TcpCongState_t oldValue, const TcpCongState_t newValue)
TracedValue Callback signature for TcpCongState_t.
virtual uint32_t Window(void) const
Return the max possible number of unacked bytes.
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.
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.
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.
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).
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 uint32_t BytesInFlight(void) const
Return total bytes in flight.
virtual ~TcpSocketBase(void)
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.
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.
static const char *const TcpCongStateName[TcpSocketState::CA_LAST_STATE]
Literal names of TCP states for use in log messages.
void SendRST(void)
Send reset and tear down this socket.
Ptr< TcpSocketState > m_tcb
Congestion control informations.
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.
virtual void NewAck(SequenceNumber32 const &seq, bool resetRTO)
Update buffers w.r.t.
uint32_t m_segmentSize
Segment size.
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_initialCWnd
Initial cWnd value.
Data structure that records the congestion state of a connection.
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
void(* TcpTxRxTracedCallback)(const Ptr< const Packet > packet, const TcpHeader &header, const Ptr< const TcpSocketBase > socket)
TracedCallback signature for tcp packet transmission or reception events.
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.
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.
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.
uint16_t port
Definition: dsdv-manet.cc:44
a polymophic address class
Definition: address.h:90
void SetMinRto(Time minRto)
Sets the Minimum RTO.
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.
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.
void(* TcpCongStatesTracedValueCallback)(const TcpSocketState::TcpCongState_t oldValue, const TcpSocketState::TcpCongState_t newValue)
TracedValue Callback signature for TcpCongState_t.
virtual void Retransmit(void)
Halving cwnd and call DoRetransmit()
Packet header for IPv4.
Definition: ipv4-header.h:31
virtual void SetDataRetries(uint32_t retries)
Set the number of data transmission retries before giving up.
Ptr< TcpCongestionOps > m_congestionControl
Congestion control.
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.
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.
cWnd was reduced due to some Congestion Notification event.
Time time
Time this one was sent.
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.
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.
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.
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.
void UpdateCongState(TcpSocketState::TcpCongState_t oldValue, TcpSocketState::TcpCongState_t newValue)
Callback function to hook to TcpSocketState congestion state.
std::deque< RttHistory > RttHistory_t
Container for RttHistory objects.
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.
uint32_t GetCwndInSegments() const
Get cwnd in segments rather than bytes.
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.
bool m_isFirstPartialAck
First partial ACK during RECOVERY.
Ptr< TcpL4Protocol > m_tcp
the associated TCP L4 protocol
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)
uint32_t m_retxThresh
Fast Retransmit threshold.
TcpCongState_t
Definition of the Congestion state machine.
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.
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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint32_t m_dupAckCount
Dupack counter.
Used only in debug messages.
Ptr< Node > m_node
the associated node
virtual void ScaleSsThresh(uint8_t scaleFactor)
Scale the initial SsThresh value to the correct one.
TracedValue< TcpCongState_t > m_congState
State in the Congestion state machine.
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 UnAckDataCount(void) const
Return count of number of unacked bytes.
void Destroy(void)
Kill this socket by zeroing its attributes (IPv4)
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.
virtual int Close(void)
Close a socket.
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
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.
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.
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.
General infrastructure for TCP testing.
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.
SequenceNumber32 seq
First sequence number in packet sent.
CWND was reduced due to RTO timeout or SACK reneging.
RttHistory_t m_history
List of sent packet.
A representation of an internet IPv6 endpoint/connection.
virtual uint32_t GetInitialCwnd(void) const
Get the initial Congestion Window.
uint32_t m_timestampToEcho
Timestamp to echo.
uint32_t m_synCount
Count of remaining connection retries.
TracedValue< SequenceNumber32 > m_highRxMark
Highest seqno received.
virtual enum SocketErrno GetErrno(void) const
Get last error number.
void ProcessLastAck(Ptr< Packet > packet, const TcpHeader &tcpHeader)
Received a packet upon LAST_ACK.
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.
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.
A base class which provides memory management and object aggregation.
Definition: object.h:87
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.
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.
uint32_t m_bytesAckedNotProcessed
Bytes acked, but not processed.
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.
virtual Ptr< TcpSocketBase > Fork(void)
Call CopyObject<> to clone me.
int SetupEndpoint6(void)
Configure the endpoint v6 to a local address.
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}().
virtual uint16_t AdvertisedWindowSize(void) const
The amount of Rx window announced to the peer.
virtual void DoRetransmit(void)
Retransmit the oldest packet.
bool m_closeOnEmpty
Close socket upon tx buffer emptied.
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.
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.
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)
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.