An implementation of a stream socket using TCP. More...
#include <tcp-tahoe.h>
Public Member Functions | |
TcpTahoe (void) | |
TcpTahoe (const TcpTahoe &sock) | |
virtual | ~TcpTahoe (void) |
virtual int | Connect (const Address &address) |
virtual int | Listen (void) |
![]() | |
TcpSocketBase (void) | |
TcpSocketBase (const TcpSocketBase &sock) | |
virtual | ~TcpSocketBase (void) |
virtual int | Bind (void) |
virtual int | Bind (const Address &address) |
virtual int | Bind6 (void) |
Allocate a local IPv6 endpoint for this socket. | |
virtual void | BindToNetDevice (Ptr< NetDevice > netdevice) |
virtual int | Close (void) |
virtual enum SocketErrno | GetErrno (void) const |
virtual Ptr< Node > | GetNode (void) const |
virtual uint32_t | GetRxAvailable (void) const |
virtual enum SocketType | GetSocketType (void) const |
virtual int | GetSockName (Address &address) const |
virtual uint32_t | GetTxAvailable (void) const |
virtual Ptr< Packet > | Recv (uint32_t maxSize, uint32_t flags) |
virtual Ptr< Packet > | RecvFrom (uint32_t maxSize, uint32_t flags, Address &fromAddress) |
virtual int | Send (Ptr< Packet > p, uint32_t flags) |
virtual int | SendTo (Ptr< Packet > p, uint32_t flags, const Address &toAddress) |
virtual void | SetNode (Ptr< Node > node) |
virtual void | SetRtt (Ptr< RttEstimator > rtt) |
virtual void | SetTcp (Ptr< TcpL4Protocol > tcp) |
virtual int | ShutdownRecv (void) |
virtual int | ShutdownSend (void) |
![]() | |
TcpSocket (void) | |
virtual | ~TcpSocket (void) |
![]() | |
Socket (void) | |
virtual | ~Socket (void) |
Ptr< NetDevice > | GetBoundNetDevice () |
Returns socket's bound netdevice, if any. | |
uint8_t | GetIpTos (void) const |
virtual uint8_t | GetIpTtl (void) const |
virtual uint8_t | GetIpv6HopLimit (void) const |
uint8_t | GetIpv6Tclass (void) const |
bool | IsIpRecvTos (void) const |
Ask if the socket is currently passing information about IP Type of Service up the stack. | |
bool | IsIpRecvTtl (void) const |
Ask if the socket is currently passing information about IP_TTL up the stack. | |
bool | IsIpv6RecvHopLimit (void) const |
Ask if the socket is currently passing information about IPv6 Hop Limit up the stack. | |
bool | IsIpv6RecvTclass (void) const |
Ask if the socket is currently passing information about IPv6 Traffic Class up the stack. | |
bool | IsRecvPktInfo () const |
Get status indicating whether enable/disable packet information to socket. | |
Ptr< Packet > | Recv (void) |
Read a single packet from the socket. | |
int | Recv (uint8_t *buf, uint32_t size, uint32_t flags) |
Recv data (or dummy data) from the remote host. | |
Ptr< Packet > | RecvFrom (Address &fromAddress) |
Read a single packet from the socket and retrieve the sender address. | |
int | RecvFrom (uint8_t *buf, uint32_t size, uint32_t flags, Address &fromAddress) |
Read a single packet from the socket and retrieve the sender address. | |
int | Send (Ptr< Packet > p) |
Send data (or dummy data) to the remote host. | |
int | Send (const uint8_t *buf, uint32_t size, uint32_t flags) |
Send data (or dummy data) to the remote host. | |
int | SendTo (const uint8_t *buf, uint32_t size, uint32_t flags, const Address &address) |
Send data to a specified peer. | |
void | SetAcceptCallback (Callback< bool, Ptr< Socket >, const Address & > connectionRequest, Callback< void, Ptr< Socket >, const Address & > newConnectionCreated) |
Accept connection requests from remote hosts. | |
void | SetCloseCallbacks (Callback< void, Ptr< Socket > > normalClose, Callback< void, Ptr< Socket > > errorClose) |
Detect socket recv() events such as graceful shutdown or error. | |
void | SetConnectCallback (Callback< void, Ptr< Socket > > connectionSucceeded, Callback< void, Ptr< Socket > > connectionFailed) |
Specify callbacks to allow the caller to determine if the connection succeeds of fails. | |
void | SetDataSentCallback (Callback< void, Ptr< Socket >, uint32_t > dataSent) |
Notify application when a packet has been sent from transport protocol (non-standard socket call) | |
void | SetIpRecvTos (bool ipv4RecvTos) |
Tells a socket to pass information about IP Type of Service up the stack. | |
void | SetIpRecvTtl (bool ipv4RecvTtl) |
Tells a socket to pass information about IP_TTL up the stack. | |
void | SetIpTos (uint8_t ipTos) |
virtual void | SetIpTtl (uint8_t ipTtl) |
virtual void | SetIpv6HopLimit (uint8_t ipHopLimit) |
void | SetIpv6RecvHopLimit (bool ipv6RecvHopLimit) |
Tells a socket to pass information about IPv6 Hop Limit up the stack. | |
void | SetIpv6RecvTclass (bool ipv6RecvTclass) |
Tells a socket to pass information about IPv6 Traffic Class up the stack. | |
void | SetIpv6Tclass (int ipTclass) |
void | SetRecvCallback (Callback< void, Ptr< Socket > >) |
Notify application when new data is available to be read. | |
void | SetRecvPktInfo (bool flag) |
Enable/Disable receive packet information to socket. | |
void | SetSendCallback (Callback< void, Ptr< Socket >, uint32_t > sendCb) |
Notify application when space in transmit buffer is added. | |
![]() | |
Object () | |
virtual | ~Object () |
void | AggregateObject (Ptr< Object > other) |
void | Dispose (void) |
AggregateIterator | GetAggregateIterator (void) const |
virtual TypeId | GetInstanceTypeId (void) const |
template<typename T > | |
Ptr< T > | GetObject (void) const |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
void | Initialize (void) |
![]() | |
SimpleRefCount () | |
SimpleRefCount (const SimpleRefCount &o) | |
uint32_t | GetReferenceCount (void) const |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
void | Ref (void) const |
void | Unref (void) const |
![]() | |
virtual | ~ObjectBase () |
void | GetAttribute (std::string name, AttributeValue &value) const |
bool | GetAttributeFailSafe (std::string name, AttributeValue &attribute) const |
void | SetAttribute (std::string name, const AttributeValue &value) |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Static Public Member Functions | |
static TypeId | GetTypeId (void) |
Protected Member Functions | |
virtual void | DupAck (const TcpHeader &t, uint32_t count) |
virtual Ptr< TcpSocketBase > | Fork (void) |
virtual uint32_t | GetInitialCwnd (void) const |
virtual uint32_t | GetSSThresh (void) const |
virtual void | NewAck (SequenceNumber32 const &seq) |
virtual void | Retransmit (void) |
virtual void | SetInitialCwnd (uint32_t cwnd) |
virtual void | SetSegSize (uint32_t size) |
virtual void | SetSSThresh (uint32_t threshold) |
virtual uint32_t | Window (void) |
![]() | |
virtual void | AddOptions (TcpHeader &) |
virtual uint16_t | AdvertisedWindowSize (void) |
virtual uint32_t | AvailableWindow (void) |
virtual uint32_t | BytesInFlight (void) |
void | CancelAllTimers (void) |
void | CloseAndNotify (void) |
void | CompleteFork (Ptr< Packet >, const TcpHeader &, const Address &fromAddress, const Address &toAdress) |
void | ConnectionSucceeded (void) |
void | DeallocateEndPoint (void) |
virtual void | DelAckTimeout (void) |
void | Destroy (void) |
void | Destroy6 (void) |
int | DoClose (void) |
int | DoConnect (void) |
virtual void | DoForwardUp (Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface) |
virtual void | DoForwardUp (Ptr< Packet > packet, Ipv6Header header, uint16_t port) |
void | DoPeerClose (void) |
virtual void | DoRetransmit (void) |
virtual void | EstimateRtt (const TcpHeader &) |
void | ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) |
void | ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) |
void | ForwardUp (Ptr< Packet > packet, Ipv4Header header, uint16_t port, Ptr< Ipv4Interface > incomingInterface) |
void | ForwardUp6 (Ptr< Packet > packet, Ipv6Header header, uint16_t port) |
virtual bool | GetAllowBroadcast (void) const |
Query whether broadcast datagram transmissions are allowed. | |
virtual uint32_t | GetConnCount (void) const |
virtual Time | GetConnTimeout (void) const |
virtual uint32_t | GetDelAckMaxCount (void) const |
virtual Time | GetDelAckTimeout (void) const |
virtual Time | GetPersistTimeout (void) const |
virtual uint32_t | GetRcvBufSize (void) const |
virtual uint32_t | GetSegSize (void) const |
virtual uint32_t | GetSndBufSize (void) const |
virtual bool | GetTcpNoDelay (void) const |
virtual void | LastAckTimeout (void) |
bool | OutOfRange (SequenceNumber32 head, SequenceNumber32 tail) const |
void | PeerClose (Ptr< Packet >, const TcpHeader &) |
virtual void | PersistTimeout (void) |
void | ProcessClosing (Ptr< Packet >, const TcpHeader &) |
void | ProcessEstablished (Ptr< Packet >, const TcpHeader &) |
void | ProcessLastAck (Ptr< Packet >, const TcpHeader &) |
void | ProcessListen (Ptr< Packet >, const TcpHeader &, const Address &, const Address &) |
void | ProcessSynRcvd (Ptr< Packet >, const TcpHeader &, const Address &, const Address &) |
void | ProcessSynSent (Ptr< Packet >, const TcpHeader &) |
void | ProcessWait (Ptr< Packet >, const TcpHeader &) |
virtual void | ReadOptions (const TcpHeader &) |
virtual void | ReceivedAck (Ptr< Packet >, const TcpHeader &) |
virtual void | ReceivedData (Ptr< Packet >, const TcpHeader &) |
virtual void | ReTxTimeout (void) |
uint32_t | SendDataPacket (SequenceNumber32 seq, uint32_t maxSize, bool withAck) |
void | SendEmptyPacket (uint8_t flags) |
bool | SendPendingData (bool withAck=false) |
void | SendRST (void) |
virtual bool | SetAllowBroadcast (bool allowBroadcast) |
Configure whether broadcast datagram transmissions are allowed. | |
virtual void | SetConnCount (uint32_t count) |
virtual void | SetConnTimeout (Time timeout) |
virtual void | SetDelAckMaxCount (uint32_t count) |
virtual void | SetDelAckTimeout (Time timeout) |
virtual void | SetPersistTimeout (Time timeout) |
virtual void | SetRcvBufSize (uint32_t size) |
virtual void | SetSndBufSize (uint32_t size) |
virtual void | SetTcpNoDelay (bool noDelay) |
int | SetupCallback (void) |
int | SetupEndpoint (void) |
int | SetupEndpoint6 (void) |
void | TimeWait (void) |
virtual uint32_t | UnAckDataCount (void) |
Private Member Functions | |
void | InitializeCwnd (void) |
Additional Inherited Members | |
![]() | |
enum | SocketErrno { ERROR_NOTERROR, ERROR_ISCONN, ERROR_NOTCONN, ERROR_MSGSIZE, ERROR_AGAIN, ERROR_SHUTDOWN, ERROR_OPNOTSUPP, ERROR_AFNOSUPPORT, ERROR_INVAL, ERROR_BADF, ERROR_NOROUTETOHOST, ERROR_NODEV, ERROR_ADDRNOTAVAIL, ERROR_ADDRINUSE, SOCKET_ERRNO_LAST } |
enum | SocketType { NS3_SOCK_STREAM, NS3_SOCK_SEQPACKET, NS3_SOCK_DGRAM, NS3_SOCK_RAW } |
![]() | |
static const char *const | TcpStateName [LAST_STATE] = { "CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", "ESTABLISHED", "CLOSE_WAIT", "LAST_ACK", "FIN_WAIT_1", "FIN_WAIT_2", "CLOSING", "TIME_WAIT" } |
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 is accessible through the following paths with Config::Set and Config::Connect:
Definition at line 42 of file tcp-tahoe.h.
ns3::TcpTahoe::TcpTahoe | ( | void | ) |
Create an unbound tcp socket.
Definition at line 54 of file tcp-tahoe.cc.
References NS_LOG_FUNCTION.
ns3::TcpTahoe::TcpTahoe | ( | const TcpTahoe & | sock | ) |
Definition at line 59 of file tcp-tahoe.cc.
References NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
virtual |
Definition at line 70 of file tcp-tahoe.cc.
|
virtual |
We initialize m_cWnd from this function, after attributes initialized
Reimplemented from ns3::TcpSocketBase.
Definition at line 85 of file tcp-tahoe.cc.
References InitializeCwnd(), and NS_LOG_FUNCTION.
|
protectedvirtual |
Cut down ssthresh upon triple dupack
Implements ns3::TcpSocketBase.
Definition at line 132 of file tcp-tahoe.cc.
References ns3::TcpSocketBase::DoRetransmit(), ns3::TcpTxBuffer::HeadSequence(), m_cWnd, ns3::TcpSocketBase::m_nextTxSequence, m_retxThresh, ns3::TcpSocketBase::m_segmentSize, m_ssThresh, ns3::TcpSocketBase::m_txBuffer, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_INFO, and NS_LOG_LOGIC.
|
protectedvirtual |
Implements ns3::TcpSocketBase.
Definition at line 101 of file tcp-tahoe.cc.
|
protectedvirtual |
Implements ns3::TcpSocketBase.
Definition at line 194 of file tcp-tahoe.cc.
References m_initialCWnd.
|
protectedvirtual |
|
static |
Reimplemented from ns3::TcpSocketBase.
Definition at line 38 of file tcp-tahoe.cc.
References m_cWnd, m_retxThresh, ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().
|
private |
Definition at line 200 of file tcp-tahoe.cc.
References m_cWnd, m_initialCWnd, and ns3::TcpSocketBase::m_segmentSize.
Referenced by Connect(), and Listen().
|
virtual |
We initialize m_cWnd from this function, after attributes initialized
Reimplemented from ns3::TcpSocketBase.
Definition at line 76 of file tcp-tahoe.cc.
References InitializeCwnd(), and NS_LOG_FUNCTION.
|
protectedvirtual |
New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck()
Reimplemented from ns3::TcpSocketBase.
Definition at line 108 of file tcp-tahoe.cc.
References ns3::TracedValue< T >::Get(), m_cWnd, ns3::TcpSocketBase::m_segmentSize, m_ssThresh, NS_LOG_FUNCTION, NS_LOG_INFO, and NS_LOG_LOGIC.
|
protectedvirtual |
Retransmit timeout
Reimplemented from ns3::TcpSocketBase.
Definition at line 151 of file tcp-tahoe.cc.
References ns3::CLOSED, ns3::TcpSocketBase::DoRetransmit(), ns3::ESTABLISHED, ns3::TcpTxBuffer::HeadSequence(), ns3::RttEstimator::IncreaseMultiplier(), m_cWnd, ns3::TcpSocketBase::m_highTxMark, ns3::TcpSocketBase::m_nextTxSequence, ns3::TcpSocketBase::m_rtt, ns3::TcpSocketBase::m_segmentSize, m_ssThresh, ns3::TcpSocketBase::m_state, ns3::TcpSocketBase::m_txBuffer, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_LOGIC, and ns3::TIME_WAIT.
|
protectedvirtual |
Implements ns3::TcpSocketBase.
Definition at line 187 of file tcp-tahoe.cc.
References ns3::CLOSED, m_initialCWnd, ns3::TcpSocketBase::m_state, and NS_ABORT_MSG_UNLESS.
|
protectedvirtual |
Reimplemented from ns3::TcpSocketBase.
Definition at line 168 of file tcp-tahoe.cc.
References ns3::CLOSED, ns3::TcpSocketBase::m_segmentSize, ns3::TcpSocketBase::m_state, and NS_ABORT_MSG_UNLESS.
|
protectedvirtual |
|
protectedvirtual |
Limit the size of in-flight data by cwnd and receiver's rxwin
Reimplemented from ns3::TcpSocketBase.
Definition at line 94 of file tcp-tahoe.cc.
References ns3::TracedValue< T >::Get(), m_cWnd, ns3::TcpSocketBase::m_rWnd, and NS_LOG_FUNCTION.
|
protected |
Definition at line 74 of file tcp-tahoe.h.
Referenced by DupAck(), GetTypeId(), InitializeCwnd(), NewAck(), Retransmit(), and Window().
|
protected |
Definition at line 76 of file tcp-tahoe.h.
Referenced by GetInitialCwnd(), InitializeCwnd(), and SetInitialCwnd().
|
protected |
Definition at line 77 of file tcp-tahoe.h.
Referenced by DupAck(), and GetTypeId().
|
protected |
Definition at line 75 of file tcp-tahoe.h.
Referenced by DupAck(), GetSSThresh(), NewAck(), Retransmit(), and SetSSThresh().