A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::Txop Class Reference

Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC). More...

#include "txop.h"

+ Inheritance diagram for ns3::Txop:
+ Collaboration diagram for ns3::Txop:

Classes

struct  LinkEntity
 Structure holding information specific to a single link. More...
 
struct  UserDefinedAccessParams
 DCF/EDCA access parameters for all the links provided by users via this class' attributes or the corresponding setter methods. More...
 

Public Types

enum  ChannelAccessStatus { NOT_REQUESTED = 0 , REQUESTED , GRANTED }
 Enumeration for channel access status. More...
 
typedef Callback< void, WifiMacDropReason, Ptr< const WifiMpdu > > DroppedMpdu
 typedef for a callback to invoke when an MPDU is dropped.
 

Public Member Functions

 Txop ()
 
 ~Txop () override
 
int64_t AssignStreams (int64_t stream)
 Assign a fixed random variable stream number to the random variables used by this model.
 
virtual ChannelAccessStatus GetAccessStatus (uint8_t linkId) const
 
uint8_t GetAifsn () const
 Return the number of slots that make up an AIFS.
 
virtual uint8_t GetAifsn (uint8_t linkId) const
 Return the number of slots that make up an AIFS for the given link.
 
std::vector< uint8_t > GetAifsns () const
 Return the number of slots that make up an AIFS for each link.
 
uint32_t GetMaxCw () const
 Return the maximum contention window size.
 
virtual uint32_t GetMaxCw (uint8_t linkId) const
 Return the maximum contention window size for the given link.
 
std::vector< uint32_tGetMaxCws () const
 Return the maximum contention window size for each link.
 
uint32_t GetMinCw () const
 Return the minimum contention window size.
 
virtual uint32_t GetMinCw (uint8_t linkId) const
 Return the minimum contention window size for the given link.
 
std::vector< uint32_tGetMinCws () const
 Return the minimum contention window size for each link.
 
Time GetTxopLimit () const
 Return the TXOP limit.
 
Time GetTxopLimit (uint8_t linkId) const
 Return the TXOP limit for the given link.
 
std::vector< TimeGetTxopLimits () const
 Return the TXOP limit for each link.
 
const UserDefinedAccessParamsGetUserAccessParams () const
 
Ptr< WifiMacQueueGetWifiMacQueue () const
 Return the packet queue associated with this Txop.
 
virtual bool HasFramesToTransmit (uint8_t linkId)
 Check if the Txop has frames to transmit over the given link.
 
virtual bool IsQosTxop () const
 Check for QoS TXOP.
 
virtual void NotifyChannelAccessed (uint8_t linkId, Time txopDuration=Seconds(0))
 Called by the FrameExchangeManager to notify that channel access has been granted on the given link for the given amount of time.
 
virtual void NotifyChannelReleased (uint8_t linkId)
 Called by the FrameExchangeManager to notify the completion of the transmissions.
 
virtual void NotifyOff ()
 When off operation occurs, the queue gets cleaned up.
 
virtual void NotifyOn ()
 When on operation occurs, channel access will be started.
 
virtual void NotifySleep (uint8_t linkId)
 Notify that the given link switched to sleep mode.
 
virtual void NotifyWakeUp (uint8_t linkId)
 When wake up operation occurs on a link, channel access on that link will be restarted.
 
virtual void Queue (Ptr< WifiMpdu > mpdu)
 
void ResetCw (uint8_t linkId)
 Update the value of the CW variable for the given link to take into account a transmission success or a transmission abort (stop transmission of a packet after the maximum number of retransmissions has been reached).
 
void SetAifsn (uint8_t aifsn)
 Set the number of slots that make up an AIFS.
 
void SetAifsn (uint8_t aifsn, uint8_t linkId)
 Set the number of slots that make up an AIFS for the given link.
 
void SetAifsns (const std::vector< uint8_t > &aifsns)
 Set the number of slots that make up an AIFS for each link.
 
virtual void SetDroppedMpduCallback (DroppedMpdu callback)
 
void SetMaxCw (uint32_t maxCw)
 Set the maximum contention window size.
 
void SetMaxCw (uint32_t maxCw, uint8_t linkId)
 Set the maximum contention window size for the given link.
 
void SetMaxCws (const std::vector< uint32_t > &maxCws)
 Set the maximum contention window size for each link.
 
void SetMinCw (uint32_t minCw)
 Set the minimum contention window size.
 
void SetMinCw (uint32_t minCw, uint8_t linkId)
 Set the minimum contention window size for the given link.
 
void SetMinCws (const std::vector< uint32_t > &minCws)
 Set the minimum contention window size for each link.
 
void SetTxMiddle (const Ptr< MacTxMiddle > txMiddle)
 Set MacTxMiddle this Txop is associated to.
 
void SetTxopLimit (Time txopLimit)
 Set the TXOP limit.
 
void SetTxopLimit (Time txopLimit, uint8_t linkId)
 Set the TXOP limit for the given link.
 
void SetTxopLimits (const std::vector< Time > &txopLimits)
 Set the TXOP limit for each link.
 
virtual void SetWifiMac (const Ptr< WifiMac > mac)
 Set the wifi MAC this Txop is associated to.
 
void StartAccessAfterEvent (uint8_t linkId, bool hadFramesToTransmit, bool checkMediumBusy)
 Request channel access on the given link after the occurrence of an event that possibly requires to generate a new backoff value.
 
void StartBackoffNow (uint32_t nSlots, uint8_t linkId)
 
void SwapLinks (std::map< uint8_t, uint8_t > links)
 Swap the links based on the information included in the given map.
 
void UpdateFailedCw (uint8_t linkId)
 Update the value of the CW variable for the given link to take into account a transmission failure.
 
- 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.
 

Static Public Attributes

static constexpr bool CHECK_MEDIUM_BUSY
 generation of backoff (also) depends on the busy/idle state of the medium
 
static constexpr bool DIDNT_HAVE_FRAMES_TO_TRANSMIT
 no packet available for transmission was in the queue
 
static constexpr bool DONT_CHECK_MEDIUM_BUSY
 generation of backoff is independent of the busy/idle state of the medium
 
static constexpr bool HAD_FRAMES_TO_TRANSMIT
 packets available for transmission were in the queue
 

Protected Types

typedef TracedCallback< uint32_t, uint8_t > BackoffValueTracedCallback
 TracedCallback for backoff trace value typedef.
 
typedef TracedCallback< uint32_t, uint8_t > CwValueTracedCallback
 TracedCallback for CW trace value typedef.
 

Protected Member Functions

virtual void CreateQueue (AcIndex aci)
 Create a wifi MAC queue containing packets of the given AC.
 
void DoDispose () override
 Destructor implementation.
 
void DoInitialize () override
 Initialize() implementation.
 
virtual void GenerateBackoff (uint8_t linkId)
 Generate a new backoff for the given link now.
 
uint32_t GetBackoffSlots (uint8_t linkId) const
 Return the current number of backoff slots on the given link.
 
Time GetBackoffStart (uint8_t linkId) const
 Return the time when the backoff procedure started on the given link.
 
uint32_t GetCw (uint8_t linkId) const
 Get the current value of the CW variable for the given link.
 
LinkEntityGetLink (uint8_t linkId) const
 Get a reference to the link associated with the given ID.
 
const std::map< uint8_t, std::unique_ptr< LinkEntity > > & GetLinks () const
 
virtual void NotifyAccessRequested (uint8_t linkId)
 Notify that access request has been received for the given link.
 
void RequestAccess (uint8_t linkId)
 Request access to the ChannelAccessManager associated with the given link.
 
void UpdateBackoffSlotsNow (uint32_t nSlots, Time backoffUpdateBound, uint8_t linkId)
 Update backoff slots for the given link that nSlots has passed.
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
 
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.
 

Protected Attributes

BackoffValueTracedCallback m_backoffTrace
 backoff trace value
 
CwValueTracedCallback m_cwTrace
 CW trace value.
 
DroppedMpdu m_droppedMpduCallback
 the dropped MPDU callback
 
Ptr< WifiMacm_mac
 the wifi MAC
 
Ptr< WifiMacQueuem_queue
 the wifi MAC queue
 
Ptr< UniformRandomVariablem_rng
 the random stream
 
UniformRandomBitGenerator m_shuffleLinkIdsGen
 random number generator to shuffle link IDs
 
Ptr< MacTxMiddlem_txMiddle
 the MacTxMiddle
 

Private Member Functions

virtual std::unique_ptr< LinkEntityCreateLinkEntity () const
 Create a LinkEntity object.
 

Private Attributes

std::map< uint8_t, std::unique_ptr< LinkEntity > > m_links
 ID-indexed map of LinkEntity objects.
 
UserDefinedAccessParams m_userAccessParams
 user-defined DCF/EDCA access parameters
 

Friends

class ::EmlsrUlTxopTest
 
class ChannelAccessManager
 < ChannelAccessManager associated class
 

Additional Inherited Members

Detailed Description

Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC).

This class handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC). It generates backoff values and stores the channel access status (not requested, requested, granted) for the corresponding DCF/EDCA and for each link.

Definition at line 55 of file txop.h.

Member Typedef Documentation

◆ BackoffValueTracedCallback

TracedCallback for backoff trace value typedef.

Definition at line 559 of file txop.h.

◆ CwValueTracedCallback

TracedCallback for CW trace value typedef.

Definition at line 561 of file txop.h.

◆ DroppedMpdu

typedef for a callback to invoke when an MPDU is dropped.

Definition at line 70 of file txop.h.

Member Enumeration Documentation

◆ ChannelAccessStatus

Enumeration for channel access status.

Enumerator
NOT_REQUESTED 
REQUESTED 
GRANTED 

Definition at line 75 of file txop.h.

Constructor & Destructor Documentation

◆ Txop()

ns3::Txop::Txop ( )

Definition at line 166 of file txop.cc.

References ns3::UniformRandomBitGenerator::GetRv(), m_rng, m_shuffleLinkIdsGen, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ ~Txop()

ns3::Txop::~Txop ( )
override

Definition at line 172 of file txop.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

◆ AssignStreams()

int64_t ns3::Txop::AssignStreams ( int64_t stream)

Assign a fixed random variable stream number to the random variables used by this model.

Return the number of streams (possibly zero) that have been assigned.

Parameters
streamfirst stream index to use.
Returns
the number of stream indices assigned by this model.

Definition at line 674 of file txop.cc.

References m_rng, and NS_LOG_FUNCTION.

Referenced by ns3::ApWifiMac::AssignStreams(), and ns3::WifiHelper::AssignStreams().

+ Here is the caller graph for this function:

◆ CreateLinkEntity()

std::unique_ptr< Txop::LinkEntity > ns3::Txop::CreateLinkEntity ( ) const
privatevirtual

Create a LinkEntity object.

Returns
a unique pointer to the created LinkEntity object

Reimplemented in ns3::QosTxop.

Definition at line 197 of file txop.cc.

Referenced by SetWifiMac().

+ Here is the caller graph for this function:

◆ CreateQueue()

void ns3::Txop::CreateQueue ( AcIndex aci)
protectedvirtual

Create a wifi MAC queue containing packets of the given AC.

Parameters
acithe index of the given AC

Reimplemented in ns3::QosTxop.

Definition at line 189 of file txop.cc.

References ns3::CreateObject(), m_queue, NS_ABORT_MSG_IF, and NS_LOG_FUNCTION.

Referenced by ns3::QosTxop::CreateQueue(), and GetTypeId().

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

◆ DoDispose()

void ns3::Txop::DoDispose ( )
overrideprotectedvirtual

Destructor implementation.

This method is called by Dispose() or by the Object's destructor, whichever comes first.

Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.

It is safe to call GetObject() from within this method.

Reimplemented from ns3::Object.

Definition at line 178 of file txop.cc.

References m_links, m_mac, m_queue, m_rng, m_txMiddle, and NS_LOG_FUNCTION.

Referenced by ns3::QosTxop::DoDispose().

+ Here is the caller graph for this function:

◆ DoInitialize()

void ns3::Txop::DoInitialize ( )
overrideprotectedvirtual

Initialize() implementation.

This method is called only once by Initialize(). If the user calls Initialize() multiple times, DoInitialize() is called only the first time.

Subclasses are expected to override this method and chain up to their parent's implementation once they are done. It is safe to call GetObject() and AggregateObject() from within this method.

Reimplemented from ns3::Object.

Definition at line 715 of file txop.cc.

References GenerateBackoff(), m_links, NS_LOG_FUNCTION, and ResetCw().

+ Here is the call graph for this function:

◆ GenerateBackoff()

void ns3::Txop::GenerateBackoff ( uint8_t linkId)
protectedvirtual

Generate a new backoff for the given link now.

Parameters
linkIdthe ID of the given link

Definition at line 768 of file txop.cc.

References GetCw(), m_backoffTrace, m_rng, NS_LOG_FUNCTION, and StartBackoffNow().

Referenced by DoInitialize(), ns3::QosTxop::NotifyChannelReleased(), NotifyChannelReleased(), and StartAccessAfterEvent().

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

◆ GetAccessStatus()

Txop::ChannelAccessStatus ns3::Txop::GetAccessStatus ( uint8_t linkId) const
virtual
Parameters
linkIdthe ID of the given link
Returns
the current channel access status for the given link

Definition at line 726 of file txop.cc.

References ns3::Txop::LinkEntity::access, and GetLink().

+ Here is the call graph for this function:

◆ GetAifsn() [1/2]

uint8_t ns3::Txop::GetAifsn ( ) const

Return the number of slots that make up an AIFS.

For 11be multi-link devices, return the number of slots that make up an AIFS on the first link.

Returns
the number of slots that make up an AIFS.

Definition at line 555 of file txop.cc.

References GetAifsn().

Referenced by GetAifsn(), and GetTypeId().

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

◆ GetAifsn() [2/2]

uint8_t ns3::Txop::GetAifsn ( uint8_t linkId) const
virtual

Return the number of slots that make up an AIFS for the given link.

Parameters
linkIdthe ID of the given link
Returns
the number of slots that make up an AIFS.

Reimplemented in ns3::QosTxop.

Definition at line 573 of file txop.cc.

References ns3::Txop::LinkEntity::aifsn, and GetLink().

+ Here is the call graph for this function:

◆ GetAifsns()

std::vector< uint8_t > ns3::Txop::GetAifsns ( ) const

Return the number of slots that make up an AIFS for each link.

Returns
the number of slots that make up an AIFS for each link.

Definition at line 561 of file txop.cc.

References m_links.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetBackoffSlots()

uint32_t ns3::Txop::GetBackoffSlots ( uint8_t linkId) const
protected

Return the current number of backoff slots on the given link.

Parameters
linkIdthe ID of the given link
Returns
the current number of backoff slots

Definition at line 383 of file txop.cc.

References ns3::Txop::LinkEntity::backoffSlots, and GetLink().

+ Here is the call graph for this function:

◆ GetBackoffStart()

Time ns3::Txop::GetBackoffStart ( uint8_t linkId) const
protected

Return the time when the backoff procedure started on the given link.

Parameters
linkIdthe ID of the given link
Returns
the time when the backoff procedure started

Definition at line 389 of file txop.cc.

References ns3::Txop::LinkEntity::backoffStart, and GetLink().

+ Here is the call graph for this function:

◆ GetCw()

uint32_t ns3::Txop::GetCw ( uint8_t linkId) const
protected

Get the current value of the CW variable for the given link.

The initial value is minCw.

Parameters
linkIdthe ID of the given link
Returns
the current value of the CW variable for the given link

Definition at line 356 of file txop.cc.

References ns3::Txop::LinkEntity::cw, and GetLink().

Referenced by GenerateBackoff().

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

◆ GetLink()

Txop::LinkEntity & ns3::Txop::GetLink ( uint8_t linkId) const
protected

Get a reference to the link associated with the given ID.

Parameters
linkIdthe given link ID
Returns
a reference to the link associated with the given ID

Definition at line 203 of file txop.cc.

References m_links, and NS_ASSERT.

Referenced by GetAccessStatus(), GetAifsn(), GetBackoffSlots(), GetBackoffStart(), GetCw(), ns3::QosTxop::GetLink(), GetMaxCw(), GetMinCw(), GetTxopLimit(), NotifyAccessRequested(), NotifyChannelAccessed(), TxopTest< TxopType >::NotifyChannelAccessed(), NotifyChannelReleased(), Queue(), RequestAccess(), ResetCw(), SetAifsn(), SetMaxCw(), SetMinCw(), SetTxopLimit(), StartAccessAfterEvent(), StartBackoffNow(), UpdateBackoffSlotsNow(), and UpdateFailedCw().

+ Here is the caller graph for this function:

◆ GetLinks()

const std::map< uint8_t, std::unique_ptr< Txop::LinkEntity > > & ns3::Txop::GetLinks ( ) const
protected
Returns
a const reference to the map of link entities

Definition at line 212 of file txop.cc.

References m_links.

Referenced by ns3::QosTxop::CreateQueue().

+ Here is the caller graph for this function:

◆ GetMaxCw() [1/2]

uint32_t ns3::Txop::GetMaxCw ( ) const

Return the maximum contention window size.

For 11be multi-link devices, return the maximum contention window size on the first link.

Returns
the maximum contention window size.

Definition at line 531 of file txop.cc.

References GetMaxCw().

Referenced by GetMaxCw(), GetTypeId(), and UpdateFailedCw().

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

◆ GetMaxCw() [2/2]

uint32_t ns3::Txop::GetMaxCw ( uint8_t linkId) const
virtual

Return the maximum contention window size for the given link.

Parameters
linkIdthe ID of the given link
Returns
the maximum contention window size.

Reimplemented in ns3::QosTxop.

Definition at line 549 of file txop.cc.

References ns3::Txop::LinkEntity::cwMax, and GetLink().

+ Here is the call graph for this function:

◆ GetMaxCws()

std::vector< uint32_t > ns3::Txop::GetMaxCws ( ) const

Return the maximum contention window size for each link.

Returns
the maximum contention window size values.

Definition at line 537 of file txop.cc.

References m_links.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetMinCw() [1/2]

uint32_t ns3::Txop::GetMinCw ( ) const

Return the minimum contention window size.

For 11be multi-link devices, return the minimum contention window size on the first link.

Returns
the minimum contention window size.

Definition at line 507 of file txop.cc.

References GetMinCw().

Referenced by GetMinCw(), GetTypeId(), ResetCw(), and UpdateFailedCw().

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

◆ GetMinCw() [2/2]

uint32_t ns3::Txop::GetMinCw ( uint8_t linkId) const
virtual

Return the minimum contention window size for the given link.

Parameters
linkIdthe ID of the given link
Returns
the minimum contention window size.

Reimplemented in ns3::QosTxop.

Definition at line 525 of file txop.cc.

References ns3::Txop::LinkEntity::cwMin, and GetLink().

+ Here is the call graph for this function:

◆ GetMinCws()

std::vector< uint32_t > ns3::Txop::GetMinCws ( ) const

Return the minimum contention window size for each link.

Returns
the minimum contention window size values.

Definition at line 513 of file txop.cc.

References m_links.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetTxopLimit() [1/2]

Time ns3::Txop::GetTxopLimit ( ) const

Return the TXOP limit.

Returns
the TXOP limit.

Definition at line 579 of file txop.cc.

References GetTxopLimit().

Referenced by ns3::QosFrameExchangeManager::GetCtsToSelfDurationId(), ns3::QosFrameExchangeManager::GetFrameDurationId(), ns3::HeFrameExchangeManager::GetMuRtsDurationId(), ns3::HtFrameExchangeManager::GetPsduDurationId(), ns3::QosFrameExchangeManager::GetRtsDurationId(), GetTxopLimit(), GetTypeId(), ns3::QosFrameExchangeManager::SendCfEndIfNeeded(), ns3::QosFrameExchangeManager::StartTransmission(), ns3::QosFrameExchangeManager::TransmissionFailed(), ns3::HtFrameExchangeManager::TransmissionSucceeded(), and ns3::QosFrameExchangeManager::TransmissionSucceeded().

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

◆ GetTxopLimit() [2/2]

Time ns3::Txop::GetTxopLimit ( uint8_t linkId) const

Return the TXOP limit for the given link.

Parameters
linkIdthe ID of the given link
Returns
the TXOP limit.

Definition at line 597 of file txop.cc.

References GetLink(), and ns3::Txop::LinkEntity::txopLimit.

+ Here is the call graph for this function:

◆ GetTxopLimits()

std::vector< Time > ns3::Txop::GetTxopLimits ( ) const

Return the TXOP limit for each link.

Returns
the TXOP limit for each link.

Definition at line 585 of file txop.cc.

References m_links.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetTypeId()

◆ GetUserAccessParams()

const Txop::UserDefinedAccessParams & ns3::Txop::GetUserAccessParams ( ) const
Returns
a const reference to user-provided access parameters

Definition at line 501 of file txop.cc.

References m_userAccessParams.

◆ GetWifiMacQueue()

Ptr< WifiMacQueue > ns3::Txop::GetWifiMacQueue ( ) const

Return the packet queue associated with this Txop.

Returns
the associated WifiMacQueue

Definition at line 264 of file txop.cc.

References m_queue.

Referenced by AmpduAggregationTest::DoRun(), AmpduAggregationTest::EnqueuePkts(), ns3::ApWifiMac::GetTxopQueue(), GetTypeId(), and ns3::FrameExchangeManager::ReceivedNormalAck().

+ Here is the caller graph for this function:

◆ HasFramesToTransmit()

bool ns3::Txop::HasFramesToTransmit ( uint8_t linkId)
virtual

Check if the Txop has frames to transmit over the given link.

Parameters
linkIdthe ID of the given link.
Returns
true if the Txop has frames to transmit.

Reimplemented in ns3::QosTxop.

Definition at line 603 of file txop.cc.

References m_queue, and NS_LOG_FUNCTION.

Referenced by ns3::WifiMac::HasFramesToTransmit(), NotifyChannelReleased(), Queue(), and StartAccessAfterEvent().

+ Here is the caller graph for this function:

◆ IsQosTxop()

bool ns3::Txop::IsQosTxop ( ) const
virtual

Check for QoS TXOP.

Returns
true if QoS TXOP.

Reimplemented in ns3::QosTxop.

Definition at line 809 of file txop.cc.

◆ NotifyAccessRequested()

void ns3::Txop::NotifyAccessRequested ( uint8_t linkId)
protectedvirtual

Notify that access request has been received for the given link.

Parameters
linkIdthe ID of the given link

Definition at line 732 of file txop.cc.

References ns3::Txop::LinkEntity::access, GetLink(), NS_LOG_FUNCTION, and REQUESTED.

+ Here is the call graph for this function:

◆ NotifyChannelAccessed()

void ns3::Txop::NotifyChannelAccessed ( uint8_t linkId,
Time txopDuration = Seconds(0) )
virtual

Called by the FrameExchangeManager to notify that channel access has been granted on the given link for the given amount of time.

Parameters
linkIdthe ID of the given link
txopDurationthe duration of the TXOP gained (zero for DCF)

Reimplemented in ns3::QosTxop.

Definition at line 739 of file txop.cc.

References ns3::Txop::LinkEntity::access, GetLink(), GRANTED, and NS_LOG_FUNCTION.

Referenced by ns3::QosTxop::NotifyChannelAccessed(), and ns3::FrameExchangeManager::StartTransmission().

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

◆ NotifyChannelReleased()

void ns3::Txop::NotifyChannelReleased ( uint8_t linkId)
virtual

Called by the FrameExchangeManager to notify the completion of the transmissions.

This method generates a new backoff and restarts access if needed.

Parameters
linkIdthe ID of the link the FrameExchangeManager is operating on

Reimplemented in ns3::QosTxop.

Definition at line 746 of file txop.cc.

References ns3::Txop::LinkEntity::access, GenerateBackoff(), GetLink(), HasFramesToTransmit(), NOT_REQUESTED, NS_LOG_FUNCTION, RequestAccess(), and ns3::Simulator::ScheduleNow().

+ Here is the call graph for this function:

◆ NotifyOff()

void ns3::Txop::NotifyOff ( )
virtual

When off operation occurs, the queue gets cleaned up.

Definition at line 783 of file txop.cc.

References m_queue, and NS_LOG_FUNCTION.

◆ NotifyOn()

void ns3::Txop::NotifyOn ( )
virtual

When on operation occurs, channel access will be started.

Definition at line 798 of file txop.cc.

References DIDNT_HAVE_FRAMES_TO_TRANSMIT, DONT_CHECK_MEDIUM_BUSY, m_links, NS_LOG_FUNCTION, and StartAccessAfterEvent().

+ Here is the call graph for this function:

◆ NotifySleep()

void ns3::Txop::NotifySleep ( uint8_t linkId)
virtual

Notify that the given link switched to sleep mode.

Parameters
linkIdthe ID of the given link

Definition at line 777 of file txop.cc.

References NS_LOG_FUNCTION.

◆ NotifyWakeUp()

void ns3::Txop::NotifyWakeUp ( uint8_t linkId)
virtual

When wake up operation occurs on a link, channel access on that link will be restarted.

Parameters
linkIdthe ID of the link

Definition at line 790 of file txop.cc.

References DIDNT_HAVE_FRAMES_TO_TRANSMIT, DONT_CHECK_MEDIUM_BUSY, NS_LOG_FUNCTION, and StartAccessAfterEvent().

+ Here is the call graph for this function:

◆ Queue()

void Queue ( Ptr< WifiMpdu > mpdu)
virtual
Parameters
mpduthe given MPDU

Store the given MPDU in the internal queue until it can be sent safely.

Definition at line 612 of file txop.cc.

References ns3::Txop::LinkEntity::accessRequest, CHECK_MEDIUM_BUSY, ns3::Txop::LinkEntity::event, GetLink(), ns3::UniformRandomBitGenerator::GetRv(), HasFramesToTransmit(), ns3::LOG_DEBUG, m_mac, m_queue, m_shuffleLinkIdsGen, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Simulator::ScheduleNow(), ns3::Shuffle(), and StartAccessAfterEvent().

Referenced by ns3::MeshWifiInterfaceMac::Enqueue(), ns3::ApWifiMac::ScheduleFilsDiscOrUnsolProbeRespFrames(), ns3::StaWifiMac::SendAssociationRequest(), ns3::ApWifiMac::SendAssocResp(), ns3::MeshWifiInterfaceMac::SendBeacon(), ns3::MeshWifiInterfaceMac::SendManagementFrame(), ns3::ApWifiMac::SendOneBeacon(), ns3::StaWifiMac::SendProbeRequest(), ns3::ApWifiMac::SendProbeResp(), and ns3::StaWifiMac::SetPowerSaveMode().

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

◆ RequestAccess()

void ns3::Txop::RequestAccess ( uint8_t linkId)
protected

Request access to the ChannelAccessManager associated with the given link.

Parameters
linkIdthe ID of the given link

Definition at line 758 of file txop.cc.

References GetLink(), m_mac, NOT_REQUESTED, and NS_LOG_FUNCTION.

Referenced by ns3::QosTxop::NotifyChannelReleased(), and NotifyChannelReleased().

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

◆ ResetCw()

void ns3::Txop::ResetCw ( uint8_t linkId)

Update the value of the CW variable for the given link to take into account a transmission success or a transmission abort (stop transmission of a packet after the maximum number of retransmissions has been reached).

By default, this resets the CW variable to minCW.

Parameters
linkIdthe ID of the given link

Definition at line 362 of file txop.cc.

References GetLink(), GetMinCw(), m_cwTrace, and NS_LOG_FUNCTION.

Referenced by ns3::HtFrameExchangeManager::BlockAckTimeout(), ns3::HeFrameExchangeManager::DoCtsAfterMuRtsTimeout(), ns3::FrameExchangeManager::DoCtsTimeout(), DoInitialize(), ns3::FrameExchangeManager::NormalAckTimeout(), ns3::FrameExchangeManager::ReceivedNormalAck(), ns3::HtFrameExchangeManager::ReceiveMpdu(), SetMaxCw(), and SetMinCw().

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

◆ SetAifsn() [1/2]

void ns3::Txop::SetAifsn ( uint8_t aifsn)

Set the number of slots that make up an AIFS.

For 11be multi-link devices, set the number of slots that make up an AIFS on the first link.

Parameters
aifsnthe number of slots that make up an AIFS.

Definition at line 424 of file txop.cc.

References SetAifsn().

Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetAifsn(), and SetAifsns().

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

◆ SetAifsn() [2/2]

void ns3::Txop::SetAifsn ( uint8_t aifsn,
uint8_t linkId )

Set the number of slots that make up an AIFS for the given link.

Note that this function can only be called after that links have been created.

Parameters
aifsnthe number of slots that make up an AIFS.
linkIdthe ID of the given link

Definition at line 452 of file txop.cc.

References ns3::Txop::LinkEntity::aifsn, GetLink(), m_links, NS_ASSERT_MSG, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ SetAifsns()

void ns3::Txop::SetAifsns ( const std::vector< uint8_t > & aifsns)

Set the number of slots that make up an AIFS for each link.

Note that an empty aifsns is ignored, otherwise its size must match the number of links.

Parameters
aifsnsthe number of slots that make up an AIFS for each link (links are sorted in increasing order of link ID).

Definition at line 430 of file txop.cc.

References ns3::Txop::UserDefinedAccessParams::aifsns, m_links, m_userAccessParams, NS_ABORT_MSG_IF, and SetAifsn().

Referenced by ns3::ApWifiMac::DoCompleteConfig(), and GetTypeId().

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

◆ SetDroppedMpduCallback()

void ns3::Txop::SetDroppedMpduCallback ( DroppedMpdu callback)
virtual
Parameters
callbackthe callback to invoke when an MPDU is dropped

Reimplemented in ns3::QosTxop.

Definition at line 253 of file txop.cc.

References ns3::Callback< R, UArgs >::Bind(), m_droppedMpduCallback, m_queue, NS_LOG_FUNCTION, ns3::WIFI_MAC_DROP_EXPIRED_LIFETIME, and ns3::WIFI_MAC_DROP_FAILED_ENQUEUE.

Referenced by ns3::QosTxop::SetDroppedMpduCallback(), and ns3::WifiMac::SetupDcfQueue().

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

◆ SetMaxCw() [1/2]

void ns3::Txop::SetMaxCw ( uint32_t maxCw)

Set the maximum contention window size.

For 11be multi-link devices, set the maximum contention window size on the first link.

Parameters
maxCwthe maximum contention window size.

Definition at line 313 of file txop.cc.

References SetMaxCw().

Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetMaxCw(), and SetMaxCws().

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

◆ SetMaxCw() [2/2]

void ns3::Txop::SetMaxCw ( uint32_t maxCw,
uint8_t linkId )

Set the maximum contention window size for the given link.

Note that this function can only be called after that links have been created.

Parameters
maxCwthe maximum contention window size.
linkIdthe ID of the given link

Definition at line 341 of file txop.cc.

References GetLink(), m_links, NS_ASSERT_MSG, NS_LOG_FUNCTION, and ResetCw().

+ Here is the call graph for this function:

◆ SetMaxCws()

void ns3::Txop::SetMaxCws ( const std::vector< uint32_t > & maxCws)

Set the maximum contention window size for each link.

Note that an empty maxCws is ignored, otherwise its size must match the number of links.

Parameters
maxCwsthe maximum contention window size for each link (links are sorted in increasing order of link ID).

Definition at line 319 of file txop.cc.

References ns3::Txop::UserDefinedAccessParams::cwMaxs, m_links, m_userAccessParams, NS_ABORT_MSG_IF, and SetMaxCw().

Referenced by ns3::ApWifiMac::DoCompleteConfig(), and GetTypeId().

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

◆ SetMinCw() [1/2]

void ns3::Txop::SetMinCw ( uint32_t minCw)

Set the minimum contention window size.

For 11be multi-link devices, set the minimum contention window size on the first link.

Parameters
minCwthe minimum contention window size.

Definition at line 270 of file txop.cc.

References SetMinCw().

Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetMinCw(), and SetMinCws().

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

◆ SetMinCw() [2/2]

void ns3::Txop::SetMinCw ( uint32_t minCw,
uint8_t linkId )

Set the minimum contention window size for the given link.

Note that this function can only be called after that links have been created.

Parameters
minCwthe minimum contention window size.
linkIdthe ID of the given link

Definition at line 298 of file txop.cc.

References GetLink(), m_links, NS_ASSERT_MSG, NS_LOG_FUNCTION, and ResetCw().

+ Here is the call graph for this function:

◆ SetMinCws()

void ns3::Txop::SetMinCws ( const std::vector< uint32_t > & minCws)

Set the minimum contention window size for each link.

Note that an empty minCws is ignored, otherwise its size must match the number of links.

Parameters
minCwsthe minimum contention window size for each link (links are sorted in increasing order of link ID).

Definition at line 276 of file txop.cc.

References ns3::Txop::UserDefinedAccessParams::cwMins, m_links, m_userAccessParams, NS_ABORT_MSG_IF, and SetMinCw().

Referenced by ns3::ApWifiMac::DoCompleteConfig(), and GetTypeId().

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

◆ SetTxMiddle()

void ns3::Txop::SetTxMiddle ( const Ptr< MacTxMiddle > txMiddle)

Set MacTxMiddle this Txop is associated to.

Parameters
txMiddleMacTxMiddle to associate.

Definition at line 235 of file txop.cc.

References m_txMiddle, and NS_LOG_FUNCTION.

Referenced by ns3::ApWifiMac::ApWifiMac(), ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), and ns3::WifiMac::SetupDcfQueue().

+ Here is the caller graph for this function:

◆ SetTxopLimit() [1/2]

void ns3::Txop::SetTxopLimit ( Time txopLimit)

Set the TXOP limit.

Parameters
txopLimitthe TXOP limit. Value zero corresponds to default Txop.

Definition at line 461 of file txop.cc.

References SetTxopLimit().

Referenced by GetTypeId(), SetTxopLimit(), and SetTxopLimits().

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

◆ SetTxopLimit() [2/2]

void ns3::Txop::SetTxopLimit ( Time txopLimit,
uint8_t linkId )

Set the TXOP limit for the given link.

Note that this function can only be called after that links have been created.

Parameters
txopLimitthe TXOP limit (must not be negative)
linkIdthe ID of the given link

Definition at line 489 of file txop.cc.

References GetLink(), ns3::Time::GetMicroSeconds(), ns3::Time::IsPositive(), m_links, NS_ASSERT_MSG, NS_LOG_FUNCTION, and ns3::Txop::LinkEntity::txopLimit.

+ Here is the call graph for this function:

◆ SetTxopLimits()

void ns3::Txop::SetTxopLimits ( const std::vector< Time > & txopLimits)

Set the TXOP limit for each link.

Note that an empty txopLimits is ignored, otherwise its size must match the number of links.

Parameters
txopLimitsthe TXOP limit for each link (links are sorted in increasing order of link ID).

Definition at line 467 of file txop.cc.

References m_links, m_userAccessParams, NS_ABORT_MSG_IF, SetTxopLimit(), and ns3::Txop::UserDefinedAccessParams::txopLimits.

Referenced by GetTypeId().

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

◆ SetWifiMac()

void ns3::Txop::SetWifiMac ( const Ptr< WifiMac > mac)
virtual

Set the wifi MAC this Txop is associated to.

Parameters
macassociated wifi MAC

Definition at line 242 of file txop.cc.

References CreateLinkEntity(), m_links, m_mac, and NS_LOG_FUNCTION.

Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), and ns3::ApWifiMac::DoCompleteConfig().

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

◆ StartAccessAfterEvent()

void ns3::Txop::StartAccessAfterEvent ( uint8_t linkId,
bool hadFramesToTransmit,
bool checkMediumBusy )

Request channel access on the given link after the occurrence of an event that possibly requires to generate a new backoff value.

Examples of such an event are: a packet has been enqueued by the upper layer; the given link has been unblocked after being blocked for some reason (e.g., wait for ADDBA Response, wait for TX on another EMLSR link to finish, etc.); the PHY operating on the given link just woke up from sleep mode. The checkMediumBusy argument is forwarded to the NeedBackoffUponAccess method of the ChannelAccessManager.

Parameters
linkIdthe ID of the given link
hadFramesToTransmitwhether packets available for transmission were queued just before the occurrence of the event causing this channel access request
checkMediumBusywhether generation of backoff (also) depends on the busy/idle state of the medium

Definition at line 682 of file txop.cc.

References GenerateBackoff(), GetLink(), HasFramesToTransmit(), m_mac, NOT_REQUESTED, NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by ns3::QosTxop::CreateQueue(), NotifyOn(), NotifyWakeUp(), Queue(), ns3::EhtFrameExchangeManager::StartTransmission(), and ns3::WifiMac::UnblockUnicastTxOnLinks().

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

◆ StartBackoffNow()

void ns3::Txop::StartBackoffNow ( uint32_t nSlots,
uint8_t linkId )
Parameters
nSlotsthe number of slots of the backoff.
linkIdthe ID of the given link

Start a backoff for the given link by initializing the backoff counter to the number of slots specified.

Definition at line 406 of file txop.cc.

References GetLink(), ns3::Simulator::Now(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

Referenced by GenerateBackoff().

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

◆ SwapLinks()

void ns3::Txop::SwapLinks ( std::map< uint8_t, uint8_t > links)

Swap the links based on the information included in the given map.

This method is normally called by the WifiMac of a non-AP MLD upon completing ML setup to have its link IDs match AP MLD's link IDs.

Parameters
linksa set of pairs (from, to) each mapping a current link ID to the link ID it has to become (i.e., link 'from' becomes link 'to')

Definition at line 218 of file txop.cc.

References m_links, and NS_LOG_FUNCTION.

Referenced by ns3::WifiMac::SwapLinks().

+ Here is the caller graph for this function:

◆ UpdateBackoffSlotsNow()

void ns3::Txop::UpdateBackoffSlotsNow ( uint32_t nSlots,
Time backoffUpdateBound,
uint8_t linkId )
protected

Update backoff slots for the given link that nSlots has passed.

Parameters
nSlotsthe number of slots to decrement
backoffUpdateBoundthe time at which backoff should start
linkIdthe ID of the given link

Definition at line 395 of file txop.cc.

References GetLink(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ UpdateFailedCw()

void ns3::Txop::UpdateFailedCw ( uint8_t linkId)

Update the value of the CW variable for the given link to take into account a transmission failure.

By default, this triggers a doubling of CW (capped by maxCW).

Parameters
linkIdthe ID of the given link

Definition at line 371 of file txop.cc.

References GetLink(), GetMaxCw(), GetMinCw(), m_cwTrace, and NS_LOG_FUNCTION.

Referenced by ns3::HtFrameExchangeManager::BlockAckTimeout(), ns3::HeFrameExchangeManager::DoCtsAfterMuRtsTimeout(), ns3::FrameExchangeManager::DoCtsTimeout(), and ns3::FrameExchangeManager::NormalAckTimeout().

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

Friends And Related Symbol Documentation

◆ ::EmlsrUlTxopTest

friend class ::EmlsrUlTxopTest
friend

Definition at line 445 of file txop.h.

◆ ChannelAccessManager

friend class ChannelAccessManager
friend

< ChannelAccessManager associated class

Definition at line 444 of file txop.h.

Member Data Documentation

◆ CHECK_MEDIUM_BUSY

bool ns3::Txop::CHECK_MEDIUM_BUSY
staticconstexpr
Initial value:
=
true

generation of backoff (also) depends on the busy/idle state of the medium

Definition at line 392 of file txop.h.

Referenced by ns3::QosTxop::CreateQueue(), Queue(), ns3::StaWifiMac::ReceiveAssocResp(), ns3::EhtFrameExchangeManager::StartTransmission(), ns3::EmlsrManager::SwitchMainPhy(), and ns3::WifiMac::UnblockUnicastTxOnLinks().

◆ DIDNT_HAVE_FRAMES_TO_TRANSMIT

bool ns3::Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT
staticconstexpr
Initial value:
=
false

no packet available for transmission was in the queue

Definition at line 390 of file txop.h.

Referenced by NotifyOn(), NotifyWakeUp(), ns3::StaWifiMac::ReceiveAssocResp(), ns3::EhtFrameExchangeManager::StartTransmission(), and ns3::EmlsrManager::SwitchMainPhy().

◆ DONT_CHECK_MEDIUM_BUSY

bool ns3::Txop::DONT_CHECK_MEDIUM_BUSY
staticconstexpr
Initial value:
=
false

generation of backoff is independent of the busy/idle state of the medium

Definition at line 394 of file txop.h.

Referenced by NotifyOn(), NotifyWakeUp(), and ns3::EhtFrameExchangeManager::StartTransmission().

◆ HAD_FRAMES_TO_TRANSMIT

bool ns3::Txop::HAD_FRAMES_TO_TRANSMIT
staticconstexpr
Initial value:
=
true

packets available for transmission were in the queue

Definition at line 388 of file txop.h.

◆ m_backoffTrace

BackoffValueTracedCallback ns3::Txop::m_backoffTrace
protected

backoff trace value

Definition at line 563 of file txop.h.

Referenced by GenerateBackoff(), and GetTypeId().

◆ m_cwTrace

CwValueTracedCallback ns3::Txop::m_cwTrace
protected

CW trace value.

Definition at line 564 of file txop.h.

Referenced by GetTypeId(), ResetCw(), and UpdateFailedCw().

◆ m_droppedMpduCallback

DroppedMpdu ns3::Txop::m_droppedMpduCallback
protected

the dropped MPDU callback

Definition at line 551 of file txop.h.

Referenced by ns3::QosTxop::PeekNextMpdu(), and SetDroppedMpduCallback().

◆ m_links

std::map<uint8_t, std::unique_ptr<LinkEntity> > ns3::Txop::m_links
private

◆ m_mac

◆ m_queue

◆ m_rng

Ptr<UniformRandomVariable> ns3::Txop::m_rng
protected

the random stream

Definition at line 555 of file txop.h.

Referenced by Txop(), AssignStreams(), DoDispose(), and GenerateBackoff().

◆ m_shuffleLinkIdsGen

UniformRandomBitGenerator ns3::Txop::m_shuffleLinkIdsGen
protected

random number generator to shuffle link IDs

Definition at line 556 of file txop.h.

Referenced by Txop(), and Queue().

◆ m_txMiddle

◆ m_userAccessParams

UserDefinedAccessParams ns3::Txop::m_userAccessParams
private

user-defined DCF/EDCA access parameters

Definition at line 577 of file txop.h.

Referenced by GetUserAccessParams(), SetAifsns(), SetMaxCws(), SetMinCws(), and SetTxopLimits().


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