A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ns3::TcpNewReno Class Reference

An implementation of a stream socket using TCP. More...

#include <tcp-newreno.h>

+ Inheritance diagram for ns3::TcpNewReno:

Public Member Functions

 TcpNewReno (void)
 
 TcpNewReno (const TcpNewReno &sock)
 
virtual int Connect (const Address &address)
 
virtual int Listen (void)
 
- Public Member Functions inherited from ns3::TcpSocketBase
 TcpSocketBase (void)
 
 TcpSocketBase (const TcpSocketBase &sock)
 
virtual int Bind (void)
 
virtual int Bind (const Address &address)
 
virtual int Bind6 (void)
 Allocate a local IPv6 endpoint for this socket. More...
 
virtual void BindToNetDevice (Ptr< NetDevice > netdevice)
 
virtual int Close (void)
 
virtual enum SocketErrno GetErrno (void) const
 
virtual Ptr< NodeGetNode (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< PacketRecv (uint32_t maxSize, uint32_t flags)
 
virtual Ptr< PacketRecvFrom (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)
 
- Public Member Functions inherited from ns3::Socket
Ptr< NetDeviceGetBoundNetDevice ()
 Returns socket's bound netdevice, if any. More...
 
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. More...
 
bool IsIpRecvTtl (void) const
 Ask if the socket is currently passing information about IP_TTL up the stack. More...
 
bool IsIpv6RecvHopLimit (void) const
 Ask if the socket is currently passing information about IPv6 Hop Limit up the stack. More...
 
bool IsIpv6RecvTclass (void) const
 Ask if the socket is currently passing information about IPv6 Traffic Class up the stack. More...
 
bool IsRecvPktInfo () const
 Get status indicating whether enable/disable packet information to socket. More...
 
Ptr< PacketRecv (void)
 Read a single packet from the socket. More...
 
int Recv (uint8_t *buf, uint32_t size, uint32_t flags)
 Recv data (or dummy data) from the remote host. More...
 
Ptr< PacketRecvFrom (Address &fromAddress)
 Read a single packet from the socket and retrieve the sender address. More...
 
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. More...
 
int Send (Ptr< Packet > p)
 Send data (or dummy data) to the remote host. More...
 
int Send (const uint8_t *buf, uint32_t size, uint32_t flags)
 Send data (or dummy data) to the remote host. More...
 
int SendTo (const uint8_t *buf, uint32_t size, uint32_t flags, const Address &address)
 Send data to a specified peer. More...
 
void SetAcceptCallback (Callback< bool, Ptr< Socket >, const Address & > connectionRequest, Callback< void, Ptr< Socket >, const Address & > newConnectionCreated)
 Accept connection requests from remote hosts. More...
 
void SetCloseCallbacks (Callback< void, Ptr< Socket > > normalClose, Callback< void, Ptr< Socket > > errorClose)
 Detect socket recv() events such as graceful shutdown or error. More...
 
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. More...
 
void SetDataSentCallback (Callback< void, Ptr< Socket >, uint32_t > dataSent)
 Notify application when a packet has been sent from transport protocol (non-standard socket call) More...
 
void SetIpRecvTos (bool ipv4RecvTos)
 Tells a socket to pass information about IP Type of Service up the stack. More...
 
void SetIpRecvTtl (bool ipv4RecvTtl)
 Tells a socket to pass information about IP_TTL up the stack. More...
 
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. More...
 
void SetIpv6RecvTclass (bool ipv6RecvTclass)
 Tells a socket to pass information about IPv6 Traffic Class up the stack. More...
 
void SetIpv6Tclass (int ipTclass)
 
void SetRecvCallback (Callback< void, Ptr< Socket > >)
 Notify application when new data is available to be read. More...
 
void SetRecvPktInfo (bool flag)
 Enable/Disable receive packet information to socket. More...
 
void SetSendCallback (Callback< void, Ptr< Socket >, uint32_t > sendCb)
 Notify application when space in transmit buffer is added. More...
 
- Public Member Functions inherited from ns3::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)
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount (const SimpleRefCount &o)
 
uint32_t GetReferenceCount (void) const
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 
void Ref (void) const
 
void Unref (void) const
 
- Public Member Functions inherited from ns3::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)
 
- Static Public Member Functions inherited from ns3::TcpSocketBase
static TypeId GetTypeId (void)
 
- Static Public Member Functions inherited from ns3::TcpSocket
static TypeId GetTypeId (void)
 
- Static Public Member Functions inherited from ns3::Socket
static Ptr< SocketCreateSocket (Ptr< Node > node, TypeId tid)
 
static TypeId GetTypeId (void)
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId (void)
 
- Static Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
static void Cleanup (void)
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId (void)
 

Protected Member Functions

virtual void DupAck (const TcpHeader &t, uint32_t count)
 
virtual Ptr< TcpSocketBaseFork (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)
 
- Protected Member Functions inherited from ns3::TcpSocketBase
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. More...
 
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. More...
 
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)
 
- Protected Member Functions inherited from ns3::Socket
virtual void DoDispose (void)
 
bool IsManualIpTos (void) const
 
bool IsManualIpTtl (void) const
 
bool IsManualIpv6HopLimit (void) const
 
bool IsManualIpv6Tclass (void) const
 
void NotifyConnectionFailed (void)
 
bool NotifyConnectionRequest (const Address &from)
 
void NotifyConnectionSucceeded (void)
 
void NotifyDataRecv (void)
 
void NotifyDataSent (uint32_t size)
 
void NotifyErrorClose (void)
 
void NotifyNewConnectionCreated (Ptr< Socket > socket, const Address &from)
 
void NotifyNormalClose (void)
 
void NotifySend (uint32_t spaceAvailable)
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 
virtual void DoInitialize (void)
 
virtual void NotifyNewAggregate (void)
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 
virtual void NotifyConstructionCompleted (void)
 

Protected Attributes

TracedValue< uint32_t > m_cWnd
 
bool m_inFastRec
 
uint32_t m_initialCWnd
 
bool m_limitedTx
 
SequenceNumber32 m_recover
 
uint32_t m_retxThresh
 
uint32_t m_ssThresh
 
- Protected Attributes inherited from ns3::TcpSocketBase
bool m_closeNotified
 
bool m_closeOnEmpty
 
uint32_t m_cnCount
 
uint32_t m_cnRetries
 
Time m_cnTimeout
 
bool m_connected
 
uint32_t m_delAckCount
 
EventId m_delAckEvent
 
uint32_t m_delAckMaxCount
 
Time m_delAckTimeout
 
uint32_t m_dupAckCount
 
Ipv4EndPointm_endPoint
 
Ipv6EndPointm_endPoint6
 
enum SocketErrno m_errno
 
TracedValue< SequenceNumber32m_highTxMark
 
Callback< void, Ipv4Address,
uint8_t, uint8_t, uint8_t,
uint32_t > 
m_icmpCallback
 
Callback< void, Ipv6Address,
uint8_t, uint8_t, uint8_t,
uint32_t > 
m_icmpCallback6
 
EventId m_lastAckEvent
 
TracedValue< Timem_lastRtt
 
uint16_t m_maxWinSize
 
double m_msl
 
TracedValue< SequenceNumber32m_nextTxSequence
 
Ptr< Nodem_node
 
bool m_noDelay
 
EventId m_persistEvent
 
Time m_persistTimeout
 
EventId m_retxEvent
 
TracedValue< Timem_rto
 
Ptr< RttEstimatorm_rtt
 
TracedValue< uint32_t > m_rWnd
 
TcpRxBuffer m_rxBuffer
 
uint32_t m_segmentSize
 
bool m_shutdownRecv
 
bool m_shutdownSend
 
TracedValue< TcpStates_t > m_state
 
Ptr< TcpL4Protocolm_tcp
 
EventId m_timewaitEvent
 
TcpTxBuffer m_txBuffer
 
- Protected Attributes inherited from ns3::Socket
Ptr< NetDevicem_boundnetdevice
 
bool m_recvPktInfo
 

Private Member Functions

void InitializeCwnd (void)
 

Additional Inherited Members

- Public Types inherited from ns3::Socket
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 Public Attributes inherited from ns3::TcpSocket
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" }
 

Detailed Description

An implementation of a stream socket using TCP.

This class contains the NewReno implementation of TCP, as of RFC2582.

Config Paths

ns3::TcpNewReno is accessible through the following paths with Config::Set and Config::Connect:

  • /NodeList/[i]/$ns3::TcpL4Protocol/SocketList/[i]/$ns3::TcpNewReno

Attributes

  • ReTxThreshold: Threshold for fast retransmit
  • LimitedTransmit: Enable limited transmit
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: construct write read

Attributes defined in parent class ns3::TcpSocketBase

  • MaxSegLifetime: Maximum segment lifetime in seconds, use for TIME_WAIT state transition to CLOSED state
    • Set with class: ns3::DoubleValue
    • Underlying type: double 0:1.79769e+308
    • Initial value: 120
    • Flags: construct write read
  • MaxWindowSize: Max size of advertised window
  • IcmpCallback: Callback invoked whenever an icmp error is received on this socket.
  • IcmpCallback6: Callback invoked whenever an icmpv6 error is received on this socket.

Attributes defined in parent class ns3::TcpSocket

  • SndBufSize: TcpSocket maximum transmit buffer size (bytes)
  • RcvBufSize: TcpSocket maximum receive buffer size (bytes)
  • SegmentSize: TCP maximum segment size in bytes (may be adjusted based on MTU discovery)
  • SlowStartThreshold: TCP slow start threshold (bytes)
  • InitialCwnd: TCP initial congestion window size (segments)
  • ConnTimeout: TCP retransmission timeout when opening connection (seconds)
    • Set with class: TimeValue
    • Underlying type: Time
    • Initial value: +3000000000.0ns
    • Flags: construct write read
  • ConnCount: Number of connection attempts (SYN retransmissions) before returning failure
  • DelAckTimeout: Timeout value for TCP delayed acks, in seconds
    • Set with class: TimeValue
    • Underlying type: Time
    • Initial value: +200000000.0ns
    • Flags: construct write read
  • DelAckCount: Number of packets to wait before sending a TCP ack
  • TcpNoDelay: Set to true to disable Nagle's algorithm
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: true
    • Flags: construct write read
  • PersistTimeout: Persist timeout to probe for rx window
    • Set with class: TimeValue
    • Underlying type: Time
    • Initial value: +6000000000.0ns
    • Flags: construct write read

TraceSources

  • CongestionWindow: The TCP connection's congestion window

TraceSources defined in parent class ns3::TcpSocketBase

  • RTO: Retransmission timeout
  • RTT: Last RTT sample
  • NextTxSequence: Next sequence number to send (SND.NXT)
  • HighestSequence: Highest sequence number ever sent in socket's life time
  • State: TCP state
  • RWND: Remote side's flow control window

Definition at line 36 of file tcp-newreno.h.

Constructor & Destructor Documentation

ns3::TcpNewReno::TcpNewReno ( void  )

Create an unbound tcp socket.

Definition at line 58 of file tcp-newreno.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

int ns3::TcpNewReno::Connect ( const Address address)
virtual

We initialize m_cWnd from this function, after attributes initialized

Reimplemented from ns3::TcpSocketBase.

Definition at line 94 of file tcp-newreno.cc.

References ns3::TcpSocketBase::Connect(), and NS_LOG_FUNCTION.

void ns3::TcpNewReno::DupAck ( const TcpHeader t,
uint32_t  count 
)
protectedvirtual

Cut cwnd and enter fast recovery mode upon triple dupack

Implements ns3::TcpSocketBase.

Definition at line 162 of file tcp-newreno.cc.

References NS_LOG_FUNCTION, NS_LOG_INFO, ns3::TcpSocketBase::SendDataPacket(), ns3::TcpSocketBase::SendPendingData(), and ns3::TcpTxBuffer::SizeFromSequence().

int ns3::TcpNewReno::Listen ( void  )
virtual

We initialize m_cWnd from this function, after attributes initialized

Reimplemented from ns3::TcpSocketBase.

Definition at line 85 of file tcp-newreno.cc.

References ns3::TcpSocketBase::Listen(), and NS_LOG_FUNCTION.

void ns3::TcpNewReno::NewAck ( SequenceNumber32 const &  seq)
protectedvirtual

New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck()

Reimplemented from ns3::TcpSocketBase.

Definition at line 117 of file tcp-newreno.cc.

References ns3::TcpTxBuffer::HeadSequence(), NS_LOG_FUNCTION, NS_LOG_INFO, and NS_LOG_LOGIC.

void ns3::TcpNewReno::Retransmit ( void  )
protectedvirtual

Retransmit timeout

Reimplemented from ns3::TcpSocketBase.

Definition at line 191 of file tcp-newreno.cc.

References ns3::TcpTxBuffer::HeadSequence(), ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_INFO, and NS_LOG_LOGIC.

uint32_t ns3::TcpNewReno::Window ( void  )
protectedvirtual

Limit the size of in-flight data by cwnd and receiver's rxwin

Reimplemented from ns3::TcpSocketBase.

Definition at line 103 of file tcp-newreno.cc.

References NS_LOG_FUNCTION.


The documentation for this class was generated from the following files: