A Discrete-Event Network Simulator
API
ns3::TcpDctcp Class Reference

An implementation of DCTCP. More...

#include "tcp-dctcp.h"

+ Inheritance diagram for ns3::TcpDctcp:
+ Collaboration diagram for ns3::TcpDctcp:

Public Types

typedef void(* CongestionEstimateTracedCallback) (uint32_t bytesAcked, uint32_t bytesMarked, double alpha)
 TracedCallback signature for DCTCP update of congestion state. More...
 

Public Member Functions

 TcpDctcp ()
 Create an unbound tcp socket. More...
 
 TcpDctcp (const TcpDctcp &sock)
 Copy constructor. More...
 
 ~TcpDctcp () override
 Destructor. More...
 
void CwndEvent (Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCAEvent_t event) override
 Trigger events/calculations on occurrence of congestion window event. More...
 
Ptr< TcpCongestionOpsFork () override
 Copy the congestion control algorithm across sockets. More...
 
std::string GetName () const override
 Get the name of the congestion control algorithm. More...
 
uint32_t GetSsThresh (Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight) override
 Get the slow start threshold after a loss event. More...
 
void Init (Ptr< TcpSocketState > tcb) override
 Set configuration required by congestion control algorithm, This method will force DctcpEcn mode and will force usage of either ECT(0) or ECT(1) (depending on the 'UseEct0' attribute), despite any other configuration in the base classes. More...
 
void PktsAcked (Ptr< TcpSocketState > tcb, uint32_t segmentsAcked, const Time &rtt) override
 Timing information on received ACK. More...
 
- Public Member Functions inherited from ns3::TcpLinuxReno
 TcpLinuxReno ()
 
 TcpLinuxReno (const TcpLinuxReno &sock)
 Copy constructor. More...
 
 ~TcpLinuxReno () override
 
Ptr< TcpCongestionOpsFork () override
 Copy the congestion control algorithm across sockets. More...
 
std::string GetName () const override
 Get the name of the congestion control algorithm. More...
 
uint32_t GetSsThresh (Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight) override
 Get the slow start threshold after a loss event. More...
 
void IncreaseWindow (Ptr< TcpSocketState > tcb, uint32_t segmentsAcked) override
 Congestion avoidance algorithm implementation. More...
 
- Public Member Functions inherited from ns3::TcpCongestionOps
 TcpCongestionOps ()
 
 TcpCongestionOps (const TcpCongestionOps &other)
 Copy constructor. More...
 
 ~TcpCongestionOps () override
 
virtual void CongControl (Ptr< TcpSocketState > tcb, const TcpRateOps::TcpRateConnection &rc, const TcpRateOps::TcpRateSample &rs)
 Called when packets are delivered to update cwnd and pacing rate. More...
 
virtual void CongestionStateSet (Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCongState_t newState)
 Trigger events/calculations specific to a congestion state. More...
 
virtual bool HasCongControl () const
 Returns true when Congestion Control Algorithm implements CongControl. More...
 
virtual void Init (Ptr< TcpSocketState > tcb[[maybe_unused]])
 Set configuration required by congestion control algorithm. More...
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor. More...
 
 ~Object () override
 Destructor. More...
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together. More...
 
void Dispose ()
 Dispose of this Object. More...
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one. More...
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object. More...
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object. More...
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object. More...
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId. More...
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object. More...
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one. More...
 
bool IsInitialized () const
 Check if the object has been initialized. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o[[maybe_unused]])
 Copy constructor. More...
 
uint32_t GetReferenceCount () const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o[[maybe_unused]])
 Assignment operator. More...
 
void Ref () const
 Increment the reference count. More...
 
void Unref () const
 Decrement the reference count. More...
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor. More...
 
void GetAttribute (std::string name, AttributeValue &value) const
 Get the value of an attribute, raising fatal errors if unsuccessful. More...
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors. More...
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful. More...
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors. More...
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context. More...
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context. More...
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context. More...
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context. More...
 

Static Public Member Functions

static TypeId GetTypeId ()
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::TcpLinuxReno
static TypeId GetTypeId ()
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::TcpCongestionOps
static TypeId GetTypeId ()
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID. More...
 

Private Member Functions

void CeState0to1 (Ptr< TcpSocketState > tcb)
 Changes state of m_ceState to true. More...
 
void CeState1to0 (Ptr< TcpSocketState > tcb)
 Changes state of m_ceState to false. More...
 
void InitializeDctcpAlpha (double alpha)
 Initialize the value of m_alpha. More...
 
void Reset (Ptr< TcpSocketState > tcb)
 Resets the value of m_ackedBytesEcn, m_ackedBytesTotal and m_nextSeq. More...
 
void UpdateAckReserved (Ptr< TcpSocketState > tcb, const TcpSocketState::TcpCAEvent_t event)
 Updates the value of m_delayedAckReserved. More...
 

Private Attributes

uint32_t m_ackedBytesEcn
 Number of acked bytes which are marked. More...
 
uint32_t m_ackedBytesTotal
 Total number of acked bytes. More...
 
double m_alpha
 Parameter used to estimate the amount of network congestion. More...
 
bool m_ceState
 DCTCP Congestion Experienced state. More...
 
bool m_delayedAckReserved
 Delayed Ack state. More...
 
double m_g
 Estimation gain. More...
 
bool m_initialized
 Whether DCTCP has been initialized. More...
 
SequenceNumber32 m_nextSeq
 TCP sequence number threshold for beginning a new observation window. More...
 
bool m_nextSeqFlag
 Variable used in setting the value of m_nextSeq for first time. More...
 
SequenceNumber32 m_priorRcvNxt
 Sequence number of the first missing byte in data. More...
 
bool m_priorRcvNxtFlag
 Variable used in setting the value of m_priorRcvNxt for first time. More...
 
TracedCallback< uint32_t, uint32_t, double > m_traceCongestionEstimate
 Callback pointer for congestion state update. More...
 
bool m_useEct0
 Use ECT(0) for ECN codepoint. More...
 

Additional Inherited Members

- Protected Member Functions inherited from ns3::TcpLinuxReno
virtual void CongestionAvoidance (Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
 Congestion avoidance phase handler. More...
 
virtual uint32_t SlowStart (Ptr< TcpSocketState > tcb, uint32_t segmentsAcked)
 Slow start phase handler. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. More...
 
virtual void DoDispose ()
 Destructor implementation. More...
 
virtual void DoInitialize ()
 Initialize() implementation. More...
 
virtual void NotifyNewAggregate ()
 Notify all Objects aggregated to this one of a new Object being aggregated. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes. More...
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed. More...
 

Detailed Description

An implementation of DCTCP.

This model implements all of the endpoint capabilities mentioned in the DCTCP SIGCOMM paper. Note that this model presently will not do any fallback to RFC 5681 congestion avoidance as specified in RFC 8257 Section 3.5, so it should only be used in a simulation that does not involve packet loss.

Definition at line 42 of file tcp-dctcp.h.

Member Typedef Documentation

◆ CongestionEstimateTracedCallback

typedef void(* ns3::TcpDctcp::CongestionEstimateTracedCallback) (uint32_t bytesAcked, uint32_t bytesMarked, double alpha)

TracedCallback signature for DCTCP update of congestion state.

Parameters
[in]bytesAckedBytes acked in this observation window
[in]bytesMarkedBytes marked in this observation window
[in]alphaNew alpha (congestion estimate) value

Definition at line 87 of file tcp-dctcp.h.

Constructor & Destructor Documentation

◆ TcpDctcp() [1/2]

ns3::TcpDctcp::TcpDctcp ( )

Create an unbound tcp socket.

Definition at line 71 of file tcp-dctcp.cc.

References NS_LOG_FUNCTION.

◆ TcpDctcp() [2/2]

ns3::TcpDctcp::TcpDctcp ( const TcpDctcp sock)

Copy constructor.

Parameters
sockthe object to copy

Definition at line 86 of file tcp-dctcp.cc.

References NS_LOG_FUNCTION.

◆ ~TcpDctcp()

ns3::TcpDctcp::~TcpDctcp ( )
override

Destructor.

Definition at line 104 of file tcp-dctcp.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

◆ CeState0to1()

void ns3::TcpDctcp::CeState0to1 ( Ptr< TcpSocketState tcb)
private

Changes state of m_ceState to true.

Parameters
tcbinternal congestion state

Definition at line 183 of file tcp-dctcp.cc.

References ns3::TcpHeader::ACK, ns3::TcpSocketState::ECN_CE_RCVD, m_ceState, m_delayedAckReserved, ns3::TcpSocketState::m_ecnState, m_priorRcvNxt, m_priorRcvNxtFlag, ns3::TcpSocketState::m_rxBuffer, ns3::TcpSocketState::m_sendEmptyPacketCallback, and NS_LOG_FUNCTION.

Referenced by CwndEvent().

+ Here is the caller graph for this function:

◆ CeState1to0()

void ns3::TcpDctcp::CeState1to0 ( Ptr< TcpSocketState tcb)
private

Changes state of m_ceState to false.

Parameters
tcbinternal congestion state

Definition at line 210 of file tcp-dctcp.cc.

References ns3::TcpHeader::ACK, ns3::TcpHeader::ECE, ns3::TcpSocketState::ECN_CE_RCVD, ns3::TcpSocketState::ECN_IDLE, ns3::TcpSocketState::ECN_SENDING_ECE, ns3::TracedValue< T >::Get(), m_ceState, m_delayedAckReserved, ns3::TcpSocketState::m_ecnState, m_priorRcvNxt, m_priorRcvNxtFlag, ns3::TcpSocketState::m_rxBuffer, ns3::TcpSocketState::m_sendEmptyPacketCallback, and NS_LOG_FUNCTION.

Referenced by CwndEvent().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CwndEvent()

void ns3::TcpDctcp::CwndEvent ( Ptr< TcpSocketState tcb,
const TcpSocketState::TcpCAEvent_t  event 
)
overridevirtual

Trigger events/calculations on occurrence of congestion window event.

This function mimics the function cwnd_event in Linux. The function is called in case of congestion window events.

Parameters
tcbinternal congestion state
eventthe event which triggered this function

Reimplemented from ns3::TcpCongestionOps.

Definition at line 266 of file tcp-dctcp.cc.

References ns3::TcpSocketState::CA_EVENT_DELAYED_ACK, ns3::TcpSocketState::CA_EVENT_ECN_IS_CE, ns3::TcpSocketState::CA_EVENT_ECN_NO_CE, ns3::TcpSocketState::CA_EVENT_NON_DELAYED_ACK, CeState0to1(), CeState1to0(), NS_LOG_FUNCTION, and UpdateAckReserved().

+ Here is the call graph for this function:

◆ Fork()

Ptr< TcpCongestionOps > ns3::TcpDctcp::Fork ( )
overridevirtual

Copy the congestion control algorithm across sockets.

Returns
a pointer of the copied object

Implements ns3::TcpCongestionOps.

Definition at line 110 of file tcp-dctcp.cc.

References NS_LOG_FUNCTION.

◆ GetName()

std::string ns3::TcpDctcp::GetName ( ) const
overridevirtual

Get the name of the congestion control algorithm.

Returns
A string identifying the name

Implements ns3::TcpCongestionOps.

Definition at line 66 of file tcp-dctcp.cc.

◆ GetSsThresh()

uint32_t ns3::TcpDctcp::GetSsThresh ( Ptr< const TcpSocketState tcb,
uint32_t  bytesInFlight 
)
overridevirtual

Get the slow start threshold after a loss event.

Is guaranteed that the congestion control state (TcpAckState_t) is changed BEFORE the invocation of this method. The implementer should return the slow start threshold (and not change it directly) because, in the future, the TCP implementation may require to instantly recover from a loss event (e.g. when there is a network with an high reordering factor).

Parameters
tcbinternal congestion state
bytesInFlighttotal bytes in flight
Returns
Slow start threshold

Implements ns3::TcpCongestionOps.

Definition at line 131 of file tcp-dctcp.cc.

References m_alpha, and NS_LOG_FUNCTION.

◆ GetTypeId()

TypeId ns3::TcpDctcp::GetTypeId ( void  )
static

Get the type ID.

Returns
the object TypeId

Definition at line 36 of file tcp-dctcp.cc.

References InitializeDctcpAlpha(), m_g, m_traceCongestionEstimate, m_useEct0, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakeDoubleAccessor(), ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ Init()

void ns3::TcpDctcp::Init ( Ptr< TcpSocketState tcb)
override

Set configuration required by congestion control algorithm, This method will force DctcpEcn mode and will force usage of either ECT(0) or ECT(1) (depending on the 'UseEct0' attribute), despite any other configuration in the base classes.

Parameters
tcbinternal congestion state

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

References ns3::TcpSocketState::DctcpEcn, ns3::TcpSocketState::Ect0, ns3::TcpSocketState::Ect1, ns3::TcpSocketState::m_ecnMode, ns3::TcpSocketState::m_ectCodePoint, m_initialized, ns3::TcpSocketState::m_useEcn, m_useEct0, NS_LOG_FUNCTION, NS_LOG_INFO, and ns3::TcpSocketState::On.

◆ InitializeDctcpAlpha()

void ns3::TcpDctcp::InitializeDctcpAlpha ( double  alpha)
private

Initialize the value of m_alpha.

Parameters
alphaDCTCP alpha parameter

Definition at line 166 of file tcp-dctcp.cc.

References m_alpha, m_initialized, NS_ABORT_MSG_IF, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ PktsAcked()

void ns3::TcpDctcp::PktsAcked ( Ptr< TcpSocketState tcb,
uint32_t  segmentsAcked,
const Time rtt 
)
overridevirtual

Timing information on received ACK.

The function is called every time an ACK is received (only one time also for cumulative ACKs) and contains timing information. It is optional (congestion controls need not implement it) and the default implementation does nothing.

Parameters
tcbinternal congestion state
segmentsAckedcount of segments acked
rttlast rtt

Reimplemented from ns3::TcpCongestionOps.

Definition at line 138 of file tcp-dctcp.cc.

References ns3::TcpSocketState::ECN_ECE_RCVD, m_ackedBytesEcn, m_ackedBytesTotal, m_alpha, ns3::TcpSocketState::m_ecnState, m_g, ns3::TcpSocketState::m_lastAckedSeq, m_nextSeq, m_nextSeqFlag, ns3::TcpSocketState::m_nextTxSequence, ns3::TcpSocketState::m_segmentSize, m_traceCongestionEstimate, NS_LOG_FUNCTION, NS_LOG_INFO, and Reset().

+ Here is the call graph for this function:

◆ Reset()

void ns3::TcpDctcp::Reset ( Ptr< TcpSocketState tcb)
private

Resets the value of m_ackedBytesEcn, m_ackedBytesTotal and m_nextSeq.

Parameters
tcbinternal congestion state

Definition at line 174 of file tcp-dctcp.cc.

References m_ackedBytesEcn, m_ackedBytesTotal, m_nextSeq, ns3::TcpSocketState::m_nextTxSequence, and NS_LOG_FUNCTION.

Referenced by PktsAcked().

+ Here is the caller graph for this function:

◆ UpdateAckReserved()

void ns3::TcpDctcp::UpdateAckReserved ( Ptr< TcpSocketState tcb,
const TcpSocketState::TcpCAEvent_t  event 
)
private

Updates the value of m_delayedAckReserved.

Parameters
tcbinternal congestion state
eventthe congestion window event

Definition at line 242 of file tcp-dctcp.cc.

References ns3::TcpSocketState::CA_EVENT_DELAYED_ACK, ns3::TcpSocketState::CA_EVENT_NON_DELAYED_ACK, m_delayedAckReserved, and NS_LOG_FUNCTION.

Referenced by CwndEvent().

+ Here is the caller graph for this function:

Member Data Documentation

◆ m_ackedBytesEcn

uint32_t ns3::TcpDctcp::m_ackedBytesEcn
private

Number of acked bytes which are marked.

Definition at line 134 of file tcp-dctcp.h.

Referenced by PktsAcked(), and Reset().

◆ m_ackedBytesTotal

uint32_t ns3::TcpDctcp::m_ackedBytesTotal
private

Total number of acked bytes.

Definition at line 135 of file tcp-dctcp.h.

Referenced by PktsAcked(), and Reset().

◆ m_alpha

double ns3::TcpDctcp::m_alpha
private

Parameter used to estimate the amount of network congestion.

Definition at line 138 of file tcp-dctcp.h.

Referenced by GetSsThresh(), InitializeDctcpAlpha(), and PktsAcked().

◆ m_ceState

bool ns3::TcpDctcp::m_ceState
private

DCTCP Congestion Experienced state.

Definition at line 142 of file tcp-dctcp.h.

Referenced by CeState0to1(), and CeState1to0().

◆ m_delayedAckReserved

bool ns3::TcpDctcp::m_delayedAckReserved
private

Delayed Ack state.

Definition at line 143 of file tcp-dctcp.h.

Referenced by CeState0to1(), CeState1to0(), and UpdateAckReserved().

◆ m_g

double ns3::TcpDctcp::m_g
private

Estimation gain.

Definition at line 144 of file tcp-dctcp.h.

Referenced by GetTypeId(), and PktsAcked().

◆ m_initialized

bool ns3::TcpDctcp::m_initialized
private

Whether DCTCP has been initialized.

Definition at line 146 of file tcp-dctcp.h.

Referenced by Init(), and InitializeDctcpAlpha().

◆ m_nextSeq

SequenceNumber32 ns3::TcpDctcp::m_nextSeq
private

TCP sequence number threshold for beginning a new observation window.

Definition at line 140 of file tcp-dctcp.h.

Referenced by PktsAcked(), and Reset().

◆ m_nextSeqFlag

bool ns3::TcpDctcp::m_nextSeqFlag
private

Variable used in setting the value of m_nextSeq for first time.

Definition at line 141 of file tcp-dctcp.h.

Referenced by PktsAcked().

◆ m_priorRcvNxt

SequenceNumber32 ns3::TcpDctcp::m_priorRcvNxt
private

Sequence number of the first missing byte in data.

Definition at line 136 of file tcp-dctcp.h.

Referenced by CeState0to1(), and CeState1to0().

◆ m_priorRcvNxtFlag

bool ns3::TcpDctcp::m_priorRcvNxtFlag
private

Variable used in setting the value of m_priorRcvNxt for first time.

Definition at line 137 of file tcp-dctcp.h.

Referenced by CeState0to1(), and CeState1to0().

◆ m_traceCongestionEstimate

TracedCallback<uint32_t, uint32_t, double> ns3::TcpDctcp::m_traceCongestionEstimate
private

Callback pointer for congestion state update.

Definition at line 150 of file tcp-dctcp.h.

Referenced by GetTypeId(), and PktsAcked().

◆ m_useEct0

bool ns3::TcpDctcp::m_useEct0
private

Use ECT(0) for ECN codepoint.

Definition at line 145 of file tcp-dctcp.h.

Referenced by GetTypeId(), and Init().


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