A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
wifi-mac-queue-scheduler.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Stefano Avallone <stavallo@unina.it>
18 */
19
20#ifndef WIFI_MAC_QUEUE_SCHEDULER_H
21#define WIFI_MAC_QUEUE_SCHEDULER_H
22
23#include "qos-utils.h"
25
26#include "ns3/object.h"
27
28#include <bitset>
29#include <optional>
30
31namespace ns3
32{
33
34class WifiMpdu;
35class WifiMac;
36
42enum class WifiQueueBlockedReason : uint8_t
43{
49};
50
58inline std::ostream&
59operator<<(std::ostream& os, WifiQueueBlockedReason reason)
60{
61 switch (reason)
62 {
64 return (os << "WAITING_ADDBA_RESP");
66 return (os << "POWER_SAVE_MODE");
68 return (os << "USING_OTHER_EMLSR_LINK");
70 return (os << "WAITING_EMLSR_TRANSITION_DELAY");
72 return (os << "REASONS_COUNT");
73 default:
74 NS_ABORT_MSG("Unknown queue blocked reason");
75 return (os << "unknown");
76 }
77}
78
86{
87 public:
92 static TypeId GetTypeId();
93
99 virtual void SetWifiMac(Ptr<WifiMac> mac);
100
110 virtual std::optional<WifiContainerQueueId> GetNext(AcIndex ac, uint8_t linkId) = 0;
121 virtual std::optional<WifiContainerQueueId> GetNext(
122 AcIndex ac,
123 uint8_t linkId,
124 const WifiContainerQueueId& prevQueueId) = 0;
125
134 virtual std::list<uint8_t> GetLinkIds(AcIndex ac, Ptr<const WifiMpdu> mpdu) = 0;
135
151 AcIndex ac,
152 const std::list<WifiContainerQueueType>& types,
153 const Mac48Address& rxAddress,
154 const Mac48Address& txAddress,
155 const std::set<uint8_t>& tids = {},
156 const std::set<uint8_t>& linkIds = {}) = 0;
172 AcIndex ac,
173 const std::list<WifiContainerQueueType>& types,
174 const Mac48Address& rxAddress,
175 const Mac48Address& txAddress,
176 const std::set<uint8_t>& tids = {},
177 const std::set<uint8_t>& linkIds = {}) = 0;
178
180 using Mask = std::bitset<static_cast<std::size_t>(WifiQueueBlockedReason::REASONS_COUNT)>;
181
192 virtual std::optional<Mask> GetQueueLinkMask(AcIndex ac,
193 const WifiContainerQueueId& queueId,
194 uint8_t linkId) = 0;
195
212 virtual void NotifyEnqueue(AcIndex ac, Ptr<WifiMpdu> mpdu) = 0;
221 virtual void NotifyDequeue(AcIndex ac, const std::list<Ptr<WifiMpdu>>& mpdus) = 0;
230 virtual void NotifyRemove(AcIndex ac, const std::list<Ptr<WifiMpdu>>& mpdus) = 0;
231
232 protected:
233 void DoDispose() override;
234
240 Ptr<WifiMac> GetMac() const;
241
242 private:
244};
245
246} // namespace ns3
247
248#endif /* WIFI_MAC_QUEUE_SCHEDULER_H */
an EUI-48 address
Definition: mac48-address.h:46
A base class which provides memory management and object aggregation.
Definition: object.h:89
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
a unique identifier for an interface.
Definition: type-id.h:59
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 void SetWifiMac(Ptr< WifiMac > mac)
Set the wifi MAC.
Ptr< WifiMac > GetMac() const
Get the wifi MAC.
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)=0
Get the list of the IDs of the links the given MPDU (belonging to the given Access Category) can be s...
virtual std::optional< WifiContainerQueueId > GetNext(AcIndex ac, uint8_t linkId)=0
Get the next queue to serve, which is guaranteed to contain at least an MPDU whose lifetime has not e...
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.
virtual std::optional< WifiContainerQueueId > GetNext(AcIndex ac, uint8_t linkId, const WifiContainerQueueId &prevQueueId)=0
Get the next queue to serve after the given one.
void DoDispose() override
Destructor implementation.
static TypeId GetTypeId()
Get the type ID.
Ptr< WifiMac > m_mac
MAC layer.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition: abort.h:49
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 ...
Definition: qos-utils.h:72
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:129
std::tuple< WifiContainerQueueType, WifiReceiverAddressType, Mac48Address, std::optional< uint8_t > > WifiContainerQueueId
Tuple (queue type, receiver address type, Address, TID) identifying a container queue.