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

RrMultiUserScheduler is a simple OFDMA scheduler that indicates to perform a DL OFDMA transmission if the AP has frames to transmit to at least one station. More...

#include "rr-multi-user-scheduler.h"

+ Inheritance diagram for ns3::RrMultiUserScheduler:
+ Collaboration diagram for ns3::RrMultiUserScheduler:

Classes

struct  MasterInfo
 Information used to sort stations. More...
 

Public Member Functions

 RrMultiUserScheduler ()
 
 ~RrMultiUserScheduler () override
 
- Public Member Functions inherited from ns3::MultiUserScheduler
 MultiUserScheduler ()
 
 ~MultiUserScheduler () override
 
DlMuInfoGetDlMuInfo (uint8_t linkId)
 Get the information required to perform a DL MU transmission on the given link. More...
 
UlMuInfoGetUlMuInfo (uint8_t linkId)
 Get the information required to solicit an UL MU transmission on the given link. More...
 
TxFormat NotifyAccessGranted (Ptr< QosTxop > edca, Time availableTime, bool initialFrame, uint16_t allowedWidth, uint8_t linkId)
 Notify the Multi-user Scheduler that the given AC of the AP gained channel access. More...
 
void SetAccessReqInterval (Time interval)
 Set the duration of the interval between two consecutive requests for channel access made by the MultiUserScheduler. More...
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor. More...
 
 ~Object () override
 Destructor. More...
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together. More...
 
void Dispose ()
 Dispose of this Object. More...
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one. More...
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object. More...
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object. More...
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object. More...
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId. More...
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object. More...
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one. More...
 
bool IsInitialized () const
 Check if the object has been initialized. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o[[maybe_unused]])
 Copy constructor. More...
 
uint32_t GetReferenceCount () const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o[[maybe_unused]])
 Assignment operator. More...
 
void Ref () const
 Increment the reference count. More...
 
void Unref () const
 Decrement the reference count. More...
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor. More...
 
void GetAttribute (std::string name, AttributeValue &value) const
 Get the value of an attribute, raising fatal errors if unsuccessful. More...
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors. More...
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful. More...
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors. More...
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context. More...
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context. More...
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context. More...
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context. More...
 

Static Public Member Functions

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

Protected Member Functions

void DoDispose () override
 Destructor implementation. More...
 
void DoInitialize () override
 Initialize() implementation. More...
 
- Protected Member Functions inherited from ns3::MultiUserScheduler
Ptr< HeFrameExchangeManagerGetHeFem (uint8_t linkId) const
 Get the HE Frame Exchange Manager attached to the AP on the given link. More...
 
TxFormat GetLastTxFormat (uint8_t linkId)
 Get the format of the last transmission on the given link, as determined by the last call to NotifyAccessGranted that did not return NO_TX. More...
 
uint32_t GetMaxSizeOfQosNullAmpdu (const CtrlTriggerHeader &trigger) const
 Get the maximum size in bytes among the A-MPDUs containing QoS Null frames and solicited by the given (BSRP) Trigger Frame. More...
 
Ptr< WifiMpduGetTriggerFrame (const CtrlTriggerHeader &trigger, uint8_t linkId) const
 Get an MPDU containing the given Trigger Frame. More...
 
Ptr< WifiRemoteStationManagerGetWifiRemoteStationManager (uint8_t linkId) const
 Get the station manager attached to the AP on the given link. More...
 
void NotifyNewAggregate () override
 Notify all Objects aggregated to this one of a new Object being aggregated. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes. More...
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed. More...
 

Private Types

typedef std::pair< std::list< MasterInfo >::iterator, Ptr< WifiMpdu > > CandidateInfo
 Information stored for candidate stations. More...
 

Private Member Functions

DlMuInfo ComputeDlMuInfo () override
 Compute the information required to perform a DL MU transmission. More...
 
UlMuInfo ComputeUlMuInfo () override
 Prepare the information required to solicit an UL MU transmission. More...
 
void FinalizeTxVector (WifiTxVector &txVector)
 Finalize the given TXVECTOR by only including the largest subset of the current set of candidate stations that can be allocated equal-sized RUs (with the possible exception of using central 26-tone RUs) without leaving RUs unallocated. More...
 
template<class Func >
WifiTxVector GetTxVectorForUlMu (Func canBeSolicited)
 Compute a TXVECTOR that can be used to construct a Trigger Frame to solicit transmissions from suitable stations, i.e., stations that have established a BlockAck agreement with the AP and for which the given predicate returns true. More...
 
void NotifyStationAssociated (uint16_t aid, Mac48Address address)
 Notify the scheduler that a station associated with the AP. More...
 
void NotifyStationDeassociated (uint16_t aid, Mac48Address address)
 Notify the scheduler that a station deassociated with the AP. More...
 
TxFormat SelectTxFormat () override
 Select the format of the next transmission. More...
 
virtual TxFormat TrySendingBasicTf ()
 Check if it is possible to send a Basic Trigger Frame given the current time limits. More...
 
virtual TxFormat TrySendingBsrpTf ()
 Check if it is possible to send a BSRP Trigger Frame given the current time limits. More...
 
virtual TxFormat TrySendingDlMuPpdu ()
 Check if it is possible to send a DL MU PPDU given the current time limits. More...
 
void UpdateCredits (std::list< MasterInfo > &staList, Time txDuration, const WifiTxVector &txVector)
 Update credits of the stations in the given list considering that a PPDU having the given duration is being transmitted or solicited by using the given TXVECTOR. More...
 

Private Attributes

std::list< CandidateInfom_candidates
 Candidate stations for MU TX. More...
 
bool m_enableBsrp
 send a BSRP before an UL MU transmission More...
 
bool m_enableTxopSharing
 allow A-MPDUs of different TIDs in a DL MU PPDU More...
 
bool m_enableUlOfdma
 enable the scheduler to also return UL_OFDMA More...
 
bool m_forceDlOfdma
 return DL_OFDMA even if no DL MU PPDU was built More...
 
Time m_maxCredits
 Max amount of credits a station can have. More...
 
uint8_t m_nStations
 Number of stations/slots to fill. More...
 
std::map< AcIndex, std::list< MasterInfo > > m_staListDl
 Per-AC list of stations (next to serve for DL first) More...
 
std::list< MasterInfom_staListUl
 List of stations to serve for UL. More...
 
CtrlTriggerHeader m_trigger
 Trigger Frame to send. More...
 
WifiMacHeader m_triggerMacHdr
 MAC header for Trigger Frame. More...
 
WifiTxParameters m_txParams
 TX parameters. More...
 
uint32_t m_ulPsduSize
 the size in byte of the solicited PSDU More...
 
bool m_useCentral26TonesRus
 whether to allocate central 26-tone RUs More...
 

Additional Inherited Members

- Public Types inherited from ns3::MultiUserScheduler
enum  TxFormat { NO_TX = 0 , SU_TX , DL_MU_TX , UL_MU_TX }
 Enumeration of the possible transmission formats. More...
 
- Protected Attributes inherited from ns3::MultiUserScheduler
uint16_t m_allowedWidth
 the allowed width in MHz for the current transmission More...
 
Ptr< ApWifiMacm_apMac
 the AP wifi MAC More...
 
Time m_availableTime
 the time available for frame exchange More...
 
Ptr< QosTxopm_edca
 the AC that gained channel access More...
 
bool m_initialFrame
 true if a TXOP is being started More...
 
uint8_t m_linkId
 the ID of the link over which channel access has been granted More...
 

Detailed Description

RrMultiUserScheduler is a simple OFDMA scheduler that indicates to perform a DL OFDMA transmission if the AP has frames to transmit to at least one station.

RrMultiUserScheduler assigns RUs of equal size (in terms of tones) to stations to which the AP has frames to transmit belonging to the AC who gained access to the channel or higher. The maximum number of stations that can be granted an RU is configurable. Associated stations are served based on their priority. The priority is determined by the credits/debits a station gets when it is selected or not for transmission.

Todo:
Take the supported channel width of the stations into account while selecting stations and assigning RUs to them.

Definition at line 44 of file rr-multi-user-scheduler.h.

Member Typedef Documentation

◆ CandidateInfo

typedef std::pair<std::list<MasterInfo>::iterator, Ptr<WifiMpdu> > ns3::RrMultiUserScheduler::CandidateInfo
private

Information stored for candidate stations.

Definition at line 156 of file rr-multi-user-scheduler.h.

Constructor & Destructor Documentation

◆ RrMultiUserScheduler()

ns3::RrMultiUserScheduler::RrMultiUserScheduler ( )

Definition at line 101 of file rr-multi-user-scheduler.cc.

References NS_LOG_FUNCTION.

◆ ~RrMultiUserScheduler()

ns3::RrMultiUserScheduler::~RrMultiUserScheduler ( )
override

Definition at line 106 of file rr-multi-user-scheduler.cc.

References NS_LOG_FUNCTION_NOARGS.

Member Function Documentation

◆ ComputeDlMuInfo()

MultiUserScheduler::DlMuInfo ns3::RrMultiUserScheduler::ComputeDlMuInfo ( )
overrideprivatevirtual

Compute the information required to perform a DL MU transmission.

Returns
the information required to perform a DL MU transmission

Implements ns3::MultiUserScheduler.

Definition at line 868 of file rr-multi-user-scheduler.cc.

References ns3::WifiTxParameters::m_txDuration, ns3::WifiTxParameters::m_txVector, Min, NS_ASSERT, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::MultiUserScheduler::DlMuInfo::psduMap, ns3::QosUtilsMapTidToAc(), ns3::swap(), and ns3::MultiUserScheduler::DlMuInfo::txParams.

+ Here is the call graph for this function:

◆ ComputeUlMuInfo()

MultiUserScheduler::UlMuInfo ns3::RrMultiUserScheduler::ComputeUlMuInfo ( )
overrideprivatevirtual

Prepare the information required to solicit an UL MU transmission.

Returns
the information required to solicit an UL MU transmission

Implements ns3::MultiUserScheduler.

Definition at line 958 of file rr-multi-user-scheduler.cc.

◆ DoDispose()

void ns3::RrMultiUserScheduler::DoDispose ( void  )
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::MultiUserScheduler.

Definition at line 130 of file rr-multi-user-scheduler.cc.

References ns3::WifiTxParameters::Clear(), ns3::MultiUserScheduler::DoDispose(), ns3::MultiUserScheduler::m_apMac, m_candidates, m_staListDl, m_staListUl, m_txParams, ns3::MakeCallback(), NotifyStationAssociated(), NotifyStationDeassociated(), NS_LOG_FUNCTION, and ns3::ObjectBase::TraceDisconnectWithoutContext().

+ Here is the call graph for this function:

◆ DoInitialize()

void ns3::RrMultiUserScheduler::DoInitialize ( void  )
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::MultiUserScheduler.

Definition at line 112 of file rr-multi-user-scheduler.cc.

References ns3::MultiUserScheduler::DoInitialize(), ns3::MultiUserScheduler::m_apMac, m_staListDl, ns3::MakeCallback(), NotifyStationAssociated(), NotifyStationDeassociated(), NS_ASSERT, NS_LOG_FUNCTION, ns3::ObjectBase::TraceConnectWithoutContext(), and ns3::wifiAcList.

+ Here is the call graph for this function:

◆ FinalizeTxVector()

void ns3::RrMultiUserScheduler::FinalizeTxVector ( WifiTxVector txVector)
private

Finalize the given TXVECTOR by only including the largest subset of the current set of candidate stations that can be allocated equal-sized RUs (with the possible exception of using central 26-tone RUs) without leaving RUs unallocated.

The given TXVECTOR must be a MU TXVECTOR and must contain an HeMuUserInfo entry for each candidate station. The finalized TXVECTOR contains a subset of such HeMuUserInfo entries. The set of candidate stations is also updated by removing stations that are not allocated an RU.

Parameters
txVectorthe given TXVECTOR

Definition at line 770 of file rr-multi-user-scheduler.cc.

References ns3::WifiTxVector::GetHeMuUserInfoMap(), min, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WifiTxVector::SetHeMuUserInfo(), and ns3::swap().

Referenced by GetTxVectorForUlMu().

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

◆ GetTxVectorForUlMu()

template<class Func >
WifiTxVector ns3::RrMultiUserScheduler::GetTxVectorForUlMu ( Func  canBeSolicited)
private

Compute a TXVECTOR that can be used to construct a Trigger Frame to solicit transmissions from suitable stations, i.e., stations that have established a BlockAck agreement with the AP and for which the given predicate returns true.

Template Parameters
Func[deduced] the type of the given predicate
Parameters
canBeSoliciteda predicate returning false for stations that shall not be solicited
Returns
a TXVECTOR that can be used to construct a Trigger Frame to solicit transmissions from suitable stations

Definition at line 183 of file rr-multi-user-scheduler.cc.

References FinalizeTxVector(), ns3::WifiMac::GetBaAgreementEstablishedAsRecipient(), ns3::WifiMac::GetEhtSupported(), ns3::HeRu::GetEqualSizedRusForStations(), ns3::WifiMac::GetFrameExchangeManager(), ns3::WifiMac::GetHeConfiguration(), ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::WifiTxVector::GetPreambleType(), ns3::MultiUserScheduler::GetWifiRemoteStationManager(), ns3::MultiUserScheduler::m_allowedWidth, ns3::MultiUserScheduler::m_apMac, m_candidates, ns3::MultiUserScheduler::m_linkId, m_nStations, m_staListUl, m_useCentral26TonesRus, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WifiMacHeader::SetAddr1(), ns3::WifiMacHeader::SetAddr2(), ns3::WifiTxVector::SetBssColor(), ns3::WifiTxVector::SetChannelWidth(), ns3::WifiTxVector::SetEhtPpduType(), ns3::WifiTxVector::SetGuardInterval(), ns3::WifiTxVector::SetHeMuUserInfo(), ns3::WifiTxVector::SetPreambleType(), ns3::WIFI_MAC_QOSDATA, ns3::WIFI_PREAMBLE_EHT_TB, and ns3::WIFI_PREAMBLE_HE_TB.

Referenced by TrySendingBasicTf(), and TrySendingBsrpTf().

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

◆ GetTypeId()

◆ NotifyStationAssociated()

void ns3::RrMultiUserScheduler::NotifyStationAssociated ( uint16_t  aid,
Mac48Address  address 
)
private

Notify the scheduler that a station associated with the AP.

Parameters
aidthe AID of the station
addressthe MAC address of the station

Definition at line 539 of file rr-multi-user-scheduler.cc.

References first::address, ns3::WifiMac::GetHeSupported(), ns3::ApWifiMac::GetMldOrLinkAddressByAid(), ns3::MultiUserScheduler::m_apMac, m_staListDl, m_staListUl, NS_ASSERT_MSG, and NS_LOG_FUNCTION.

Referenced by DoDispose(), and DoInitialize().

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

◆ NotifyStationDeassociated()

void ns3::RrMultiUserScheduler::NotifyStationDeassociated ( uint16_t  aid,
Mac48Address  address 
)
private

Notify the scheduler that a station deassociated with the AP.

Parameters
aidthe AID of the station
addressthe MAC address of the station

Definition at line 574 of file rr-multi-user-scheduler.cc.

References first::address, ns3::RrMultiUserScheduler::MasterInfo::aid, ns3::WifiMac::GetHeSupported(), ns3::ApWifiMac::GetMldOrLinkAddressByAid(), ns3::ApWifiMac::IsAssociated(), ns3::MultiUserScheduler::m_apMac, m_staListDl, m_staListUl, NS_ASSERT_MSG, and NS_LOG_FUNCTION.

Referenced by DoDispose(), and DoInitialize().

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

◆ SelectTxFormat()

◆ TrySendingBasicTf()

MultiUserScheduler::TxFormat ns3::RrMultiUserScheduler::TrySendingBasicTf ( )
privatevirtual

Check if it is possible to send a Basic Trigger Frame given the current time limits.

Returns
UL_MU_TX if it is possible to send a Basic TF, DL_MU_TX if we can try to send a DL MU PPDU and NO_TX if the remaining time is too short

Definition at line 376 of file rr-multi-user-scheduler.cc.

References first::address, ns3::RrMultiUserScheduler::MasterInfo::address, ns3::RrMultiUserScheduler::MasterInfo::aid, ns3::Time::As(), ns3::BASIC_TRIGGER, ns3::WifiPhy::CalculateTxDuration(), ns3::WifiTxParameters::Clear(), ns3::HePhy::ConvertHeTbPpduDurationToLSigLength(), ns3::MultiUserScheduler::DL_MU_TX, ns3::QosTxop::GetAccessCategory(), ns3::WifiMacHeader::GetAddr1(), ns3::CtrlTriggerHeader::GetGuardInterval(), ns3::MultiUserScheduler::GetHeFem(), ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::ApWifiMac::GetMaxBufferStatus(), ns3::ApWifiMac::GetMldOrLinkAddressByAid(), ns3::WifiPhy::GetPhyBand(), ns3::GetPpduMaxTime(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiPhy::GetSifs(), ns3::ApWifiMac::GetStaList(), ns3::MultiUserScheduler::GetTriggerFrame(), GetTxVectorForUlMu(), ns3::WifiMac::GetWifiPhy(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::Time::IsNegative(), ns3::Time::IsZero(), ns3::WifiTxParameters::m_acknowledgment, ns3::MultiUserScheduler::m_allowedWidth, ns3::MultiUserScheduler::m_apMac, ns3::MultiUserScheduler::m_availableTime, ns3::MultiUserScheduler::m_edca, ns3::MultiUserScheduler::m_linkId, ns3::WifiTxParameters::m_protection, m_staListUl, m_trigger, m_triggerMacHdr, ns3::WifiTxParameters::m_txDuration, m_txParams, ns3::WifiTxParameters::m_txVector, m_ulPsduSize, max, ns3::Max(), ns3::Time::Min(), ns3::Min(), ns3::Time::MS, ns3::MultiUserScheduler::NO_TX, NS_ABORT_MSG_IF, NS_ASSERT, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, queueSize, ns3::Seconds(), ns3::WifiTxVector::SetGuardInterval(), ns3::CtrlTriggerHeader::SetUlLength(), ns3::MultiUserScheduler::UL_MU_TX, and UpdateCredits().

Referenced by SelectTxFormat().

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

◆ TrySendingBsrpTf()

MultiUserScheduler::TxFormat ns3::RrMultiUserScheduler::TrySendingBsrpTf ( )
privatevirtual

Check if it is possible to send a BSRP Trigger Frame given the current time limits.

Returns
UL_MU_TX if it is possible to send a BSRP TF, NO_TX otherwise

Definition at line 292 of file rr-multi-user-scheduler.cc.

References ns3::RrMultiUserScheduler::MasterInfo::aid, ns3::Time::As(), ns3::CtrlTriggerHeader::begin(), ns3::BSRP_TRIGGER, ns3::WifiPhy::CalculateTxDuration(), ns3::WifiTxParameters::Clear(), ns3::HePhy::ConvertHeTbPpduDurationToLSigLength(), ns3::WifiMacHeader::GetAddr1(), ns3::CtrlTriggerHeader::GetGuardInterval(), ns3::MultiUserScheduler::GetHeFem(), ns3::WifiTxVector::GetHeMuUserInfoMap(), ns3::CtrlTriggerHeader::GetHeTbTxVector(), ns3::MultiUserScheduler::GetMaxSizeOfQosNullAmpdu(), ns3::WifiPhy::GetPhyBand(), ns3::WifiPhy::GetSifs(), ns3::ApWifiMac::GetStaList(), ns3::MultiUserScheduler::GetTriggerFrame(), GetTxVectorForUlMu(), ns3::WifiMac::GetWifiPhy(), ns3::WifiMac::GetWifiRemoteStationManager(), ns3::WifiTxParameters::m_acknowledgment, ns3::MultiUserScheduler::m_allowedWidth, ns3::MultiUserScheduler::m_apMac, ns3::MultiUserScheduler::m_availableTime, ns3::MultiUserScheduler::m_linkId, ns3::WifiTxParameters::m_protection, m_staListUl, m_trigger, m_triggerMacHdr, ns3::WifiTxParameters::m_txDuration, m_txParams, ns3::WifiTxParameters::m_txVector, ns3::Max(), ns3::Time::Min(), ns3::Time::MS, ns3::MultiUserScheduler::NO_TX, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Seconds(), ns3::WifiTxVector::SetGuardInterval(), ns3::CtrlTriggerHeader::SetUlLength(), and ns3::MultiUserScheduler::UL_MU_TX.

Referenced by SelectTxFormat().

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

◆ TrySendingDlMuPpdu()

MultiUserScheduler::TxFormat ns3::RrMultiUserScheduler::TrySendingDlMuPpdu ( )
privatevirtual

Check if it is possible to send a DL MU PPDU given the current time limits.

Returns
DL_MU_TX if it is possible to send a DL MU PPDU, SU_TX if a SU PPDU can be transmitted (e.g., there are no HE stations associated or sending a DL MU PPDU is not possible and m_forceDlOfdma is false) or NO_TX otherwise

Definition at line 600 of file rr-multi-user-scheduler.cc.

References ns3::WifiTxParameters::Clear(), ns3::QosTxop::GetAccessCategory(), ns3::WifiMac::GetBaAgreementEstablishedAsOriginator(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiMac::GetEhtSupported(), ns3::HeRu::GetEqualSizedRusForStations(), ns3::WifiMac::GetHeConfiguration(), ns3::MultiUserScheduler::GetHeFem(), ns3::WifiMode::GetMcsValue(), ns3::WifiTxVector::GetMode(), ns3::WifiTxVector::GetNss(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiMac::GetQosTxop(), ns3::MultiUserScheduler::GetWifiRemoteStationManager(), ns3::MultiUserScheduler::m_allowedWidth, ns3::MultiUserScheduler::m_apMac, ns3::MultiUserScheduler::m_availableTime, m_candidates, ns3::MultiUserScheduler::m_edca, m_enableTxopSharing, ns3::MultiUserScheduler::m_initialFrame, ns3::MultiUserScheduler::m_linkId, m_nStations, m_staListDl, m_txParams, ns3::WifiTxParameters::m_txVector, m_useCentral26TonesRus, ns3::Time::Min(), min, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::QosTxop::PeekNextMpdu(), ns3::QosUtilsMapTidToAc(), ns3::HeRu::RU_26_TONE, ns3::WifiTxVector::SetBssColor(), ns3::WifiTxVector::SetChannelWidth(), ns3::WifiTxVector::SetEhtPpduType(), ns3::WifiTxVector::SetGuardInterval(), ns3::WifiTxVector::SetHeMuUserInfo(), ns3::WifiTxVector::SetPreambleType(), ns3::WIFI_PREAMBLE_EHT_MU, ns3::WIFI_PREAMBLE_HE_MU, and ns3::wifiAcList.

Referenced by SelectTxFormat().

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

◆ UpdateCredits()

void ns3::RrMultiUserScheduler::UpdateCredits ( std::list< MasterInfo > &  staList,
Time  txDuration,
const WifiTxVector txVector 
)
private

Update credits of the stations in the given list considering that a PPDU having the given duration is being transmitted or solicited by using the given TXVECTOR.

Parameters
staListthe list of stations
txDurationthe TX duration of the PPDU being transmitted or solicited
txVectorthe TXVECTOR for the PPDU being transmitted or solicited

Definition at line 823 of file rr-multi-user-scheduler.cc.

References ns3::Time::As(), ns3::RrMultiUserScheduler::MasterInfo::credits, ns3::WifiTxVector::GetHeMuUserInfoMap(), min, NS_ASSERT, NS_LOG_FUNCTION, and ns3::Time::ToDouble().

Referenced by TrySendingBasicTf().

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

Member Data Documentation

◆ m_candidates

std::list<CandidateInfo> ns3::RrMultiUserScheduler::m_candidates
private

Candidate stations for MU TX.

Definition at line 168 of file rr-multi-user-scheduler.h.

Referenced by DoDispose(), GetTxVectorForUlMu(), and TrySendingDlMuPpdu().

◆ m_enableBsrp

bool ns3::RrMultiUserScheduler::m_enableBsrp
private

send a BSRP before an UL MU transmission

Definition at line 162 of file rr-multi-user-scheduler.h.

Referenced by GetTypeId(), and SelectTxFormat().

◆ m_enableTxopSharing

bool ns3::RrMultiUserScheduler::m_enableTxopSharing
private

allow A-MPDUs of different TIDs in a DL MU PPDU

Definition at line 159 of file rr-multi-user-scheduler.h.

Referenced by GetTypeId(), and TrySendingDlMuPpdu().

◆ m_enableUlOfdma

bool ns3::RrMultiUserScheduler::m_enableUlOfdma
private

enable the scheduler to also return UL_OFDMA

Definition at line 161 of file rr-multi-user-scheduler.h.

Referenced by GetTypeId(), and SelectTxFormat().

◆ m_forceDlOfdma

bool ns3::RrMultiUserScheduler::m_forceDlOfdma
private

return DL_OFDMA even if no DL MU PPDU was built

Definition at line 160 of file rr-multi-user-scheduler.h.

Referenced by GetTypeId().

◆ m_maxCredits

Time ns3::RrMultiUserScheduler::m_maxCredits
private

Max amount of credits a station can have.

Definition at line 169 of file rr-multi-user-scheduler.h.

Referenced by GetTypeId().

◆ m_nStations

uint8_t ns3::RrMultiUserScheduler::m_nStations
private

Number of stations/slots to fill.

Definition at line 158 of file rr-multi-user-scheduler.h.

Referenced by GetTxVectorForUlMu(), GetTypeId(), and TrySendingDlMuPpdu().

◆ m_staListDl

std::map<AcIndex, std::list<MasterInfo> > ns3::RrMultiUserScheduler::m_staListDl
private

Per-AC list of stations (next to serve for DL first)

Definition at line 166 of file rr-multi-user-scheduler.h.

Referenced by DoDispose(), DoInitialize(), NotifyStationAssociated(), NotifyStationDeassociated(), and TrySendingDlMuPpdu().

◆ m_staListUl

std::list<MasterInfo> ns3::RrMultiUserScheduler::m_staListUl
private

◆ m_trigger

CtrlTriggerHeader ns3::RrMultiUserScheduler::m_trigger
private

Trigger Frame to send.

Definition at line 170 of file rr-multi-user-scheduler.h.

Referenced by SelectTxFormat(), TrySendingBasicTf(), and TrySendingBsrpTf().

◆ m_triggerMacHdr

WifiMacHeader ns3::RrMultiUserScheduler::m_triggerMacHdr
private

MAC header for Trigger Frame.

Definition at line 171 of file rr-multi-user-scheduler.h.

Referenced by TrySendingBasicTf(), and TrySendingBsrpTf().

◆ m_txParams

WifiTxParameters ns3::RrMultiUserScheduler::m_txParams
private

TX parameters.

Definition at line 172 of file rr-multi-user-scheduler.h.

Referenced by DoDispose(), TrySendingBasicTf(), TrySendingBsrpTf(), and TrySendingDlMuPpdu().

◆ m_ulPsduSize

uint32_t ns3::RrMultiUserScheduler::m_ulPsduSize
private

the size in byte of the solicited PSDU

Definition at line 164 of file rr-multi-user-scheduler.h.

Referenced by GetTypeId(), and TrySendingBasicTf().

◆ m_useCentral26TonesRus

bool ns3::RrMultiUserScheduler::m_useCentral26TonesRus
private

whether to allocate central 26-tone RUs

Definition at line 163 of file rr-multi-user-scheduler.h.

Referenced by GetTxVectorForUlMu(), GetTypeId(), and TrySendingDlMuPpdu().


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