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) = 0;
202  virtual uint32_t GetInitialSSThresh (void) const = 0;
203  virtual void SetInitialCwnd (uint32_t cwnd) = 0;
204  virtual uint32_t GetInitialCwnd (void) const = 0;
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 
303  virtual void DoForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface); //Get a pkt from L3
304 
312  virtual void DoForwardUp (Ptr<Packet> packet, Ipv6Header header, uint16_t port);
313 
323  void ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
324 
334  void ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
335 
344  bool SendPendingData (bool withAck = false);
345 
355  uint32_t SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck);
356 
362  void SendEmptyPacket (uint8_t flags);
363 
367  void SendRST (void);
368 
376  bool OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const;
377 
378 
379  // Helper functions: Connection close
380 
386  int DoClose (void);
387 
391  void CloseAndNotify (void);
392 
399  void Destroy (void);
400 
407  void Destroy6 (void);
408 
412  void DeallocateEndPoint (void);
413 
420  void PeerClose (Ptr<Packet> p, const TcpHeader& tcpHeader);
421 
425  void DoPeerClose (void);
426 
430  void CancelAllTimers (void);
431 
435  void TimeWait (void);
436 
437  // State transition functions
438 
447  void ProcessEstablished (Ptr<Packet> packet, const TcpHeader& tcpHeader); // Received a packet upon ESTABLISHED state
448 
457  void ProcessListen (Ptr<Packet> packet, const TcpHeader& tcpHeader,
458  const Address& fromAddress, const Address& toAddress);
459 
466  void ProcessSynSent (Ptr<Packet> packet, const TcpHeader& tcpHeader);
467 
476  void ProcessSynRcvd (Ptr<Packet> packet, const TcpHeader& tcpHeader,
477  const Address& fromAddress, const Address& toAddress);
478 
485  void ProcessWait (Ptr<Packet> packet, const TcpHeader& tcpHeader);
486 
493  void ProcessClosing (Ptr<Packet> packet, const TcpHeader& tcpHeader);
494 
501  void ProcessLastAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
502 
503  // Window management
504 
509  virtual uint32_t UnAckDataCount (void);
510 
515  virtual uint32_t BytesInFlight (void);
516 
521  virtual uint32_t Window (void);
522 
527  virtual uint32_t AvailableWindow (void);
528 
533  virtual uint16_t AdvertisedWindowSize (void);
534 
535 
536  // Manage data tx/rx
537 
542  virtual Ptr<TcpSocketBase> Fork (void) = 0;
543 
549  virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
550 
556  virtual void ReceivedData (Ptr<Packet> packet, const TcpHeader& tcpHeader);
557 
562  virtual void EstimateRtt (const TcpHeader& tcpHeader);
563 
568  virtual void NewAck (SequenceNumber32 const& seq);
569 
575  virtual void DupAck (const TcpHeader& tcpHeader, uint32_t count) = 0;
576 
580  virtual void ReTxTimeout (void);
581 
585  virtual void Retransmit (void);
586 
590  virtual void DelAckTimeout (void);
591 
595  virtual void LastAckTimeout (void);
596 
600  virtual void PersistTimeout (void);
601 
605  virtual void DoRetransmit (void);
606 
619  virtual void ReadOptions (const TcpHeader& tcpHeader);
620 
628  virtual void AddOptions (TcpHeader& tcpHeader);
629 
638  void ProcessOptionWScale (const Ptr<const TcpOption> option);
647  void AddOptionWScale (TcpHeader& header);
648 
656  uint8_t CalculateWScale () const;
657 
667  void ProcessOptionTimestamp (const Ptr<const TcpOption> option);
676  void AddOptionTimestamp (TcpHeader& header);
677 
678 
679 protected:
680  // Counters and events
686  uint32_t m_dupAckCount;
687  uint32_t m_delAckCount;
688  uint32_t m_delAckMaxCount;
689  bool m_noDelay;
690  uint32_t m_cnCount;
691  uint32_t m_cnRetries;
699  RttHistory_t m_history;
700 
701  // Connections to other layers of TCP/IP
708 
710 
711  // Rx and Tx buffer management
716 
717  // State-related attributes
724  bool m_connected;
725  double m_msl;
726 
727  // Window management
728  uint32_t m_segmentSize;
729  uint16_t m_maxWinSize;
731 
732  // Options
736 
738  uint32_t m_timestampToEcho;
739 };
740 
741 } // namespace ns3
742 
743 #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 int Listen(void)
Listen for incoming connections.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:95
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 uint16_t AdvertisedWindowSize(void)
The amount of Rx window announced to the peer.
Callback template class.
Definition: callback.h:978
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:77
Ipv4EndPoint * m_endPoint
the IPv4 endpoint
virtual ~TcpSocketBase(void)
TracedValue< Time > m_lastRtt
Last RTT sample collected.
virtual uint32_t GetInitialCwnd(void) const =0
Get the initial Congestion Window.
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:174
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.
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 SetInitialSSThresh(uint32_t threshold)=0
Set the initial Slow Start Threshold.
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
virtual void SetInitialCwnd(uint32_t cwnd)=0
Set the initial Congestion Window.
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.
Ptr< SampleEmitter > s
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
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 uint32_t BytesInFlight(void)
Return total bytes in flight.
void Destroy(void)
Kill this socket by zeroing its attributes (IPv4)
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
virtual uint32_t GetInitialSSThresh(void) const =0
Get the initial Slow Start Threshold.
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.
uint32_t m_timestampToEcho
Timestamp to echo.
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.
virtual void DelAckTimeout(void)
Action upon delay ACK timeout, i.e.
virtual void LastAckTimeout(void)
Timeout at LAST_ACK, close the connection.
virtual void DoForwardUp(Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface)
Called by TcpSocketBase::ForwardUp().
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:51
bool m_shutdownSend
Send no longer allowed.
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
Flow control window at remote side.
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.