A Discrete-Event Network Simulator
API
rr-multi-user-scheduler.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Stefano Avallone <stavallo@unina.it>
19  */
20 
21 #ifndef RR_MULTI_USER_SCHEDULER_H
22 #define RR_MULTI_USER_SCHEDULER_H
23 
24 #include "multi-user-scheduler.h"
25 #include <list>
26 
27 namespace ns3 {
28 
43 {
44 public:
49  static TypeId GetTypeId (void);
51  virtual ~RrMultiUserScheduler ();
52 
53 protected:
54  void DoDispose (void) override;
55  void DoInitialize (void) override;
56 
57 private:
58  TxFormat SelectTxFormat (void) override;
59  DlMuInfo ComputeDlMuInfo (void) override;
60  UlMuInfo ComputeUlMuInfo (void) override;
61 
68  virtual TxFormat TrySendingBsrpTf (void);
69 
77  virtual TxFormat TrySendingBasicTf (void);
78 
87  virtual TxFormat TrySendingDlMuPpdu (void);
88 
95  void AssignRuIndices (WifiTxVector& txVector);
96 
103  void NotifyStationAssociated (uint16_t aid, Mac48Address address);
110  void NotifyStationDeassociated (uint16_t aid, Mac48Address address);
111 
115  struct MasterInfo
116  {
117  uint16_t aid;
119  double credits;
120  };
121 
125  typedef std::pair<std::list<MasterInfo>::iterator, Ptr<const WifiMacQueueItem>> CandidateInfo;
126 
127  uint8_t m_nStations;
133  uint32_t m_ulPsduSize;
134  std::map<AcIndex, std::list<MasterInfo>> m_staList;
135  std::list<CandidateInfo> m_candidates;
141 };
142 
143 } //namespace ns3
144 
145 #endif /* RR_MULTI_USER_SCHEDULER_H */
static TypeId GetTypeId(void)
Get the type ID.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
bool m_useCentral26TonesRus
whether to allocate central 26-tone RUs
bool m_enableUlOfdma
enable the scheduler to also return UL_OFDMA
Mac48Address address
station&#39;s MAC Address
void AssignRuIndices(WifiTxVector &txVector)
Assign an RU index to all the RUs allocated by the given TXVECTOR.
Time m_maxCredits
Max amount of credits a station can have.
std::map< AcIndex, std::list< MasterInfo > > m_staList
Per-AC list of stations (next to serve first)
TxFormat SelectTxFormat(void) override
Select the format of the next transmission.
virtual TxFormat TrySendingBsrpTf(void)
Check if it is possible to send a BSRP Trigger Frame given the current time limits.
DlMuInfo ComputeDlMuInfo(void) override
Compute the information required to perform a DL MU transmission.
WifiTxParameters m_txParams
TX parameters.
void NotifyStationDeassociated(uint16_t aid, Mac48Address address)
Notify the scheduler that a station deassociated with the AP.
bool m_enableBsrp
send a BSRP before an UL MU transmission
TriggerFrameType
The different Trigger frame types.
Definition: ctrl-headers.h:560
void DoInitialize(void) override
Initialize() implementation.
UlMuInfo ComputeUlMuInfo(void) override
Prepare the information required to solicit an UL MU transmission.
MultiUserScheduler is an abstract base class defining the API that APs supporting at least VHT can us...
TriggerFrameType m_ulTriggerType
Trigger Frame type for UL MU.
void NotifyStationAssociated(uint16_t aid, Mac48Address address)
Notify the scheduler that a station associated with the AP.
Information to be provided in case of UL MU transmission.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
address
Definition: first.py:44
std::list< CandidateInfo > m_candidates
Candidate stations for MU TX.
Information used to sort stations.
an EUI-48 address
Definition: mac48-address.h:43
virtual TxFormat TrySendingBasicTf(void)
Check if it is possible to send a Basic Trigger Frame given the current time limits.
Time m_tbPpduDuration
Duration of the solicited TB PPDUs.
void DoDispose(void) override
Destructor implementation.
std::pair< std::list< MasterInfo >::iterator, Ptr< const WifiMacQueueItem > > CandidateInfo
Information stored for candidate stations.
double credits
credits accumulated by the station
RrMultiUserScheduler is a simple OFDMA scheduler that indicates to perform a DL OFDMA transmission if...
TxFormat
Enumeration of the possible transmission formats.
This class stores the TX parameters (TX vector, protection mechanism, acknowledgment mechanism...
uint32_t m_ulPsduSize
the size in byte of the solicited PSDU
virtual TxFormat TrySendingDlMuPpdu(void)
Check if it is possible to send a DL MU PPDU given the current time limits.
uint8_t m_nStations
Number of stations/slots to fill.
bool m_forceDlOfdma
return DL_OFDMA even if no DL MU PPDU was built
bool m_enableTxopSharing
allow A-MPDUs of different TIDs in a DL MU PPDU
a unique identifier for an interface.
Definition: type-id.h:58
Ptr< WifiMacQueueItem > m_trigger
Trigger Frame to send.
Information to be provided in case of DL MU transmission.