21 #ifndef TCP_SOCKET_BASE_H 
   22 #define TCP_SOCKET_BASE_H 
   26 #include "ns3/callback.h" 
   27 #include "ns3/traced-value.h" 
   28 #include "ns3/tcp-socket.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" 
  174   virtual int Bind (
void);    
 
  175   virtual int Bind6 (
void);    
 
  178   virtual int Listen (
void);  
 
  179   virtual int Close (
void);   
 
  319   void ForwardIcmp (
Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
 
  330   void ForwardIcmp6 (
Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
 
  517   virtual uint32_t 
Window (
void);
 
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. 
 
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. 
 
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. 
 
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 
 
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. 
 
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. 
 
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. 
 
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. 
 
a polymophic address class 
 
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() 
 
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. 
 
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. 
 
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. 
 
bool m_connected
Connection established. 
 
TracedValue< Time > m_rto
Retransmit timeout. 
 
An identifier for simulation events. 
 
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. 
 
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. 
 
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.