Handles the packet queue and stores DCF/EDCA access parameters (one Txop per AC). More...
#include "txop.h"
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_t > | GetMaxCws () 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_t > | GetMinCws () 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< Time > | GetTxopLimits () const |
Return the TXOP limit for each link. | |
const UserDefinedAccessParams & | GetUserAccessParams () const |
Ptr< WifiMacQueue > | GetWifiMacQueue () 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< Object > | GetObject () 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< Object > | GetObject (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. | |
SimpleRefCount & | operator= (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. | |
LinkEntity & | GetLink (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< WifiMac > | m_mac |
the wifi MAC | |
Ptr< WifiMacQueue > | m_queue |
the wifi MAC queue | |
Ptr< UniformRandomVariable > | m_rng |
the random stream | |
UniformRandomBitGenerator | m_shuffleLinkIdsGen |
random number generator to shuffle link IDs | |
Ptr< MacTxMiddle > | m_txMiddle |
the MacTxMiddle | |
Private Member Functions | |
virtual std::unique_ptr< LinkEntity > | CreateLinkEntity () 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 | |
Related Symbols inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
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.
|
protected |
TracedCallback for backoff trace value typedef.
|
protected |
TracedCallback for CW trace value typedef.
typedef Callback<void, WifiMacDropReason, Ptr<const WifiMpdu> > ns3::Txop::DroppedMpdu |
ns3::Txop::Txop | ( | ) |
Definition at line 166 of file txop.cc.
References ns3::UniformRandomBitGenerator::GetRv(), m_rng, m_shuffleLinkIdsGen, and NS_LOG_FUNCTION.
|
override |
Definition at line 172 of file txop.cc.
References NS_LOG_FUNCTION.
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.
stream | first stream index to use. |
Definition at line 674 of file txop.cc.
References m_rng, and NS_LOG_FUNCTION.
Referenced by ns3::ApWifiMac::AssignStreams(), and ns3::WifiHelper::AssignStreams().
|
privatevirtual |
Create a LinkEntity object.
Reimplemented in ns3::QosTxop.
Definition at line 197 of file txop.cc.
Referenced by SetWifiMac().
|
protectedvirtual |
Create a wifi MAC queue containing packets of the given AC.
aci | the 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().
|
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().
|
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().
|
protectedvirtual |
Generate a new backoff for the given link now.
linkId | the 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().
|
virtual |
linkId | the ID of the given link |
Definition at line 726 of file txop.cc.
References ns3::Txop::LinkEntity::access, and GetLink().
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.
Definition at line 555 of file txop.cc.
References GetAifsn().
Referenced by GetAifsn(), and GetTypeId().
|
virtual |
Return the number of slots that make up an AIFS for the given link.
linkId | the ID of the given link |
Reimplemented in ns3::QosTxop.
Definition at line 573 of file txop.cc.
References ns3::Txop::LinkEntity::aifsn, and GetLink().
std::vector< uint8_t > ns3::Txop::GetAifsns | ( | ) | const |
Return 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().
|
protected |
Return the current number of backoff slots on the given link.
linkId | the ID of the given link |
Definition at line 383 of file txop.cc.
References ns3::Txop::LinkEntity::backoffSlots, and GetLink().
|
protected |
Return the time when the backoff procedure started on the given link.
linkId | the ID of the given link |
Definition at line 389 of file txop.cc.
References ns3::Txop::LinkEntity::backoffStart, and GetLink().
|
protected |
Get the current value of the CW variable for the given link.
The initial value is minCw.
linkId | the ID of the given link |
Definition at line 356 of file txop.cc.
References ns3::Txop::LinkEntity::cw, and GetLink().
Referenced by GenerateBackoff().
|
protected |
Get a reference to the link associated with the given ID.
linkId | the given link 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().
|
protected |
Definition at line 212 of file txop.cc.
References m_links.
Referenced by ns3::QosTxop::CreateQueue().
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.
Definition at line 531 of file txop.cc.
References GetMaxCw().
Referenced by GetMaxCw(), GetTypeId(), and UpdateFailedCw().
|
virtual |
Return the maximum contention window size for the given link.
linkId | the ID of the given link |
Reimplemented in ns3::QosTxop.
Definition at line 549 of file txop.cc.
References ns3::Txop::LinkEntity::cwMax, and GetLink().
std::vector< uint32_t > ns3::Txop::GetMaxCws | ( | ) | const |
Return the maximum contention window size for each link.
Definition at line 537 of file txop.cc.
References m_links.
Referenced by GetTypeId().
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.
Definition at line 507 of file txop.cc.
References GetMinCw().
Referenced by GetMinCw(), GetTypeId(), ResetCw(), and UpdateFailedCw().
|
virtual |
Return the minimum contention window size for the given link.
linkId | the ID of the given link |
Reimplemented in ns3::QosTxop.
Definition at line 525 of file txop.cc.
References ns3::Txop::LinkEntity::cwMin, and GetLink().
std::vector< uint32_t > ns3::Txop::GetMinCws | ( | ) | const |
Return the minimum contention window size for each link.
Definition at line 513 of file txop.cc.
References m_links.
Referenced by GetTypeId().
Time ns3::Txop::GetTxopLimit | ( | ) | const |
Return 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().
Time ns3::Txop::GetTxopLimit | ( | uint8_t | linkId | ) | const |
Return the TXOP limit for the given link.
linkId | the ID of the given link |
Definition at line 597 of file txop.cc.
References GetLink(), and ns3::Txop::LinkEntity::txopLimit.
std::vector< Time > ns3::Txop::GetTxopLimits | ( | ) | const |
Return the TXOP limit for each link.
Definition at line 585 of file txop.cc.
References m_links.
Referenced by GetTypeId().
|
static |
Get the type ID.
Definition at line 40 of file txop.cc.
References ns3::AC_BE, ns3::AC_BE_NQOS, ns3::AC_BEACON, ns3::AC_BK, ns3::AC_UNDEF, ns3::AC_VI, ns3::AC_VO, ns3::TypeId::ATTR_GET, ns3::TypeId::ATTR_SET, CreateQueue(), GetAifsn(), GetAifsns(), GetMaxCw(), GetMaxCws(), GetMinCw(), GetMinCws(), GetTxopLimit(), GetTxopLimits(), GetWifiMacQueue(), m_backoffTrace, m_cwTrace, ns3::MakeAttributeContainerAccessor(), ns3::MakeAttributeContainerChecker(), ns3::MakeEnumAccessor(), ns3::MakeEnumChecker(), ns3::MakePointerAccessor(), ns3::MakePointerChecker(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeTraceSourceAccessor(), ns3::MakeUintegerAccessor(), ns3::MakeUintegerChecker(), ns3::MilliSeconds(), ns3::TypeId::OBSOLETE, SetAifsn(), SetAifsns(), SetMaxCw(), SetMaxCws(), SetMinCw(), SetMinCws(), ns3::TypeId::SetParent(), SetTxopLimit(), and SetTxopLimits().
const Txop::UserDefinedAccessParams & ns3::Txop::GetUserAccessParams | ( | ) | const |
Definition at line 501 of file txop.cc.
References m_userAccessParams.
Ptr< WifiMacQueue > ns3::Txop::GetWifiMacQueue | ( | ) | const |
Return the packet queue associated with this Txop.
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().
|
virtual |
Check if the Txop has frames to transmit over the given link.
linkId | the ID of the given link. |
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().
|
virtual |
|
protectedvirtual |
Notify that access request has been received for the given link.
linkId | the ID of the given link |
Definition at line 732 of file txop.cc.
References ns3::Txop::LinkEntity::access, GetLink(), NS_LOG_FUNCTION, and REQUESTED.
Called by the FrameExchangeManager to notify that channel access has been granted on the given link for the given amount of time.
linkId | the ID of the given link |
txopDuration | the 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().
|
virtual |
Called by the FrameExchangeManager to notify the completion of the transmissions.
This method generates a new backoff and restarts access if needed.
linkId | the 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().
|
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.
|
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().
|
virtual |
Notify that the given link switched to sleep mode.
linkId | the ID of the given link |
Definition at line 777 of file txop.cc.
References NS_LOG_FUNCTION.
|
virtual |
When wake up operation occurs on a link, channel access on that link will be restarted.
linkId | the 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().
mpdu | the 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().
|
protected |
Request access to the ChannelAccessManager associated with the given link.
linkId | the 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().
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.
linkId | the 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().
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.
aifsn | the 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().
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.
aifsn | the number of slots that make up an AIFS. |
linkId | the 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.
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.
aifsns | the 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().
|
virtual |
callback | the 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().
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.
maxCw | the maximum contention window size. |
Definition at line 313 of file txop.cc.
References SetMaxCw().
Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetMaxCw(), and SetMaxCws().
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.
maxCw | the maximum contention window size. |
linkId | the 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().
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.
maxCws | the 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().
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.
minCw | the minimum contention window size. |
Definition at line 270 of file txop.cc.
References SetMinCw().
Referenced by ns3::MeshWifiInterfaceMac::ConfigureContentionWindow(), GetTypeId(), SetMinCw(), and SetMinCws().
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.
minCw | the minimum contention window size. |
linkId | the 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().
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.
minCws | the 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().
void ns3::Txop::SetTxMiddle | ( | const Ptr< MacTxMiddle > | txMiddle | ) |
Set MacTxMiddle this Txop is associated to.
txMiddle | MacTxMiddle 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().
void ns3::Txop::SetTxopLimit | ( | Time | txopLimit | ) |
Set the TXOP limit.
txopLimit | the TXOP limit. Value zero corresponds to default Txop. |
Definition at line 461 of file txop.cc.
References SetTxopLimit().
Referenced by GetTypeId(), SetTxopLimit(), and SetTxopLimits().
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.
txopLimit | the TXOP limit (must not be negative) |
linkId | the 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.
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.
txopLimits | the 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().
Set the wifi MAC this Txop is associated to.
mac | associated 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().
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.
linkId | the ID of the given link |
hadFramesToTransmit | whether packets available for transmission were queued just before the occurrence of the event causing this channel access request |
checkMediumBusy | whether 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().
void ns3::Txop::StartBackoffNow | ( | uint32_t | nSlots, |
uint8_t | linkId ) |
nSlots | the number of slots of the backoff. |
linkId | the 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().
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.
links | a 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().
|
protected |
Update backoff slots for the given link that nSlots has passed.
nSlots | the number of slots to decrement |
backoffUpdateBound | the time at which backoff should start |
linkId | the ID of the given link |
Definition at line 395 of file txop.cc.
References GetLink(), NS_LOG_DEBUG, and NS_LOG_FUNCTION.
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).
linkId | the 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().
|
friend |
|
friend |
< ChannelAccessManager associated class
|
staticconstexpr |
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().
|
staticconstexpr |
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().
|
staticconstexpr |
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().
|
staticconstexpr |
|
protected |
backoff trace value
Definition at line 563 of file txop.h.
Referenced by GenerateBackoff(), and GetTypeId().
|
protected |
CW trace value.
Definition at line 564 of file txop.h.
Referenced by GetTypeId(), ResetCw(), and UpdateFailedCw().
|
protected |
the dropped MPDU callback
Definition at line 551 of file txop.h.
Referenced by ns3::QosTxop::PeekNextMpdu(), and SetDroppedMpduCallback().
|
private |
ID-indexed map of LinkEntity objects.
Definition at line 575 of file txop.h.
Referenced by DoDispose(), DoInitialize(), GetAifsns(), GetLink(), GetLinks(), GetMaxCws(), GetMinCws(), GetTxopLimits(), NotifyOn(), SetAifsn(), SetAifsns(), SetMaxCw(), SetMaxCws(), SetMinCw(), SetMinCws(), SetTxopLimit(), SetTxopLimits(), SetWifiMac(), and SwapLinks().
the wifi MAC
Definition at line 554 of file txop.h.
Referenced by ns3::QosTxop::CompleteMpduTx(), ns3::QosTxop::CreateQueue(), DoDispose(), ns3::QosTxop::GetNextMpdu(), ns3::QosTxop::IsQosOldPacket(), ns3::QosTxop::NotifyChannelReleased(), ns3::QosTxop::PeekNextMpdu(), ns3::QosTxop::PrepareBlockAckRequest(), Queue(), RequestAccess(), SetWifiMac(), StartAccessAfterEvent(), and ns3::QosTxop::StartMuEdcaTimerNow().
|
protected |
the wifi MAC queue
Definition at line 552 of file txop.h.
Referenced by ns3::QosTxop::AssignSequenceNumber(), ns3::QosTxop::CompleteMpduTx(), ns3::QosTxop::CreateQueue(), CreateQueue(), DoDispose(), ns3::QosTxop::GetQosQueueSize(), GetWifiMacQueue(), ns3::QosTxop::GotAddBaResponse(), ns3::QosTxop::HasFramesToTransmit(), HasFramesToTransmit(), ns3::QosTxop::NotifyChannelReleased(), NotifyOff(), ns3::QosTxop::PeekNextMpdu(), Queue(), and SetDroppedMpduCallback().
|
protected |
the random stream
Definition at line 555 of file txop.h.
Referenced by Txop(), AssignStreams(), DoDispose(), and GenerateBackoff().
|
protected |
|
protected |
the MacTxMiddle
Definition at line 553 of file txop.h.
Referenced by ns3::QosTxop::AssignSequenceNumber(), DoDispose(), ns3::QosTxop::GetNextSequenceNumberFor(), ns3::QosTxop::GotAddBaResponse(), ns3::QosTxop::PeekNextMpdu(), ns3::QosTxop::PeekNextSequenceNumberFor(), and SetTxMiddle().
|
private |
user-defined DCF/EDCA access parameters
Definition at line 577 of file txop.h.
Referenced by GetUserAccessParams(), SetAifsns(), SetMaxCws(), SetMinCws(), and SetTxopLimits().