A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::TcpRateOps Class Referenceabstract

Interface for all operations that involve a Rate monitoring for TCP. More...

#include "tcp-rate-ops.h"

+ Inheritance diagram for ns3::TcpRateOps:
+ Collaboration diagram for ns3::TcpRateOps:

Classes

struct  TcpRateConnection
 Information about the connection rate. More...
 
struct  TcpRateSample
 Rate Sample structure. More...
 

Public Member Functions

virtual 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)=0
 If a gap is detected between sends, it means we are app-limited.
 
virtual const TcpRateSampleGenerateSample (uint32_t delivered, uint32_t lost, bool is_sack_reneg, uint32_t priorInFlight, const Time &minRtt)=0
 Generate a TcpRateSample to feed a congestion avoidance algorithm.
 
virtual const TcpRateConnectionGetConnectionRate ()=0
 
virtual void SkbDelivered (TcpTxItem *skb)=0
 Update the Rate information after an item is received.
 
virtual void SkbSent (TcpTxItem *skb, bool isStartOfTransmission)=0
 Put the rate information inside the sent skb.
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor.
 
 ~Object () override
 Destructor.
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together.
 
void Dispose ()
 Dispose of this Object.
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one.
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object.
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object.
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object.
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId.
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object.
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one.
 
bool IsInitialized () const
 Check if the object has been initialized.
 
void UnidirectionalAggregateObject (Ptr< Object > other)
 Aggregate an Object to another Object.
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor.
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor.
 
uint32_t GetReferenceCount () const
 Get the reference count of the object.
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator.
 
void Ref () const
 Increment the reference count.
 
void Unref () const
 Decrement the reference count.
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor.
 
void GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const
 Get the value of an attribute, raising fatal errors if unsuccessful.
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors.
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful.
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors.
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context.
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context.
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context.
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context.
 

Static Public Member Functions

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

Additional Inherited Members

- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
 
virtual void DoDispose ()
 Destructor implementation.
 
virtual void DoInitialize ()
 Initialize() implementation.
 
virtual void NotifyNewAggregate ()
 Notify all Objects aggregated to this one of a new Object being aggregated.
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes.
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed.
 

Detailed Description

Interface for all operations that involve a Rate monitoring for TCP.

The interface is meant to take information to generate rate information valid for congestion avoidance algorithm such as BBR.

Please take a look to the TcpRateLinux class for an example.

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

Member Function Documentation

◆ CalculateAppLimited()

virtual void ns3::TcpRateOps::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 )
pure virtual

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

Implemented in ns3::TcpRateLinux.

◆ GenerateSample()

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

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

Implemented in ns3::TcpRateLinux.

◆ GetConnectionRate()

virtual const TcpRateConnection & ns3::TcpRateOps::GetConnectionRate ( )
pure virtual
Returns
The information about the rate connection

Implemented in ns3::TcpRateLinux.

◆ GetTypeId()

TypeId ns3::TcpRateOps::GetTypeId ( )
static

Get the type ID.

Get the type ID.

Returns
the object TypeId

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

References ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ SkbDelivered()

virtual void ns3::TcpRateOps::SkbDelivered ( TcpTxItem * skb)
pure virtual

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)

Implemented in ns3::TcpRateLinux.

Referenced by ns3::TcpSocketBase::ProcessOptionSack(), ns3::TcpSocketBase::ReceivedAck(), and TcpRateLinuxWithBufferTest::TestWithSackBlocks().

+ Here is the caller graph for this function:

◆ SkbSent()

virtual void ns3::TcpRateOps::SkbSent ( TcpTxItem * skb,
bool isStartOfTransmission )
pure virtual

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)

Implemented in ns3::TcpRateLinux.


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