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

Linux management and generation of Rate information for TCP. More...

#include "tcp-rate-ops.h"

+ Inheritance diagram for ns3::TcpRateLinux:
+ Collaboration diagram for ns3::TcpRateLinux:

Public Types

typedef void(* TcpRateSampleUpdated) (const TcpRateSample &sample)
 TracedCallback signature for tcp rate sample update events. More...
 
typedef void(* TcpRateUpdated) (const TcpRateConnection &rate)
 TracedCallback signature for tcp rate update events. More...
 

Public Member Functions

 ~TcpRateLinux () override
 
void CalculateAppLimited (uint32_t cWnd, uint32_t in_flight, uint32_t segmentSize, const SequenceNumber32 &tailSeq, const SequenceNumber32 &nextTx, const uint32_t lostOut, const uint32_t retransOut) override
 If a gap is detected between sends, it means we are app-limited. More...
 
const TcpRateSampleGenerateSample (uint32_t delivered, uint32_t lost, bool is_sack_reneg, uint32_t priorInFlight, const Time &minRtt) override
 Generate a TcpRateSample to feed a congestion avoidance algorithm. More...
 
const TcpRateConnectionGetConnectionRate () override
 
void SkbDelivered (TcpTxItem *skb) override
 Update the Rate information after an item is received. More...
 
void SkbSent (TcpTxItem *skb, bool isStartOfTransmission) override
 Put the rate information inside the sent skb. 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::TcpRateOps
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 Attributes

TcpRateConnection m_rate
 Rate information. More...
 
TcpRateSample m_rateSample
 Rate sample (continuously updated) More...
 
TracedCallback< const TcpRateSample & > m_rateSampleTrace
 Rate Sample trace. More...
 
TracedCallback< const TcpRateConnection & > m_rateTrace
 Rate trace. More...
 

Additional Inherited Members

- 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

Linux management and generation of Rate information for TCP.

This class is inspired by what Linux is performing in tcp_rate.c

Definition at line 195 of file tcp-rate-ops.h.

Member Typedef Documentation

◆ TcpRateSampleUpdated

typedef void(* ns3::TcpRateLinux::TcpRateSampleUpdated) (const TcpRateSample &sample)

TracedCallback signature for tcp rate sample update events.

The callback will be fired each time the rate sample is updated.

Parameters
[in]sampleThe rate sample that will be passed to congestion control algorithms.

Definition at line 246 of file tcp-rate-ops.h.

◆ TcpRateUpdated

typedef void(* ns3::TcpRateLinux::TcpRateUpdated) (const TcpRateConnection &rate)

TracedCallback signature for tcp rate update events.

The callback will be fired each time the rate is updated.

Parameters
[in]rateThe rate information.

Definition at line 236 of file tcp-rate-ops.h.

Constructor & Destructor Documentation

◆ ~TcpRateLinux()

ns3::TcpRateLinux::~TcpRateLinux ( )
inlineoverride

Definition at line 205 of file tcp-rate-ops.h.

Member Function Documentation

◆ CalculateAppLimited()

void ns3::TcpRateLinux::CalculateAppLimited ( uint32_t  cWnd,
uint32_t  in_flight,
uint32_t  segmentSize,
const SequenceNumber32 tailSeq,
const SequenceNumber32 nextTx,
const uint32_t  lostOut,
const uint32_t  retransOut 
)
overridevirtual

If a gap is detected between sends, it means we are app-limited.

TODO What the Linux kernel is setting in tp->app_limited? https://elixir.bootlin.com/linux/latest/source/net/ipv4/tcp_rate.c#L177

Parameters
cWndCongestion Window
in_flightIn Flight size (in bytes)
segmentSizeSegment size
tailSeqTail Sequence
nextTxNextTx
lostOutNumber of lost bytes
retransOutNumber of retransmitted bytes

Implements ns3::TcpRateOps.

Definition at line 140 of file tcp-rate-ops.cc.

References ns3::TcpRateOps::TcpRateConnection::m_appLimited, ns3::TcpRateOps::TcpRateConnection::m_delivered, m_rate, m_rateTrace, NS_LOG_FUNCTION, and segmentSize.

Referenced by TcpRateLinuxBasicTest::SendSkb().

+ Here is the caller graph for this function:

◆ GenerateSample()

const TcpRateOps::TcpRateSample & ns3::TcpRateLinux::GenerateSample ( uint32_t  delivered,
uint32_t  lost,
bool  is_sack_reneg,
uint32_t  priorInFlight,
const Time minRtt 
)
overridevirtual

Generate a TcpRateSample to feed a congestion avoidance algorithm.

This function will be called after an ACK (or a SACK) is received. The (S)ACK carries some implicit information, such as how many segments have been lost or delivered. These values will be this function input.

Parameters
deliverednumber of delivered segments (e.g., receiving a cumulative ACK means having more than 1 segment delivered) relative to the most recent (S)ACK received
lostnumber of segments that we detected as lost after the reception of the most recent (S)ACK
priorInFlightnumber of segments previously considered in flight
is_sack_renegIs SACK reneged?
minRttMinimum RTT so far
Returns
The TcpRateSample that will be used for CA

Implements ns3::TcpRateOps.

Definition at line 57 of file tcp-rate-ops.cc.

References ns3::Time::GetSeconds(), ns3::TcpRateOps::TcpRateSample::m_ackedSacked, ns3::TcpRateOps::TcpRateSample::m_ackElapsed, ns3::TcpRateOps::TcpRateConnection::m_appLimited, ns3::TcpRateOps::TcpRateSample::m_bytesLoss, ns3::TcpRateOps::TcpRateSample::m_delivered, ns3::TcpRateOps::TcpRateConnection::m_delivered, ns3::TcpRateOps::TcpRateSample::m_deliveryRate, ns3::TcpRateOps::TcpRateSample::m_interval, ns3::TcpRateOps::TcpRateSample::m_isAppLimited, ns3::TcpRateOps::TcpRateSample::m_priorDelivered, ns3::TcpRateOps::TcpRateSample::m_priorInFlight, ns3::TcpRateOps::TcpRateSample::m_priorTime, m_rate, ns3::TcpRateOps::TcpRateConnection::m_rateAppLimited, ns3::TcpRateOps::TcpRateConnection::m_rateDelivered, ns3::TcpRateOps::TcpRateConnection::m_rateInterval, m_rateSample, m_rateSampleTrace, ns3::TcpRateOps::TcpRateSample::m_sendElapsed, max, NS_LOG_FUNCTION, NS_LOG_INFO, and ns3::Seconds().

+ Here is the call graph for this function:

◆ GetConnectionRate()

const TcpRateConnection& ns3::TcpRateLinux::GetConnectionRate ( )
inlineoverridevirtual
Returns
The information about the rate connection

Implements ns3::TcpRateOps.

Definition at line 224 of file tcp-rate-ops.h.

References m_rate.

◆ GetTypeId()

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

Get the type ID.

Get the type ID.

Returns
the object TypeId

Definition at line 39 of file tcp-rate-ops.cc.

References m_rateSampleTrace, m_rateTrace, ns3::MakeTraceSourceAccessor(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ SkbDelivered()

void ns3::TcpRateLinux::SkbDelivered ( TcpTxItem skb)
overridevirtual

Update the Rate information after an item is received.

When an skb is sacked or acked, we fill in the rate sample with the (prior) delivery information when the skb was last transmitted.

If an ACK (s)acks multiple skbs (e.g., stretched-acks), this function is called multiple times. We favor the information from the most recently sent skb, i.e., the skb with the highest prior_delivered count.

Parameters
skbThe SKB delivered ((s)ACKed)

Implements ns3::TcpRateOps.

Definition at line 170 of file tcp-rate-ops.cc.

References ns3::TcpTxItem::GetLastSent(), ns3::TcpTxItem::GetRateInformation(), ns3::TcpTxItem::GetSeqSize(), ns3::TcpRateOps::TcpRateSample::m_ackElapsed, ns3::TcpRateOps::TcpRateConnection::m_delivered, ns3::TcpTxItem::RateInformation::m_delivered, ns3::TcpRateOps::TcpRateConnection::m_deliveredTime, ns3::TcpTxItem::RateInformation::m_deliveredTime, ns3::TcpTxItem::RateInformation::m_firstSent, ns3::TcpRateOps::TcpRateConnection::m_firstSentTime, ns3::TcpRateOps::TcpRateSample::m_isAppLimited, ns3::TcpTxItem::RateInformation::m_isAppLimited, ns3::TcpRateOps::TcpRateSample::m_priorDelivered, ns3::TcpRateOps::TcpRateSample::m_priorTime, m_rate, m_rateSample, m_rateSampleTrace, m_rateTrace, ns3::TcpRateOps::TcpRateSample::m_sendElapsed, ns3::TcpRateOps::TcpRateConnection::m_txItemDelivered, ns3::Time::Max(), ns3::Simulator::Now(), and NS_LOG_FUNCTION.

Referenced by TcpRateLinuxBasicTest::SkbDelivered().

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

◆ SkbSent()

void ns3::TcpRateLinux::SkbSent ( TcpTxItem skb,
bool  isStartOfTransmission 
)
overridevirtual

Put the rate information inside the sent skb.

Snapshot the current delivery information in the skb, to generate a rate sample later when the skb is (s)acked in SkbDelivered ().

Parameters
skbThe SKB sent
isStartOfTransmissiontrue if this is a start of transmission (i.e., in_flight == 0)

Implements ns3::TcpRateOps.

Definition at line 206 of file tcp-rate-ops.cc.

References ns3::TcpTxItem::GetRateInformation(), ns3::TcpRateOps::TcpRateConnection::m_appLimited, ns3::TcpRateOps::TcpRateConnection::m_delivered, ns3::TcpTxItem::RateInformation::m_delivered, ns3::TcpRateOps::TcpRateConnection::m_deliveredTime, ns3::TcpTxItem::RateInformation::m_deliveredTime, ns3::TcpTxItem::RateInformation::m_firstSent, ns3::TcpRateOps::TcpRateConnection::m_firstSentTime, ns3::TcpTxItem::RateInformation::m_isAppLimited, m_rate, m_rateTrace, ns3::Simulator::Now(), NS_LOG_FUNCTION, and NS_LOG_INFO.

Referenced by TcpRateLinuxBasicTest::SendSkb().

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

Member Data Documentation

◆ m_rate

TcpRateConnection ns3::TcpRateLinux::m_rate
private

Rate information.

Definition at line 250 of file tcp-rate-ops.h.

Referenced by CalculateAppLimited(), GenerateSample(), GetConnectionRate(), SkbDelivered(), and SkbSent().

◆ m_rateSample

TcpRateSample ns3::TcpRateLinux::m_rateSample
private

Rate sample (continuously updated)

Definition at line 251 of file tcp-rate-ops.h.

Referenced by GenerateSample(), and SkbDelivered().

◆ m_rateSampleTrace

TracedCallback<const TcpRateSample&> ns3::TcpRateLinux::m_rateSampleTrace
private

Rate Sample trace.

Definition at line 254 of file tcp-rate-ops.h.

Referenced by GenerateSample(), GetTypeId(), and SkbDelivered().

◆ m_rateTrace

TracedCallback<const TcpRateConnection&> ns3::TcpRateLinux::m_rateTrace
private

Rate trace.

Definition at line 253 of file tcp-rate-ops.h.

Referenced by CalculateAppLimited(), GetTypeId(), SkbDelivered(), and SkbSent().


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