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/event-id.h"
35 #include "tcp-tx-buffer.h"
36 #include "tcp-rx-buffer.h"
37 #include "rtt-estimator.h"
64 static TypeId GetTypeId (
void);
82 virtual enum SocketErrno
GetErrno (
void)
const;
85 virtual int Bind (
void);
86 virtual int Bind6 (
void);
90 virtual int Close (
void);
105 virtual uint32_t GetSndBufSize (
void)
const;
106 virtual void SetRcvBufSize (uint32_t size);
107 virtual uint32_t GetRcvBufSize (
void)
const;
108 virtual void SetSegSize (uint32_t size);
109 virtual uint32_t GetSegSize (
void)
const;
110 virtual void SetSSThresh (uint32_t threshold) = 0;
111 virtual uint32_t GetSSThresh (
void)
const = 0;
112 virtual void SetInitialCwnd (uint32_t cwnd) = 0;
113 virtual uint32_t GetInitialCwnd (
void)
const = 0;
114 virtual void SetConnTimeout (
Time timeout);
115 virtual Time GetConnTimeout (
void)
const;
116 virtual void SetConnCount (uint32_t count);
117 virtual uint32_t GetConnCount (
void)
const;
118 virtual void SetDelAckTimeout (
Time timeout);
119 virtual Time GetDelAckTimeout (
void)
const;
120 virtual void SetDelAckMaxCount (uint32_t count);
121 virtual uint32_t GetDelAckMaxCount (
void)
const;
122 virtual void SetTcpNoDelay (
bool noDelay);
123 virtual bool GetTcpNoDelay (
void)
const;
124 virtual void SetPersistTimeout (
Time timeout);
125 virtual Time GetPersistTimeout (
void)
const;
132 void ConnectionSucceeded (
void);
134 int SetupEndpoint6 (
void);
142 void ForwardIcmp (
Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
143 void ForwardIcmp6 (
Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo);
158 void CancelAllTimers (
void);
171 virtual uint32_t UnAckDataCount (
void);
172 virtual uint32_t BytesInFlight (
void);
173 virtual uint32_t Window (
void);
174 virtual uint32_t AvailableWindow (
void);
175 virtual uint16_t AdvertisedWindowSize (
void);
183 virtual void DupAck (
const TcpHeader& t, uint32_t count) = 0;
184 virtual void ReTxTimeout (
void);
185 virtual void Retransmit (
void);
186 virtual void DelAckTimeout (
void);
187 virtual void LastAckTimeout (
void);
188 virtual void PersistTimeout (
void);
189 virtual void DoRetransmit (
void);
200 uint32_t m_dupAckCount;
201 uint32_t m_delAckCount;
202 uint32_t m_delAckMaxCount;
205 uint32_t m_cnRetries;
208 Time m_delAckTimeout;
209 Time m_persistTimeout;
231 enum SocketErrno m_errno;
232 bool m_closeNotified;
240 uint32_t m_segmentSize;
241 uint16_t m_maxWinSize;
virtual int GetSockName(Address &address) const
virtual void EstimateRtt(const TcpHeader &)
virtual void ReceivedAck(Ptr< Packet >, const TcpHeader &)
uint32_t SendDataPacket(SequenceNumber32 seq, uint32_t maxSize, bool withAck)
(abstract) base class of all TcpSockets
virtual int ShutdownRecv(void)
void ProcessClosing(Ptr< Packet >, const TcpHeader &)
Ptr< Packet > Recv(void)
Read a single packet from the socket.
void PeerClose(Ptr< Packet >, const TcpHeader &)
virtual int Send(Ptr< Packet > p, uint32_t flags)
virtual bool GetAllowBroadcast(void) const
Query whether broadcast datagram transmissions are allowed.
virtual void AddOptions(TcpHeader &)
trace classes with value semantics
void CompleteFork(Ptr< Packet >, const TcpHeader &, const Address &fromAddress, const Address &toAdress)
a polymophic address class
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)
void ForwardUp(Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface)
virtual enum SocketType GetSocketType(void) const
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
bool OutOfRange(SequenceNumber32 head, SequenceNumber32 tail) const
virtual bool SetAllowBroadcast(bool allowBroadcast)
Configure whether broadcast datagram transmissions are allowed.
class for the reordering buffer that keeps the data from lower layer, i.e. TcpL4Protocol, sent to the application
class for keeping the data sent by the application to the TCP socket, i.e. the sending buffer...
A base class for implementation of a stream socket using TCP.
virtual void SetTcp(Ptr< TcpL4Protocol > tcp)
virtual int ShutdownSend(void)
void ProcessListen(Ptr< Packet >, const TcpHeader &, const Address &, const Address &)
void ProcessEstablished(Ptr< Packet >, const TcpHeader &)
virtual void SetNode(Ptr< Node > node)
virtual int Connect(const Address &address)
void ProcessSynRcvd(Ptr< Packet >, const TcpHeader &, const Address &, const Address &)
virtual void SetRtt(Ptr< RttEstimator > rtt)
void SendEmptyPacket(uint8_t flags)
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)
virtual void SetSndBufSize(uint32_t size)
void DeallocateEndPoint(void)
Describes an IPv6 address.
Ipv4 addresses are stored in host order in this class.
an identifier for simulation events.
An IPv6 end point, four tuples identification.
void ProcessSynSent(Ptr< Packet >, const TcpHeader &)
virtual enum SocketErrno GetErrno(void) const
void ProcessWait(Ptr< Packet >, const TcpHeader &)
virtual void ReadOptions(const TcpHeader &)
void ProcessLastAck(Ptr< Packet >, const TcpHeader &)
void CloseAndNotify(void)
virtual Ptr< Node > GetNode(void) const
virtual void DoForwardUp(Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface)
virtual int Bind6(void)
Allocate a local IPv6 endpoint for this socket.
a unique identifier for an interface.
bool SendPendingData(bool withAck=false)
A representation of an internet endpoint/connection.
virtual uint32_t GetTxAvailable(void) const
virtual uint32_t GetRxAvailable(void) const