5G-LENA nr-v3.1-69-g2dd513a7
The 5G/NR module for the ns-3 simulator
|
A general scheduler for nr in NS3. More...
#include "nr-mac-scheduler-ns3.h"
Classes | |
struct | PointInFTPlane |
Point in the Frequency/Time plane. More... | |
Public Types | |
typedef std::unordered_map< BeamId, HarqVectorIteratorList, BeamIdHash > | ActiveHarqMap |
Map between a beamID and the HARQ of that beam. | |
typedef std::unordered_map< BeamId, std::vector< UePtrAndBufferReq >, BeamIdHash > | ActiveUeMap |
Map between a BeamId and a vector of UE (the UE are in that beam) | |
typedef std::unordered_map< BeamId, uint32_t, BeamIdHash > | BeamSymbolMap |
Map between a BeamId and the symbol assigned to that beam. | |
typedef PointInFTPlane | FTResources |
Represent an amount of RBG/symbols that can be, or is, assigned. | |
using | HarqVectorIterator = NrMacHarqVector::iterator |
using | HarqVectorIteratorList = std::vector< HarqVectorIterator > |
typedef std::pair< UePtr, uint32_t > | UePtrAndBufferReq |
Pair between a pointer to NrMacSchedulerUeInfo and its buffer occupancy. | |
Public Member Functions | |
NrMacSchedulerNs3 () | |
NrMacSchedulerNs3 default constructor. | |
NrMacSchedulerNs3 (const NrMacSchedulerNs3 &other)=delete | |
NrMacSchedulerNs3 copy constructor (deleted) | |
~NrMacSchedulerNs3 () override | |
NrMacSchedulerNs3 deconstructor. | |
int64_t | AssignStreams (int64_t stream) override |
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. | |
void | DoCschedCellConfigReq (const NrMacCschedSapProvider::CschedCellConfigReqParameters ¶ms) override |
Cell configuration. | |
void | DoCschedLcConfigReq (const NrMacCschedSapProvider::CschedLcConfigReqParameters ¶ms) override |
Configure a logical channel for a UE. | |
void | DoCschedLcReleaseReq (const NrMacCschedSapProvider::CschedLcReleaseReqParameters ¶ms) override |
Release a LC. | |
void | DoCschedUeConfigReq (const NrMacCschedSapProvider::CschedUeConfigReqParameters ¶ms) override |
Register an UE. | |
void | DoCschedUeReleaseReq (const NrMacCschedSapProvider::CschedUeReleaseReqParameters ¶ms) override |
Release an UE. | |
void | DoSchedDlCqiInfoReq (const NrMacSchedSapProvider::SchedDlCqiInfoReqParameters ¶ms) override |
Received a DL CQI message. | |
void | DoSchedDlRachInfoReq (const NrMacSchedSapProvider::SchedDlRachInfoReqParameters ¶ms) override |
RACH information. | |
void | DoSchedDlRlcBufferReq (const NrMacSchedSapProvider::SchedDlRlcBufferReqParameters ¶ms) override |
RLC informs of DL data. | |
void | DoSchedDlTriggerReq (const NrMacSchedSapProvider::SchedDlTriggerReqParameters ¶ms) override |
Decide how to fill the frequency/time of a DL slot. | |
void | DoSchedSetMcs (uint32_t mcs) override |
Set a fixed MCS. | |
void | DoSchedUlCqiInfoReq (const NrMacSchedSapProvider::SchedUlCqiInfoReqParameters ¶ms) override |
Received a UL CQI message. | |
void | DoSchedUlMacCtrlInfoReq (const NrMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters ¶ms) override |
Evaluate different types of control messages (only BSR for the moment) | |
void | DoSchedUlSrInfoReq (const NrMacSchedSapProvider::SchedUlSrInfoReqParameters ¶ms) override |
Save the SR list into m_srList. | |
void | DoSchedUlTriggerReq (const NrMacSchedSapProvider::SchedUlTriggerReqParameters ¶ms) override |
Decide how to fill the frequency/time of a UL slot. | |
void | EnableHarqReTx (bool enableFlag) |
Enable HARQ ReTx function. | |
Time | GetCqiTimerThreshold () const |
Get the CqiTimerThreshold. | |
Ptr< const NrAmc > | GetDlAmc () const |
Get the AMC for DL. | |
uint8_t | GetDlCtrlSyms () const override |
Retrieve the number of DL ctrl symbols configured in the scheduler. | |
std::vector< uint8_t > | GetDlNotchedRbgMask () const |
Get the notched (blank) RBGs Mask for the DL. | |
int8_t | GetMaxDlMcs () const |
Get the maximum DL MCS index. | |
uint8_t | GetSrsCtrlSyms () const |
Get the configured value for the SRS symbols. | |
uint8_t | GetStartMcsDl () const |
Get the DL MCS starting value. | |
uint8_t | GetStartMcsUl () const |
Get the DL MCS starting value. | |
Ptr< const NrAmc > | GetUlAmc () const |
Get the AMC for UL. | |
uint8_t | GetUlCtrlSyms () const override |
Retrieve the number of UL ctrl symbols configured in the scheduler. | |
std::vector< uint8_t > | GetUlNotchedRbgMask () const |
Get the notched (blank) RBGs Mask for the UL. | |
void | InstallDlAmc (const Ptr< NrAmc > &dlAmc) |
Install the AMC for the DL part. | |
void | InstallUlAmc (const Ptr< NrAmc > &ulAmc) |
Install the AMC for the DL part. | |
bool | IsDlMcsFixed () const |
Check if the MCS in DL is fixed. | |
bool | IsHarqReTxEnable () const |
Is HARQ ReTx enable function. | |
bool | IsSrsInFSlots () const |
Check if the F slots are allowed for SRS transmission. | |
bool | IsSrsInUlSlots () const |
Check if the UL slots are allowed for SRS transmission. | |
bool | IsUlMcsFixed () const |
Check if the MCS in UL is fixed. | |
void | SetCqiTimerThreshold (const Time &v) |
Set the CqiTimerThreshold. | |
void | SetDlCtrlSyms (uint8_t v) |
Set the number of DL ctrl symbols. | |
void | SetDlNotchedRbgMask (const std::vector< uint8_t > &dlNotchedRbgsMask) |
Set the notched (blank) RBGs Mask for the DL. | |
void | SetFixedDlMcs (bool v) |
Set if the MCS in DL is fixed (in case, it will take the starting value) | |
void | SetFixedUlMcs (bool v) |
Set if the MCS in UL is fixed (in case, it will take the starting value) | |
void | SetLcSched (const TypeId &type) |
Set LC Scheduler Algorithm model type. | |
void | SetMaxDlMcs (int8_t v) |
Set the maximum index for the DL MCS. | |
void | SetRachUlGrantMcs (uint8_t v) |
Sets the default RACH UL grant MCS. | |
void | SetSrsCtrlSyms (uint8_t v) |
Set the number of UL SRS symbols. | |
void | SetSrsInFSlots (bool v) |
Set if the F slots are allowed for SRS transmission. | |
void | SetSrsInUlSlots (bool v) |
Set if the UL slots are allowed for SRS transmission (if True, UL and F slots may carry SRS, if False, SRS are transmitted only in F slots) | |
void | SetStartMcsDl (uint8_t v) |
Set the starting value for the DL MCS. | |
void | SetStartMcsUl (uint8_t v) |
Set the starting value for the UL MCS. | |
void | SetUlCtrlSyms (uint8_t v) |
Set the number of UL ctrl symbols. | |
void | SetUlNotchedRbgMask (const std::vector< uint8_t > &ulNotchedRbgsMask) |
Set the notched (blank) RBGs Mask for the UL. | |
Public Member Functions inherited from ns3::NrMacScheduler | |
NrMacScheduler () | |
NrMacScheduler constructor. | |
~NrMacScheduler () override | |
NrMacScheduler deconstructor. | |
NrMacCschedSapProvider * | GetMacCschedSapProvider () |
Get the MacCschedSapProvider pointer. | |
NrMacSchedSapProvider * | GetMacSchedSapProvider () |
Get the MacSchedSapProvider pointer. | |
void | SetMacCschedSapUser (NrMacCschedSapUser *sap) |
SetMacCschedSapUser. | |
void | SetMacSchedSapUser (NrMacSchedSapUser *sap) |
Set the MacSchedSapUser pointer. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
GetTypeId. | |
Static Public Member Functions inherited from ns3::NrMacScheduler | |
static TypeId | GetTypeId () |
Get the type id. | |
Protected Member Functions | |
virtual BeamSymbolMap | AssignDLRBG (uint32_t symAvail, const ActiveUeMap &activeDl) const =0 |
Assign the DL RBG to the active UE, and return the distribution of symbols per beam. | |
virtual BeamSymbolMap | AssignULRBG (uint32_t symAvail, const ActiveUeMap &activeUl) const =0 |
Assign the UL RBG to the active UE, and return the distribution of symbols per beam. | |
virtual void | ChangeDlBeam (PointInFTPlane *spoint, uint32_t symOfBeam) const =0 |
Perform a custom operation on the starting point each time all the UE of a DL beam have been scheduled. | |
virtual void | ChangeUlBeam (PointInFTPlane *spoint, uint32_t symOfBeam) const =0 |
Perform a custom operation on the starting point each time all the UE of an UL beam have been scheduled. | |
virtual std::shared_ptr< DciInfoElementTdma > | CreateDlDci (PointInFTPlane *spoint, const std::shared_ptr< NrMacSchedulerUeInfo > &ueInfo, uint32_t maxSym) const =0 |
Create a DCI for the specified UE for DL data. | |
virtual LCPtr | CreateLC (const nr::LogicalChannelConfigListElement_s &config) const |
Create a logical channel starting from a configuration. | |
virtual LCGPtr | CreateLCG (const nr::LogicalChannelConfigListElement_s &config) const |
Create a logical channel group starting from a configuration. | |
virtual std::shared_ptr< NrMacSchedulerUeInfo > | CreateUeRepresentation (const NrMacCschedSapProvider::CschedUeConfigReqParameters ¶ms) const =0 |
Create an UE representation for the scheduler. | |
virtual std::shared_ptr< DciInfoElementTdma > | CreateUlDci (PointInFTPlane *spoint, const std::shared_ptr< NrMacSchedulerUeInfo > &ueInfo, uint32_t maxSym) const =0 |
Create a DCI for the specified UE for UL data. | |
uint16_t | GetBandwidthInRbg () const |
uint16_t | GetBwpId () const |
Get the bwp id of this MAC. | |
uint16_t | GetCellId () const |
Get the cell id of this MAC. | |
uint64_t | GetNumRbPerRbg () const |
Private function that is used to get the number of resource blocks per resource block group and also to check whether this value is configured. | |
virtual uint8_t | GetTpc () const =0 |
Returns TPC command. | |
virtual uint8_t | ScheduleDlHarq (NrMacSchedulerNs3::PointInFTPlane *startingPoint, uint8_t symAvail, const ActiveHarqMap &activeDlHarq, const std::unordered_map< uint16_t, UePtr > &ueMap, std::vector< DlHarqInfo > *dlHarqToRetransmit, const std::vector< DlHarqInfo > &dlHarqFeedback, SlotAllocInfo *slotAlloc) const |
Giving the input, append to slotAlloc the allocations for the DL HARQ retransmissions. | |
virtual uint8_t | ScheduleUlHarq (NrMacSchedulerNs3::PointInFTPlane *startingPoint, uint8_t symAvail, const std::unordered_map< uint16_t, UePtr > &ueMap, std::vector< UlHarqInfo > *ulHarqToRetransmit, const std::vector< UlHarqInfo > &ulHarqFeedback, SlotAllocInfo *slotAlloc) const |
Giving the input, append to slotAlloc the allocations for the DL HARQ retransmissions. | |
virtual void | SortDlHarq (ActiveHarqMap *activeDlHarq) const |
Sort the DL HARQ retransmission. | |
virtual void | SortUlHarq (ActiveHarqMap *activeUlHarq) const |
Sort the UL HARQ retransmission. | |
Protected Attributes | |
Ptr< NrAmc > | m_dlAmc |
AMC pointer. | |
Ptr< NrAmc > | m_ulAmc |
AMC pointer. | |
Protected Attributes inherited from ns3::NrMacScheduler | |
NrMacCschedSapProvider * | m_macCschedSapProvider {nullptr} |
SAP Provider. | |
NrMacCschedSapUser * | m_macCschedSapUser {nullptr} |
SAP User. | |
NrMacSchedSapProvider * | m_macSchedSapProvider {nullptr} |
SAP Provider. | |
NrMacSchedSapUser * | m_macSchedSapUser {nullptr} |
SAP user. | |
A general scheduler for nr in NS3.
This abstract class is taking care of creating a solid base for any schedulers in the nr world. The class implements all the API from the FemtoForum API, but in doing so, it defines a new interface that must be followed when designing and writing a new scheduler type.
The architecture has a unique representation of a UE, that is valid across all the schedulers. Each one can expand the definition, adding values or functions to call while doing the scheduler job. The base class is defined as NrMacSchedulerUeInfo. Please refer to its documentation to know the default values, and how to use or expand it.
The documentation continues by following every step involved in the scheduling. Please refer to the function documentation to see a detailed description of the steps done during all the phases.
The attribute of any scheduler can be set directly calling SetAttribute
on the pointer obtained through NrHelper::GetScheduler() or, before it is created, through NrHelper::SetSchedulerAttribute(). The type of the scheduler can be set only before its creation, through the method NrHelper::SetSchedulerTypeId().
When a user arrives in the cell, it is registered with a call to DoCschedUeConfigReq. When the user leaves, the class is made aware with a call to DoCschedUeReleaseReq. The only important operation is the creation of a UE representation and its storage in the general UE map (m_ueMap).
A UE is represented through the class NrMacSchedulerUeInfo, which is used in the internals of the general base class to store and retrieve information such as Logical Channels, CQI, and other things. Please refer to its documentation for a broader overview of its possibilities.
The cell configuration, done with a call to DoCschedCellConfigReq, is ignored.
After the registration of a UE, the scheduler has to know how many bytes there are in its queue, for both uplink and downlink. Before that, the scheduler has to know how many Logical Channels are present for each UE (DL and UL). Each time an LC is created, the MAC calls the function DoCschedLcConfigReq(). Please refer to the documentation of NrMacSchedulerUeInfo to know the details of the LC and LC Groups representation in the code. The LC can be deleted with a call to DoCschedLcReleaseReq (currently not implemented).
A subclass of NrMacSchedulerNs3 can change the representation of an LC and LCG by merely creating an appropriate subclass of NrMacSchedulerLC or NrMacSchedulerLCG (the classes used by the default implementation to store information about the LC or LCG) and then reimplementing the methods CreateLCG() and CreateLC() to return a pointer to a created instance.
For the downlink case, the LC is updated with a message between the gNB RLC layer and the MAC. The scheduler receives a call to the method DoSchedDlRlcBufferReq(), and inside this method is updating all the LC amount.
For the uplink case, there are more passages involved. In the scheduler, however, the important this is that is called the method DoSchedUlMacCtrlInfoReq(). Inside this method, the BSR coming from UE is used to update the LC. More details can be found in the documentation of the class NrMacSchedulerLCG and NrMacSchedulerLC.
The CQI is based on a parameter (m_cqiTimersThreshold) that indicates how long a received CQI is valid. Every time that a Dl CQI is received, the MAC calls the function DoSchedDlCqiInfoReq. In here, the CQI list is traversed and each CQI is reported to the class NrMacSchedulerCQIManagement that is responsible for calculating the CQI. The value is then stored inside the UE representation, ready to be read in the future. The CQI is reset to the default value once the validity timer expires. The default value permits only to have an MCS value 0.
For the UL case, the MAC is calling the method DoSchedUlCqiInfoReq(). The CQI and MCS values are then derived by using a vector of SINR (see the documentation of the function for the details).
At the end of these evaluations, inside the UE representation, is available the value of the DL/UL MCS, ready to be used.
After gathering the information regarding CQI, active users and flows, it is time to take a look into how the class manages the most important thing, the scheduling. The work is about deciding how to fill the frequency/time space, assigning resources to HARQ retransmission or DL/UL new data transmission. The main scheduling function is NrMacSchedulerNs3::DoSchedTriggerReq.
The refreshing of CQI consists in evaluating the validity timer of the value. If the timer is equal to 0, the valued is expired, and the value is reset to the default (MCS 0). The operation is managed inside the class NrMacSchedulerCQIManagement, with the two functions NrMacSchedulerCQIManagement::RefreshDlCQIMaps and NrMacSchedulerCQIManagement::RefreshUlCQIMaps.
To decide if it is necessary to perform HARQ retransmission, and to decide how many retransmission perform, the first step is to evaluate the HARQ feedback received as input. The UEs are reporting the feedbacks, and these feedbacks are merged with the feedback of the previous slots that could not be transmitted (function MergeDlHARQ()). Then, the code evaluates these feedbacks by resetting HARQ processes with an ACK and preparing for the retransmission of the HARQ processes marked with NACK (ProcessHARQFeedbacks()) for both UL and DL HARQs.
At the end of the process, the code evaluates the HARQ timers, and reset the processes with an expired timer (ResetExpiredHARQ()).
To discover more about how HARQ processes are stored and managed, please take a look at the HarqProcess and NrMacHarqVector documentation.
The scheduling of the resources is a process that should fill the slot time and the slot frequencies with retransmitted or fresh data. To simplify the model, you could think that there is a 2D plan in which the "y" values are the frequencies, and the "x" value is the time that passes. The plan should be filled with data, or better said, with a series of blocks. Each block is the minimum assignable resource, called Resource Block Group. There are constraints on how these RBG can be distributed, and often these constraints follow some limitation in the UE equipment, but also they are in place to limit the complexity of a problem which is computationally hard. The position of each block is defined by a starting point (PointInFTPlane) which is a pair (x,y) (or better said (sym, rb)) that represent a point from which a block should be positioned.
Please refer to the DoScheduling() documentation to know how the scheduling is performed.
The code does not support Spatial Multiplexing. It means that it is not possible to schedule UEs that are in different beams at the same time. While this has no practical effects on a time-based distribution of resources, it affects the frequency-based distribution. Therefore, to support both operational modes, the scheduler should compute beforehand the number of active UEs, as well as the number of retransmission to be done. These operations are done, respectively, by the methods ComputeActiveUe() and ComputeActiveHarq(). These methods work on data structures that group UE and retransmission by BeamID (ActiveUeMap and ActiveHarqMap).
It is worth explaining that the schedulers working on slot x for DL, are working on slot (where y is the value of N2 delay). This delay is implemented to simulate the fact that the UE receives the DCI at time , and then has some time (the delay) to prepare its UL data. So, if the scheduler assigns some symbols for uplink data in slot , after y slots have passed (and so the scheduler is preparing the slot $x+y$ for DL data and HARQ retransmission) the scheduler has to remember that there are fewer symbols available. Moreover, it is necessary to not overlap the decisions for DL on top of the (already taken) decision for UL.
All this details are considered in the functions ScheduleUl() and ScheduleDl().
The HARQ scheduling is done, if symbols for HARQ are available, before transmitting new data, and this happens for both DL and UL. The detailed documentation is available in the methods ScheduleDlHarq() and ScheduleUlHarq().
The scheduling of new data is performed by functions ScheduleUlData() and ScheduleDlData(). The priority is for HARQ retransmission, so if the retransmissions fill the slot time, there will no symbols available for new data. Please refer to the method documentation for more detailed information about the scheduling process of new data.
An interesting operation which is not enforced in the current scheduler version is how to distribute the assigned bytes to the different LC of a UE. Now it is implemented the RR assignment, but it can be modified (method AssignBytesToLC()).
The available schedulers are TDMA and OFDMA version of the Round Robin, Proportional Fair, and Maximum Rate.
ns3::NrMacSchedulerNs3 is accessible through the following paths with Config::Set and Config::Connect:
/NodeList/[i]/DeviceList/[i]/$ns3::NrGnbNetDevice/BandwidthPartMap/[i]/MacScheduler/$ns3::NrMacSchedulerNs3
/NodeList/[i]/DeviceList/[i]/$ns3::NrNetDevice/$ns3::NrGnbNetDevice/BandwidthPartMap/[i]/MacScheduler/$ns3::NrMacSchedulerNs3
No TraceSources are defined for this type.
Size of this type is 616 bytes (on a 64-bit architecture).
Definition at line 226 of file nr-mac-scheduler-ns3.h.
typedef std::unordered_map<BeamId, HarqVectorIteratorList, BeamIdHash> ns3::NrMacSchedulerNs3::ActiveHarqMap |
Map between a beamID and the HARQ of that beam.
Definition at line 364 of file nr-mac-scheduler-ns3.h.
typedef std::unordered_map<BeamId, std::vector<UePtrAndBufferReq>, BeamIdHash> ns3::NrMacSchedulerNs3::ActiveUeMap |
Map between a BeamId and a vector of UE (the UE are in that beam)
Definition at line 356 of file nr-mac-scheduler-ns3.h.
typedef std::unordered_map<BeamId, uint32_t, BeamIdHash> ns3::NrMacSchedulerNs3::BeamSymbolMap |
Map between a BeamId and the symbol assigned to that beam.
Definition at line 360 of file nr-mac-scheduler-ns3.h.
Represent an amount of RBG/symbols that can be, or is, assigned.
Definition at line 304 of file nr-mac-scheduler-ns3.h.
using ns3::NrMacSchedulerNs3::HarqVectorIterator = NrMacHarqVector::iterator |
Definition at line 346 of file nr-mac-scheduler-ns3.h.
using ns3::NrMacSchedulerNs3::HarqVectorIteratorList = std::vector<HarqVectorIterator> |
Definition at line 347 of file nr-mac-scheduler-ns3.h.
typedef std::pair<UePtr, uint32_t> ns3::NrMacSchedulerNs3::UePtrAndBufferReq |
Pair between a pointer to NrMacSchedulerUeInfo and its buffer occupancy.
Definition at line 352 of file nr-mac-scheduler-ns3.h.
ns3::NrMacSchedulerNs3::NrMacSchedulerNs3 | ( | ) |
NrMacSchedulerNs3 default constructor.
Definition at line 34 of file nr-mac-scheduler-ns3.cc.
References GetBandwidthInRbg(), GetBwpId(), GetCellId(), ns3::NrMacSchedulerCQIManagement::InstallGetBwpIdFn(), ns3::NrMacSchedulerCQIManagement::InstallGetCellIdFn(), m_dlAmc, and m_ulAmc.
|
delete |
NrMacSchedulerNs3 copy constructor (deleted)
other | instance of NrMacSchedulerNs3 to be copied |
|
override |
NrMacSchedulerNs3 deconstructor.
Definition at line 56 of file nr-mac-scheduler-ns3.cc.
|
protectedpure virtual |
Assign the DL RBG to the active UE, and return the distribution of symbols per beam.
symAvail | available symbols for DL |
activeDl | Map of Beam and active UE per beam |
The function should assign RBG to each UE, modifying the value m_dlRBG for each UE in the activeDl map. In doing so, it has to calculate the number of symbols assigned to each beam, and return it to the caller.
The creation of DCI will be performed by calling CreateDlDci with the appropriate input parameters.
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
overridevirtual |
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 |
Implements ns3::NrMacScheduler.
Definition at line 90 of file nr-mac-scheduler-ns3.cc.
|
protectedpure virtual |
Assign the UL RBG to the active UE, and return the distribution of symbols per beam.
symAvail | available symbols for UL |
activeUl | Map of Beam and active UE per beam |
The function should assign RBG to each UE, modifying the value m_ulRBG for each UE in the activeUl map. In doing so, it has to calculate the number of symbols assigned to each UE, and return it to the caller.
The creation of DCI will be performed by calling CreateDlDci with the appropriate input parameters.
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
protectedpure virtual |
Perform a custom operation on the starting point each time all the UE of a DL beam have been scheduled.
spoint | starting point for the next beam to modify |
symOfBeam | number the symbol used for the beam |
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
protectedpure virtual |
Perform a custom operation on the starting point each time all the UE of an UL beam have been scheduled.
spoint | starting point for the next beam to modify |
symOfBeam | number the symbol used for the beam |
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
protectedpure virtual |
Create a DCI for the specified UE for DL data.
spoint | Starting point |
ueInfo | UE specified |
maxSym | maximum amount of symbols that can be assigned |
The function should create a block in the 2D frequency-time plane in which the specified UE will receive the DL data.
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
protectedvirtual |
Create a logical channel starting from a configuration.
config | configuration of the logical channel |
A subclass can return its own representation of a logical channel by implementing a proper subclass of NrMacSchedulerLC and returning a pointer to a newly created instance.
Definition at line 614 of file nr-mac-scheduler-ns3.cc.
Referenced by DoCschedLcConfigReq().
|
protectedvirtual |
Create a logical channel group starting from a configuration.
config | configuration of the logical channel group |
A subclass can return its own representation of a logical channel by implementing a proper subclass of NrMacSchedulerLCG and returning a pointer to a newly created instance.
Definition at line 631 of file nr-mac-scheduler-ns3.cc.
References ns3::nr::LogicalChannelConfigListElement_s::m_logicalChannelGroup.
Referenced by DoCschedLcConfigReq().
|
protectedpure virtual |
Create an UE representation for the scheduler.
The representation must save any important UE-specific value, and it is shared across all the subclasses. A scheduler which want to save any additional value per-UE, must subclass the class NrMacSchedulerUeInfo and return a pointer to an instance of the new type.
params | Configure parameters for the UE |
Implemented in ns3::NrMacSchedulerOfdmaMR, ns3::NrMacSchedulerOfdmaPF, ns3::NrMacSchedulerOfdmaQos, ns3::NrMacSchedulerOfdmaRR, ns3::NrMacSchedulerTdmaMR, ns3::NrMacSchedulerTdmaPF, ns3::NrMacSchedulerTdmaQos, and ns3::NrMacSchedulerTdmaRR.
Referenced by DoCschedUeConfigReq().
|
protectedpure virtual |
Create a DCI for the specified UE for UL data.
spoint | Starting point |
ueInfo | UE specified |
maxSym | maximum amount of symbols that can be assigned |
The function should create a block in the 2D frequency-time plane in which the specified UE will receive the UL data.
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
overridevirtual |
Cell configuration.
params | unused. |
Ignored. Always Success.
Implements ns3::NrMacScheduler.
Definition at line 503 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacCschedSapProvider::CschedCellConfigReqParameters::m_dlBandwidth, ns3::NrMacScheduler::m_macCschedSapUser, and ns3::NrMacCschedSapProvider::CschedCellConfigReqParameters::m_ulBandwidth.
|
overridevirtual |
Configure a logical channel for a UE.
params | the params of the LC |
The UE should be previously registered in the UE map. Then, for each logical channel to configure, the UE representation is updated, creating an empty LC. When the direction is set to DIR_BOTH, both UL and DL are created.
Each LC is assigned to a LC group (LCG). If the group does not exists, then it is created through the method CreateLCG, and then saved in the UE representation. If the LCG exists or has been created, then the LC creation is done through the method CreateLC and then saved in the UE representation.
Implements ns3::NrMacScheduler.
Definition at line 651 of file nr-mac-scheduler-ns3.cc.
References CreateLC(), and CreateLCG().
|
overridevirtual |
Release a LC.
params | params of the LC to release. |
Implements ns3::NrMacScheduler.
Definition at line 719 of file nr-mac-scheduler-ns3.cc.
|
overridevirtual |
Register an UE.
params | params of the UE |
If the UE is not registered, then create its representation with a call to CreateUeRepresentation, and then save its pointer in the m_ueMap map.
If the UE is registered, update its corresponding beam.
Implements ns3::NrMacScheduler.
Definition at line 526 of file nr-mac-scheduler-ns3.cc.
References CreateUeRepresentation(), ns3::NrMacSchedSapUser::GetNumHarqProcess(), ns3::NrMacCschedSapProvider::CschedUeConfigReqParameters::m_beamId, ns3::NrMacSchedulerSrs::SrsPeriodicityAndOffset::m_isValid, ns3::NrMacScheduler::m_macSchedSapUser, ns3::NrMacSchedulerSrs::SrsPeriodicityAndOffset::m_offset, and ns3::NrMacSchedulerSrs::SrsPeriodicityAndOffset::m_periodicity.
|
overridevirtual |
Release an UE.
params | params of the UE to release |
Remove the UE from the ueMap (m_ueMap) and release its SRS offset for later usage.
Implements ns3::NrMacScheduler.
Definition at line 580 of file nr-mac-scheduler-ns3.cc.
|
overridevirtual |
Received a DL CQI message.
params | DL CQI message |
For each message in the list, calculate the expiration time in number of slots, and then pass all the information to the NrMacSchedulerCQIManagement class.
If the CQI is sub-band, the method NrMacSchedulerCQIManagement::SBCQIReported will be called, otherwise NrMacSchedulerCQIManagement::WBCQIReported.
Implements ns3::NrMacScheduler.
Definition at line 847 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedulerCQIManagement::DlSBCQIReported(), ns3::NrMacSchedulerCQIManagement::DlWBCQIReported(), ns3::NrMacSchedSapUser::GetSlotPeriod(), ns3::NrMacSchedSapProvider::SchedDlCqiInfoReqParameters::m_cqiList, ns3::NrMacScheduler::m_macSchedSapUser, and ns3::DlCqiInfo::WB.
|
overridevirtual |
RACH information.
params | SchedDlRachInfoReqParameters |
Implements ns3::NrMacScheduler.
Definition at line 222 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapProvider::SchedDlRachInfoReqParameters::m_rachList.
|
overridevirtual |
RLC informs of DL data.
params | parameters of the function |
The message contains the LC and the amount of data buffered. Therefore, in this method we cycle through all the UE LCG to find the LC, and once it is found, it is updated with the new amount of data.
Implements ns3::NrMacScheduler.
Definition at line 741 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapProvider::SchedDlRlcBufferReqParameters::m_logicalChannelIdentity, and ns3::NrMacSchedSapProvider::SchedDlRlcBufferReqParameters::m_rnti.
|
overridevirtual |
Decide how to fill the frequency/time of a DL slot.
params | parameters for the scheduler |
The function starts by refreshing the CQI received, and eventually resetting the expired values. Then, the HARQ feedback are processed (ProcessHARQFeedbacks), and finally the expired HARQs are canceled (ResetExpiredHARQ).
Implements ns3::NrMacScheduler.
Definition at line 2326 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedulerUeInfo::GetDlHarqVector(), ns3::NrMacSchedSapProvider::SchedDlTriggerReqParameters::m_dlHarqInfoList, and ns3::NrMacSchedulerCQIManagement::RefreshDlCqiMaps().
|
overridevirtual |
Set a fixed MCS.
mcs | The MCS. |
Set a fixed MCS for all UE that will be registered AFTER the call to this function.
Implements ns3::NrMacScheduler.
Definition at line 212 of file nr-mac-scheduler-ns3.cc.
|
overridevirtual |
Received a UL CQI message.
params | UL CQI message |
Calculate the expiration time in number of slots, and then pass all the information to the NrMacSchedulerCQIManagement class.
In UL, we have to know the previously allocated symbols and the total TBS to be able to calculate CQI and MCS, so a special stack is maintained (m_ulAllocationMap).
Only UlCqiInfo::PUSCH is currently supported.
Implements ns3::NrMacScheduler.
Definition at line 893 of file nr-mac-scheduler-ns3.cc.
References ns3::SfnSf::GetEncoding(), ns3::NrMacSchedSapUser::GetNumRbPerRbg(), ns3::NrMacSchedSapUser::GetSlotPeriod(), ns3::NrMacSchedSapUser::GetSpectrumModel(), ns3::NrMacScheduler::m_macSchedSapUser, ns3::NrMacSchedSapProvider::SchedUlCqiInfoReqParameters::m_sfnSf, ns3::NrMacSchedSapProvider::SchedUlCqiInfoReqParameters::m_symStart, ns3::NrMacSchedSapProvider::SchedUlCqiInfoReqParameters::m_ulCqi, and ns3::NrMacSchedulerCQIManagement::UlSBCQIReported().
|
overridevirtual |
Evaluate different types of control messages (only BSR for the moment)
params | parameters of the control message |
For each BSR received, calls BSRReceivedFromUe. Ignore all the others control messages.
Implements ns3::NrMacScheduler.
Definition at line 818 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters::m_macCeList.
|
overridevirtual |
Save the SR list into m_srList.
params | SR list |
m_srList will be evaluated in DoScheduleUlSr()
Implements ns3::NrMacScheduler.
Definition at line 2482 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapProvider::SchedUlSrInfoReqParameters::m_srList.
|
overridevirtual |
Decide how to fill the frequency/time of a UL slot.
params | parameters for the scheduler |
The function starts by refreshing the CQI received, and eventually resetting the expired values. Then, the HARQ feedback are processed (ProcessHARQFeedbacks), and finally the expired HARQs are canceled (ResetExpiredHARQ).
Implements ns3::NrMacScheduler.
Definition at line 2422 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedulerUeInfo::GetUlHarqVector(), ns3::NrMacSchedSapProvider::SchedUlTriggerReqParameters::m_ulHarqInfoList, and ns3::NrMacSchedulerCQIManagement::RefreshUlCqiMaps().
void ns3::NrMacSchedulerNs3::EnableHarqReTx | ( | bool | enableFlag | ) |
Enable HARQ ReTx function.
Remember we introduced the EnableHarqReTx attribute only for FB calibration example. We want to disable HARQ ReTx because ReTx are scheduled in OFDMA fashion. In a TDMA simulation, such retransmissions change the SINR trends in a scenario. Also, REMEMBER that this solution of disabling the HARQ ReTx not very optimized because gNB MAC will still buffer the packet and UE would still transmit the HARQ feedback for the first transmission.
enableFlag | If true, it would set the max HARQ ReTx to 3; otherwise it set it to 0 |
Definition at line 429 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
|
protected |
Definition at line 2208 of file nr-mac-scheduler-ns3.cc.
Referenced by NrMacSchedulerNs3(), ns3::NrMacSchedulerOfdma::AssignDLRBG(), ns3::NrMacSchedulerOfdma::AssignULRBG(), ns3::NrMacSchedulerOfdma::CreateDlDci(), ns3::NrMacSchedulerTdma::CreateDlDci(), ns3::NrMacSchedulerOfdma::CreateUlDci(), and ns3::NrMacSchedulerTdma::CreateUlDci().
|
protected |
Get the bwp id of this MAC.
Definition at line 2182 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapUser::GetBwpId(), and ns3::NrMacScheduler::m_macSchedSapUser.
Referenced by NrMacSchedulerNs3(), ns3::NrMacSchedulerOfdma::CreateDlDci(), and ns3::NrMacSchedulerOfdma::CreateUlDci().
|
protected |
Get the cell id of this MAC.
Definition at line 2195 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapUser::GetCellId(), and ns3::NrMacScheduler::m_macSchedSapUser.
Referenced by NrMacSchedulerNs3().
Time ns3::NrMacSchedulerNs3::GetCqiTimerThreshold | ( | ) | const |
Get the CqiTimerThreshold.
Definition at line 238 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
Ptr< const NrAmc > ns3::NrMacSchedulerNs3::GetDlAmc | ( | ) | const |
Get the AMC for DL.
Definition at line 83 of file nr-mac-scheduler-ns3.cc.
References m_dlAmc.
|
overridevirtual |
Retrieve the number of DL ctrl symbols configured in the scheduler.
Implements ns3::NrMacScheduler.
Definition at line 339 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
std::vector< uint8_t > ns3::NrMacSchedulerNs3::GetDlNotchedRbgMask | ( | ) | const |
Get the notched (blank) RBGs Mask for the DL.
Definition at line 366 of file nr-mac-scheduler-ns3.cc.
Referenced by ns3::NrMacSchedulerOfdma::AssignDLRBG(), ns3::NrMacSchedulerOfdma::CreateDlDci(), and ns3::NrMacSchedulerTdma::CreateDlDci().
int8_t ns3::NrMacSchedulerNs3::GetMaxDlMcs | ( | ) | const |
Get the maximum DL MCS index.
Definition at line 294 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
|
protected |
Private function that is used to get the number of resource blocks per resource block group and also to check whether this value is configured.
Definition at line 598 of file nr-mac-scheduler-ns3.cc.
References ns3::NrMacSchedSapUser::GetNumRbPerRbg(), and ns3::NrMacScheduler::m_macSchedSapUser.
Referenced by ns3::NrMacSchedulerOfdma::CreateDlDci(), ns3::NrMacSchedulerTdma::CreateDlDci(), ns3::NrMacSchedulerOfdmaMR::CreateUeRepresentation(), ns3::NrMacSchedulerOfdmaPF::CreateUeRepresentation(), ns3::NrMacSchedulerOfdmaQos::CreateUeRepresentation(), ns3::NrMacSchedulerOfdmaRR::CreateUeRepresentation(), ns3::NrMacSchedulerTdmaMR::CreateUeRepresentation(), ns3::NrMacSchedulerTdmaPF::CreateUeRepresentation(), ns3::NrMacSchedulerTdmaQos::CreateUeRepresentation(), ns3::NrMacSchedulerTdmaRR::CreateUeRepresentation(), ns3::NrMacSchedulerOfdma::CreateUlDci(), and ns3::NrMacSchedulerTdma::CreateUlDci().
uint8_t ns3::NrMacSchedulerNs3::GetSrsCtrlSyms | ( | ) | const |
Get the configured value for the SRS symbols.
Definition at line 399 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
uint8_t ns3::NrMacSchedulerNs3::GetStartMcsDl | ( | ) | const |
Get the DL MCS starting value.
Definition at line 280 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
uint8_t ns3::NrMacSchedulerNs3::GetStartMcsUl | ( | ) | const |
Get the DL MCS starting value.
Definition at line 326 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
|
protectedpure virtual |
Returns TPC command.
Implemented in ns3::NrMacSchedulerOfdma, and ns3::NrMacSchedulerTdma.
|
static |
GetTypeId.
Definition at line 97 of file nr-mac-scheduler-ns3.cc.
References EnableHarqReTx(), GetCqiTimerThreshold(), GetDlCtrlSyms(), GetMaxDlMcs(), GetSrsCtrlSyms(), GetStartMcsDl(), GetStartMcsUl(), ns3::NrMacSchedulerLcRR::GetTypeId(), GetUlCtrlSyms(), IsDlMcsFixed(), IsHarqReTxEnable(), IsSrsInFSlots(), IsSrsInUlSlots(), IsUlMcsFixed(), m_dlAmc, m_ulAmc, SetCqiTimerThreshold(), SetDlCtrlSyms(), SetFixedDlMcs(), SetFixedUlMcs(), SetLcSched(), SetMaxDlMcs(), SetRachUlGrantMcs(), SetSrsCtrlSyms(), SetSrsInFSlots(), SetSrsInUlSlots(), SetStartMcsDl(), SetStartMcsUl(), and SetUlCtrlSyms().
Ptr< const NrAmc > ns3::NrMacSchedulerNs3::GetUlAmc | ( | ) | const |
Get the AMC for UL.
Definition at line 76 of file nr-mac-scheduler-ns3.cc.
References m_ulAmc.
|
overridevirtual |
Retrieve the number of UL ctrl symbols configured in the scheduler.
Implements ns3::NrMacScheduler.
Definition at line 491 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
std::vector< uint8_t > ns3::NrMacSchedulerNs3::GetUlNotchedRbgMask | ( | ) | const |
Get the notched (blank) RBGs Mask for the UL.
Definition at line 387 of file nr-mac-scheduler-ns3.cc.
Referenced by ns3::NrMacSchedulerOfdma::AssignULRBG(), ns3::NrMacSchedulerOfdma::CreateUlDci(), and ns3::NrMacSchedulerTdma::CreateUlDci().
void ns3::NrMacSchedulerNs3::InstallDlAmc | ( | const Ptr< NrAmc > & | dlAmc | ) |
Install the AMC for the DL part.
dlAmc | DL AMC |
Usually called by the helper
Definition at line 62 of file nr-mac-scheduler-ns3.cc.
References m_dlAmc.
void ns3::NrMacSchedulerNs3::InstallUlAmc | ( | const Ptr< NrAmc > & | ulAmc | ) |
Install the AMC for the DL part.
ulAmc | DL AMC |
Usually called by the helper
Definition at line 69 of file nr-mac-scheduler-ns3.cc.
References m_ulAmc.
bool ns3::NrMacSchedulerNs3::IsDlMcsFixed | ( | ) | const |
Check if the MCS in DL is fixed.
Definition at line 252 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
bool ns3::NrMacSchedulerNs3::IsHarqReTxEnable | ( | ) | const |
Is HARQ ReTx enable function.
Definition at line 435 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
bool ns3::NrMacSchedulerNs3::IsSrsInFSlots | ( | ) | const |
Check if the F slots are allowed for SRS transmission.
Definition at line 423 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
bool ns3::NrMacSchedulerNs3::IsSrsInUlSlots | ( | ) | const |
Check if the UL slots are allowed for SRS transmission.
Definition at line 411 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
bool ns3::NrMacSchedulerNs3::IsUlMcsFixed | ( | ) | const |
Check if the MCS in UL is fixed.
Definition at line 266 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
|
protectedvirtual |
Giving the input, append to slotAlloc the allocations for the DL HARQ retransmissions.
startingPoint | starting point of the first retransmission. It should be set to the next available starting point |
symAvail | Available symbols |
activeDlHarq | Map of the active HARQ processes |
ueMap | Map of the UEs |
dlHarqToRetransmit | HARQ feedbacks that could not be transmitted (to fill) |
dlHarqFeedback | all the HARQ feedbacks |
slotAlloc | Slot allocation info |
Definition at line 441 of file nr-mac-scheduler-ns3.cc.
|
protectedvirtual |
Giving the input, append to slotAlloc the allocations for the DL HARQ retransmissions.
startingPoint | starting point of the first retransmission. It should be set to the next available starting point |
symAvail | Available symbols |
ueMap | Map of the UEs |
ulHarqToRetransmit | HARQ feedbacks that could not be transmitted (to fill) |
ulHarqFeedback | all the HARQ feedbacks |
slotAlloc | Slot allocation info |
Definition at line 460 of file nr-mac-scheduler-ns3.cc.
void ns3::NrMacSchedulerNs3::SetCqiTimerThreshold | ( | const Time & | v | ) |
Set the CqiTimerThreshold.
v | the value to set |
Definition at line 231 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetDlCtrlSyms | ( | uint8_t | v | ) |
Set the number of DL ctrl symbols.
v | number of DL ctrl symbols |
Definition at line 333 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetDlNotchedRbgMask | ( | const std::vector< uint8_t > & | dlNotchedRbgsMask | ) |
Set the notched (blank) RBGs Mask for the DL.
dlNotchedRbgsMask | The mask of notched RBGs |
Definition at line 351 of file nr-mac-scheduler-ns3.cc.
void ns3::NrMacSchedulerNs3::SetFixedDlMcs | ( | bool | v | ) |
Set if the MCS in DL is fixed (in case, it will take the starting value)
v | the value |
Definition at line 245 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetFixedUlMcs | ( | bool | v | ) |
Set if the MCS in UL is fixed (in case, it will take the starting value)
v | the value |
Definition at line 259 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetLcSched | ( | const TypeId & | type | ) |
Set LC Scheduler Algorithm model type.
type | the LC Scheduler Algorithm Error model type |
Definition at line 307 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetMaxDlMcs | ( | int8_t | v | ) |
Set the maximum index for the DL MCS.
v | the value |
Definition at line 287 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetRachUlGrantMcs | ( | uint8_t | v | ) |
Sets the default RACH UL grant MCS.
v | the MCS to be used for RACH UL grant |
Definition at line 301 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetSrsCtrlSyms | ( | uint8_t | v | ) |
Set the number of UL SRS symbols.
v | number of SRS symbols |
Definition at line 393 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetSrsInFSlots | ( | bool | v | ) |
Set if the F slots are allowed for SRS transmission.
v | the value |
Definition at line 417 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetSrsInUlSlots | ( | bool | v | ) |
Set if the UL slots are allowed for SRS transmission (if True, UL and F slots may carry SRS, if False, SRS are transmitted only in F slots)
v | the value |
Definition at line 405 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetStartMcsDl | ( | uint8_t | v | ) |
Set the starting value for the DL MCS.
v | the value |
Definition at line 273 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetStartMcsUl | ( | uint8_t | v | ) |
Set the starting value for the UL MCS.
v | the value |
Definition at line 319 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetUlCtrlSyms | ( | uint8_t | v | ) |
Set the number of UL ctrl symbols.
v | number of UL ctrl symbols |
Definition at line 345 of file nr-mac-scheduler-ns3.cc.
Referenced by GetTypeId().
void ns3::NrMacSchedulerNs3::SetUlNotchedRbgMask | ( | const std::vector< uint8_t > & | ulNotchedRbgsMask | ) |
Set the notched (blank) RBGs Mask for the UL.
ulNotchedRbgsMask | The mask of notched RBGs |
Definition at line 372 of file nr-mac-scheduler-ns3.cc.
|
protectedvirtual |
Sort the DL HARQ retransmission.
activeDlHarq | HARQ DL to retransmit |
The HARQ are divided by beams. In each beam, the HARQ should be ordered in a way that the first element should be the first to transmit, and then (if there is space) the second, the third, and so on.
Definition at line 477 of file nr-mac-scheduler-ns3.cc.
|
protectedvirtual |
Sort the UL HARQ retransmission.
activeUlHarq | HARQ UL to retransmit |
The HARQ are divided by beams. In each beam, the HARQ should be ordered in a way that the first element should be the first to transmit, and then (if there is space) the second, the third, and so on.
Definition at line 484 of file nr-mac-scheduler-ns3.cc.
|
protected |
AMC pointer.
Definition at line 705 of file nr-mac-scheduler-ns3.h.
Referenced by NrMacSchedulerNs3(), ns3::NrMacSchedulerOfdmaPF::AssignedDlResources(), ns3::NrMacSchedulerOfdmaQos::AssignedDlResources(), ns3::NrMacSchedulerOfdmaRR::AssignedDlResources(), ns3::NrMacSchedulerTdmaPF::AssignedDlResources(), ns3::NrMacSchedulerTdmaQos::AssignedDlResources(), ns3::NrMacSchedulerTdmaRR::AssignedDlResources(), ns3::NrMacSchedulerOfdmaPF::BeforeDlSched(), ns3::NrMacSchedulerOfdmaQos::BeforeDlSched(), ns3::NrMacSchedulerTdmaPF::BeforeDlSched(), ns3::NrMacSchedulerTdmaQos::BeforeDlSched(), ns3::NrMacSchedulerOfdma::CreateDlDci(), ns3::NrMacSchedulerTdma::CreateDlDci(), GetDlAmc(), GetTypeId(), InstallDlAmc(), ns3::NrMacSchedulerOfdmaPF::NotAssignedDlResources(), ns3::NrMacSchedulerOfdmaQos::NotAssignedDlResources(), ns3::NrMacSchedulerTdmaPF::NotAssignedDlResources(), and ns3::NrMacSchedulerTdmaQos::NotAssignedDlResources().
|
protected |
AMC pointer.
Definition at line 706 of file nr-mac-scheduler-ns3.h.
Referenced by NrMacSchedulerNs3(), ns3::NrMacSchedulerOfdmaPF::AssignedUlResources(), ns3::NrMacSchedulerOfdmaQos::AssignedUlResources(), ns3::NrMacSchedulerOfdmaRR::AssignedUlResources(), ns3::NrMacSchedulerTdmaPF::AssignedUlResources(), ns3::NrMacSchedulerTdmaQos::AssignedUlResources(), ns3::NrMacSchedulerTdmaRR::AssignedUlResources(), ns3::NrMacSchedulerOfdmaPF::BeforeUlSched(), ns3::NrMacSchedulerOfdmaQos::BeforeUlSched(), ns3::NrMacSchedulerTdmaPF::BeforeUlSched(), ns3::NrMacSchedulerTdmaQos::BeforeUlSched(), ns3::NrMacSchedulerOfdma::CreateUlDci(), ns3::NrMacSchedulerTdma::CreateUlDci(), GetTypeId(), GetUlAmc(), InstallUlAmc(), ns3::NrMacSchedulerOfdmaPF::NotAssignedUlResources(), ns3::NrMacSchedulerOfdmaQos::NotAssignedUlResources(), ns3::NrMacSchedulerTdmaPF::NotAssignedUlResources(), and ns3::NrMacSchedulerTdmaQos::NotAssignedUlResources().