ns-3
|
An implementation of a stream socket using TCP. More...
#include <tcp-tahoe.h>
Public Member Functions | |
TcpTahoe (void) | |
TcpTahoe (const TcpTahoe &sock) | |
virtual int | Connect (const Address &address) |
virtual int | Listen (void) |
![]() | |
TcpSocketBase (void) | |
TcpSocketBase (const TcpSocketBase &sock) | |
virtual void | SetNode (Ptr< Node > node) |
virtual void | SetTcp (Ptr< TcpL4Protocol > tcp) |
virtual void | SetRtt (Ptr< RttEstimator > rtt) |
virtual enum SocketErrno | GetErrno (void) const |
virtual enum SocketType | GetSocketType (void) const |
virtual Ptr< Node > | GetNode (void) const |
virtual int | Bind (void) |
virtual int | Bind6 (void) |
Allocate a local IPv6 endpoint for this socket. | |
virtual int | Bind (const Address &address) |
virtual int | Close (void) |
virtual int | ShutdownSend (void) |
virtual int | ShutdownRecv (void) |
virtual int | Send (Ptr< Packet > p, uint32_t flags) |
virtual int | SendTo (Ptr< Packet > p, uint32_t flags, const Address &toAddress) |
virtual Ptr< Packet > | Recv (uint32_t maxSize, uint32_t flags) |
virtual Ptr< Packet > | RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress) |
virtual uint32_t | GetTxAvailable (void) const |
virtual uint32_t | GetRxAvailable (void) const |
virtual int | GetSockName (Address &address) const |
virtual void | BindToNetDevice (Ptr< NetDevice > netdevice) |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
This method returns the TypeId associated to ns3::TcpTahoe. |
Protected Member Functions | |
virtual uint32_t | Window (void) |
virtual Ptr< TcpSocketBase > | Fork (void) |
virtual void | NewAck (SequenceNumber32 const &seq) |
virtual void | DupAck (const TcpHeader &t, uint32_t count) |
virtual void | Retransmit (void) |
virtual void | SetSegSize (uint32_t size) |
virtual void | SetSSThresh (uint32_t threshold) |
virtual uint32_t | GetSSThresh (void) const |
virtual void | SetInitialCwnd (uint32_t cwnd) |
virtual uint32_t | GetInitialCwnd (void) const |
![]() | |
virtual void | SetSndBufSize (uint32_t size) |
virtual uint32_t | GetSndBufSize (void) const |
virtual void | SetRcvBufSize (uint32_t size) |
virtual uint32_t | GetRcvBufSize (void) const |
virtual uint32_t | GetSegSize (void) const |
virtual void | SetConnTimeout (Time timeout) |
virtual Time | GetConnTimeout (void) const |
virtual void | SetConnCount (uint32_t count) |
virtual uint32_t | GetConnCount (void) const |
virtual void | SetDelAckTimeout (Time timeout) |
virtual Time | GetDelAckTimeout (void) const |
virtual void | SetDelAckMaxCount (uint32_t count) |
virtual uint32_t | GetDelAckMaxCount (void) const |
virtual void | SetTcpNoDelay (bool noDelay) |
virtual bool | GetTcpNoDelay (void) const |
virtual void | SetPersistTimeout (Time timeout) |
virtual Time | GetPersistTimeout (void) const |
virtual bool | SetAllowBroadcast (bool allowBroadcast) |
Configure whether broadcast datagram transmissions are allowed. | |
virtual bool | GetAllowBroadcast (void) const |
Query whether broadcast datagram transmissions are allowed. | |
int | SetupCallback (void) |
int | DoConnect (void) |
void | ConnectionSucceeded (void) |
int | SetupEndpoint (void) |
int | SetupEndpoint6 (void) |
void | CompleteFork (Ptr< Packet >, const TcpHeader &, const Address &fromAddress, const Address &toAdress) |
void | ForwardUp (Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface) |
void | ForwardUp6 (Ptr< Packet > packet, Ipv6Address saddr, Ipv6Address daddr, uint16_t port) |
virtual void | DoForwardUp (Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface) |
virtual void | DoForwardUp (Ptr< Packet > packet, Ipv6Address saddr, Ipv6Address daddr, uint16_t port) |
bool | SendPendingData (bool withAck=false) |
uint32_t | SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck) |
void | SendEmptyPacket (uint8_t flags) |
void | SendRST (void) |
bool | OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const |
int | DoClose (void) |
void | CloseAndNotify (void) |
void | Destroy (void) |
void | Destroy6 (void) |
void | DeallocateEndPoint (void) |
void | PeerClose (Ptr< Packet >, const TcpHeader &) |
void | DoPeerClose (void) |
void | CancelAllTimers (void) |
void | TimeWait (void) |
void | ProcessEstablished (Ptr< Packet >, const TcpHeader &) |
void | ProcessListen (Ptr< Packet >, const TcpHeader &, const Address &, const Address &) |
void | ProcessSynSent (Ptr< Packet >, const TcpHeader &) |
void | ProcessSynRcvd (Ptr< Packet >, const TcpHeader &, const Address &, const Address &) |
void | ProcessWait (Ptr< Packet >, const TcpHeader &) |
void | ProcessClosing (Ptr< Packet >, const TcpHeader &) |
void | ProcessLastAck (Ptr< Packet >, const TcpHeader &) |
virtual uint32_t | UnAckDataCount (void) |
virtual uint32_t | BytesInFlight (void) |
virtual uint32_t | AvailableWindow (void) |
virtual uint16_t | AdvertisedWindowSize (void) |
virtual void | ReceivedAck (Ptr< Packet >, const TcpHeader &) |
virtual void | ReceivedData (Ptr< Packet >, const TcpHeader &) |
virtual void | EstimateRtt (const TcpHeader &) |
virtual void | ReTxTimeout (void) |
virtual void | DelAckTimeout (void) |
virtual void | LastAckTimeout (void) |
virtual void | PersistTimeout (void) |
virtual void | DoRetransmit (void) |
virtual void | ReadOptions (const TcpHeader &) |
virtual void | AddOptions (TcpHeader &) |
Protected Attributes | |
TracedValue< uint32_t > | m_cWnd |
uint32_t | m_ssThresh |
uint32_t | m_initialCWnd |
uint32_t | m_retxThresh |
![]() | |
EventId | m_retxEvent |
EventId | m_lastAckEvent |
EventId | m_delAckEvent |
EventId | m_persistEvent |
EventId | m_timewaitEvent |
uint32_t | m_dupAckCount |
uint32_t | m_delAckCount |
uint32_t | m_delAckMaxCount |
bool | m_noDelay |
uint32_t | m_cnCount |
uint32_t | m_cnRetries |
TracedValue< Time > | m_rto |
TracedValue< Time > | m_lastRtt |
Time | m_delAckTimeout |
Time | m_persistTimeout |
Time | m_cnTimeout |
Ipv4EndPoint * | m_endPoint |
Ipv6EndPoint * | m_endPoint6 |
Ptr< Node > | m_node |
Ptr< TcpL4Protocol > | m_tcp |
Ptr< RttEstimator > | m_rtt |
TracedValue< SequenceNumber32 > | m_nextTxSequence |
TracedValue< SequenceNumber32 > | m_highTxMark |
TcpRxBuffer | m_rxBuffer |
TcpTxBuffer | m_txBuffer |
TracedValue< TcpStates_t > | m_state |
enum SocketErrno | m_errno |
bool | m_closeNotified |
bool | m_closeOnEmpty |
bool | m_shutdownSend |
bool | m_shutdownRecv |
bool | m_connected |
double | m_msl |
uint32_t | m_segmentSize |
uint16_t | m_maxWinSize |
TracedValue< uint32_t > | m_rWnd |
An implementation of a stream socket using TCP.
This class contains the Tahoe implementation of TCP. Tahoe is not officially published in RFC. The reference for implementing this is based on Kevin Fall and Sally Floyd, "Simulation-based Comparisons of Tahoe, Reno, and SACK TCP", CCR, 1996 http://inst.eecs.berkeley.edu/~ee122/fa05/projects/Project2/proj2_spec_files/sacks.pdf In summary, we have slow start, congestion avoidance, and fast retransmit. The implementation of these algorithms are based on W. R. Stevens's book and also RFC2001.
ns3::TcpTahoe::TcpTahoe | ( | void | ) |
Create an unbound tcp socket.
References NS_LOG_FUNCTION.
|
virtual |
We initialize m_cWnd from this function, after attributes initialized
Reimplemented from ns3::TcpSocketBase.
References NS_LOG_FUNCTION.
|
protectedvirtual |
Cut down ssthresh upon triple dupack
Implements ns3::TcpSocketBase.
References ns3::TcpTxBuffer::HeadSequence(), ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_INFO, and NS_LOG_LOGIC.
|
static |
This method returns the TypeId associated to ns3::TcpTahoe.
Attributes defined for this type:
Attributes defined in parent class ns3::TcpSocketBase:
Attributes defined in parent class ns3::TcpSocket:
TraceSources defined for this type:
TraceSources defined in parent class ns3::TcpSocketBase:
Reimplemented from ns3::TcpSocketBase.
References ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().
|
virtual |
We initialize m_cWnd from this function, after attributes initialized
Reimplemented from ns3::TcpSocketBase.
References NS_LOG_FUNCTION.
|
protectedvirtual |
New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck()
Reimplemented from ns3::TcpSocketBase.
References NS_LOG_FUNCTION, NS_LOG_INFO, and NS_LOG_LOGIC.
|
protectedvirtual |
Retransmit timeout
Reimplemented from ns3::TcpSocketBase.
References ns3::TcpTxBuffer::HeadSequence(), ns3::RttEstimator::IncreaseMultiplier(), ns3::Simulator::Now(), NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
protectedvirtual |
Limit the size of in-flight data by cwnd and receiver's rxwin
Reimplemented from ns3::TcpSocketBase.
References NS_LOG_FUNCTION.