9#ifndef WIFI_MAC_QUEUE_SCHEDULER_H 
   10#define WIFI_MAC_QUEUE_SCHEDULER_H 
   15#include "ns3/object.h" 
   54        return (os << 
"WAITING_ADDBA_RESP");
 
   56        return (os << 
"POWER_SAVE_MODE");
 
   58        return (os << 
"USING_OTHER_EMLSR_LINK");
 
   60        return (os << 
"WAITING_EMLSR_TRANSITION_DELAY");
 
   62        return (os << 
"TID_NOT_MAPPED");
 
   64        return (os << 
"REASONS_COUNT");
 
   67        return (os << 
"unknown");
 
 
  104                                                        std::optional<uint8_t> linkId) = 0;
 
  116    virtual std::optional<WifiContainerQueueId> 
GetNext(
 
  118        std::optional<uint8_t> linkId,
 
  133        const std::list<WifiQueueBlockedReason>& ignoredReasons = {}) = 0;
 
  151                             const std::list<WifiContainerQueueType>& types,
 
  154                             const std::set<uint8_t>& tids = {},
 
  155                             const std::set<uint8_t>& linkIds = {}) = 0;
 
  172                               const std::list<WifiContainerQueueType>& types,
 
  175                               const std::set<uint8_t>& tids = {},
 
  176                               const std::set<uint8_t>& linkIds = {}) = 0;
 
  185                                const std::set<uint8_t>& linkIds = {}) = 0;
 
  194                                  const std::set<uint8_t>& linkIds = {}) = 0;
 
 
A base class which provides memory management and object aggregation.
Smart pointer class similar to boost::intrusive_ptr.
a unique identifier for an interface.
WifiMacQueueScheduler is an abstract base class defining the public interface for a wifi MAC queue sc...
virtual void NotifyRemove(AcIndex ac, const std::list< Ptr< WifiMpdu > > &mpdus)=0
Notify the scheduler that the given list of MPDUs have been removed by the given Access Category.
virtual bool GetAllQueuesBlockedOnLink(uint8_t linkId, WifiQueueBlockedReason reason=WifiQueueBlockedReason::REASONS_COUNT)=0
Return whether all the container queues are blocked for the given link for the given reason,...
virtual void SetWifiMac(Ptr< WifiMac > mac)
Set the wifi MAC.
Ptr< WifiMac > GetMac() const
Get the wifi MAC.
virtual void UnblockAllQueues(WifiQueueBlockedReason reason, const std::set< uint8_t > &linkIds={})=0
Unblock the given set of links for all the container queues for the given reason.
virtual void UnblockQueues(WifiQueueBlockedReason reason, AcIndex ac, const std::list< WifiContainerQueueType > &types, const Mac48Address &rxAddress, const Mac48Address &txAddress, const std::set< uint8_t > &tids={}, const std::set< uint8_t > &linkIds={})=0
Unblock the given set of links for the container queues of the given types and Access Category that h...
std::bitset< static_cast< std::size_t >(WifiQueueBlockedReason::REASONS_COUNT)> Mask
Bitset identifying the reasons to block individual links for a container queue.
virtual void BlockQueues(WifiQueueBlockedReason reason, AcIndex ac, const std::list< WifiContainerQueueType > &types, const Mac48Address &rxAddress, const Mac48Address &txAddress, const std::set< uint8_t > &tids={}, const std::set< uint8_t > &linkIds={})=0
Block the given set of links for the container queues of the given types and Access Category that hol...
virtual std::list< uint8_t > GetLinkIds(AcIndex ac, Ptr< const WifiMpdu > mpdu, const std::list< WifiQueueBlockedReason > &ignoredReasons={})=0
Get the list of the IDs of the links the given MPDU (belonging to the given Access Category) can be s...
virtual Ptr< WifiMpdu > HasToDropBeforeEnqueue(AcIndex ac, Ptr< WifiMpdu > mpdu)=0
Check whether an MPDU has to be dropped before enqueuing the given MPDU.
virtual void NotifyDequeue(AcIndex ac, const std::list< Ptr< WifiMpdu > > &mpdus)=0
Notify the scheduler that the given list of MPDUs have been dequeued by the given Access Category.
virtual std::optional< Mask > GetQueueLinkMask(AcIndex ac, const WifiContainerQueueId &queueId, uint8_t linkId)=0
Get the mask associated with the given container queue indicating whether the given link is blocked a...
virtual void NotifyEnqueue(AcIndex ac, Ptr< WifiMpdu > mpdu)=0
Notify the scheduler that the given MPDU has been enqueued by the given Access Category.
void DoDispose() override
Destructor implementation.
static TypeId GetTypeId()
Get the type ID.
Ptr< WifiMac > m_mac
MAC layer.
virtual std::optional< WifiContainerQueueId > GetNext(AcIndex ac, std::optional< uint8_t > linkId, const WifiContainerQueueId &prevQueueId)=0
Get the next queue to serve after the given one.
virtual void BlockAllQueues(WifiQueueBlockedReason reason, const std::set< uint8_t > &linkIds={})=0
Block the given set of links for all the container queues for the given reason.
virtual std::optional< WifiContainerQueueId > GetNext(AcIndex ac, std::optional< uint8_t > linkId)=0
Get the next queue to serve, which is guaranteed to contain at least an MPDU whose lifetime has not e...
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
WifiQueueBlockedReason
Enumeration of the reasons to block container queues.
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
@ WAITING_EMLSR_TRANSITION_DELAY
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std:: tuple< WifiContainerQueueType, WifiReceiverAddressType, Mac48Address, std::optional< uint8_t > > WifiContainerQueueId
Tuple (queue type, receiver address type, Address, TID) identifying a container queue.
std::ostream & operator<<(std::ostream &os, const Angles &a)