A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
cqa-ff-mac-scheduler.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Authors: Biljana Bojovic <bbojovic@cttc.es>, Nicola Baldo<nbaldo@cttc.es>.
7 *
8 * Note: Implementation is using many common scheduler functionalities in its original version
9 * implemented by Marco Miozzo<mmiozzo@cttc.es> in PF and RR schedulers. *
10 */
11
12#ifndef CQA_FF_MAC_SCHEDULER_H
13#define CQA_FF_MAC_SCHEDULER_H
14
15#include "ff-mac-csched-sap.h"
16#include "ff-mac-sched-sap.h"
17#include "ff-mac-scheduler.h"
18#include "lte-amc.h"
19#include "lte-common.h"
20#include "lte-ffr-sap.h"
21
22#include <ns3/nstime.h>
23
24#include <map>
25#include <set>
26#include <vector>
27
28namespace ns3
29{
30
31/// CGA Flow Performance structure
33{
34 Time flowStart; ///< flow start time
35 unsigned long totalBytesTransmitted; ///< Total bytes send by eNb for this UE
36 unsigned int lastTtiBytesTransmitted; ///< Total bytes send by eNB in last tti for this UE
37 double lastAveragedThroughput; ///< Past average throughput
38 double secondLastAveragedThroughput; ///< Second last average throughput
39 double targetThroughput; ///< Target throughput
40};
41
42/**
43 * \ingroup ff-api
44 * \brief Implements the SCHED SAP and CSCHED SAP for the Channel and QoS Aware Scheduler
45 *
46 * This class implements the interface defined by the FfMacScheduler abstract class
47 */
48
50{
51 public:
52 /**
53 * \brief Constructor
54 *
55 * Creates the MAC Scheduler interface implementation
56 */
58
59 /**
60 * Destructor
61 */
62 ~CqaFfMacScheduler() override;
63
64 // inherited from Object
65 void DoDispose() override;
66 /**
67 * \brief Get the type ID.
68 * \return the object TypeId
69 */
70 static TypeId GetTypeId();
71
72 // inherited from FfMacScheduler
77
78 // FFR SAPs
81
82 /// allow MemberCschedSapProvider<CqaFfMacScheduler> class friend access
84 /// allow MemberSchedSapProvider<CqaFfMacScheduler> class friend access
86
87 /**
88 * Trans mode config update
89 * \param rnti the RNTI
90 * \param txMode the transmit mode
91 */
92 void TransmissionModeConfigurationUpdate(uint16_t rnti, uint8_t txMode);
93
94 private:
95 //
96 // Implementation of the CSCHED API primitives
97 // (See 4.1 for description of the primitives)
98 //
99
100 /**
101 * Csched Cell Config Request
102 * \param params CschedCellConfigReqParameters&
103 */
105
106 /**
107 * Csched UE Config Request
108 * \param params CschedUeConfigReqParameters&
109 */
111
112 /**
113 * Csched LC Config Request
114 * \param params CschedLcConfigReqParameters&
115 */
117
118 /**
119 * Csched LC Release Request
120 * \param params CschedLcReleaseReqParameters&
121 */
123
124 /**
125 * Csched UE Release Request
126 * \param params CschedUeReleaseReqParameters&
127 */
129
130 //
131 // Implementation of the SCHED API primitives
132 // (See 4.2 for description of the primitives)
133 //
134
135 /**
136 * Sched DL RLC Buffer Request
137 * \param params SchedDlRlcBufferReqParameters&
138 */
140
141 /**
142 * Sched DL Paging Buffer Request
143 * \param params SchedDlPagingBufferReqParameters&
144 */
147
148 /**
149 * Sched DL MAC Buffer Request
150 * \param params SchedDlMacBufferReqParameters&
151 */
153
154 /**
155 * Sched DL RLC Buffer Request
156 * \param params SchedDlTriggerReqParameters&
157 */
159
160 /**
161 * Sched DL RACH Info Request
162 * \param params SchedDlRachInfoReqParameters&
163 */
165
166 /**
167 * Sched DL CGI Info Request
168 * \param params SchedDlCqiInfoReqParameters&
169 */
171
172 /**
173 * Sched UL Trigger Request
174 * \param params SchedUlTriggerReqParameters&
175 */
177
178 /**
179 * Sched UL Noise InterferenceRequest
180 * \param params SchedUlNoiseInterferenceReqParameters&
181 */
184
185 /**
186 * Sched UL Sr Info Request
187 * \param params SchedUlSrInfoReqParameters&
188 */
190
191 /**
192 * Sched UL MAC Control Info Request
193 * \param params SchedUlMacCtrlInfoReqParameters&
194 */
197
198 /**
199 * Sched UL CGI Info Request
200 * \param params SchedUlCqiInfoReqParameters&
201 */
203
204 /**
205 * Get RBG Size
206 * \param dlbandwidth the DL bandwidth
207 * \returns the size
208 */
209 int GetRbgSize(int dlbandwidth);
210
211 /**
212 * LC Active per flow
213 * \param rnti the RNTI
214 * \returns the LC active per flow
215 */
216 unsigned int LcActivePerFlow(uint16_t rnti);
217
218 /**
219 * Estimate UL Sinr
220 * \param rnti the RNTI
221 * \param rb the RB
222 * \returns the UL SINR
223 */
224 double EstimateUlSinr(uint16_t rnti, uint16_t rb);
225
226 /// Refresh DL CGI maps
227 void RefreshDlCqiMaps();
228 /// Refresh UL CGI maps
229 void RefreshUlCqiMaps();
230
231 /**
232 * Update DL RLC buffer info
233 * \param rnti the RNTI
234 * \param lcid the LCID
235 * \param size the size
236 */
237 void UpdateDlRlcBufferInfo(uint16_t rnti, uint8_t lcid, uint16_t size);
238 /**
239 * Update UL RLC buffer info
240 * \param rnti the RNTI
241 * \param size the size
242 */
243 void UpdateUlRlcBufferInfo(uint16_t rnti, uint16_t size);
244
245 /**
246 * \brief Update and return a new process Id for the RNTI specified
247 *
248 * \param rnti the RNTI of the UE to be updated
249 * \return the process id value
250 */
251 uint8_t UpdateHarqProcessId(uint16_t rnti);
252
253 /**
254 * \brief Return the availability of free process for the RNTI specified
255 *
256 * \param rnti the RNTI of the UE to be updated
257 * \return the availability
258 */
259 bool HarqProcessAvailability(uint16_t rnti);
260
261 /**
262 * \brief Refresh HARQ processes according to the timers
263 *
264 */
266
267 Ptr<LteAmc> m_amc; ///< LTE AMC object
268
269 /**
270 * Vectors of UE's LC info
271 */
272 std::map<LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters> m_rlcBufferReq;
273
274 /**
275 * Map of UE statistics (per RNTI basis) in downlink
276 */
277 std::map<uint16_t, CqasFlowPerf_t> m_flowStatsDl;
278
279 /**
280 * Map of UE statistics (per RNTI basis)
281 */
282 std::map<uint16_t, CqasFlowPerf_t> m_flowStatsUl;
283
284 /**
285 * Map of UE logical channel config list
286 */
287 std::map<LteFlowId_t, LogicalChannelConfigListElement_s> m_ueLogicalChannelsConfigList;
288
289 /**
290 * Map of UE's DL CQI P01 received
291 */
292 std::map<uint16_t, uint8_t> m_p10CqiRxed;
293
294 /**
295 * Map of UE's timers on DL CQI P01 received
296 */
297 std::map<uint16_t, uint32_t> m_p10CqiTimers;
298
299 /**
300 * Map of UE's DL CQI A30 received
301 */
302 std::map<uint16_t, SbMeasResult_s> m_a30CqiRxed;
303
304 /**
305 * Map of UE's timers on DL CQI A30 received
306 */
307 std::map<uint16_t, uint32_t> m_a30CqiTimers;
308
309 /**
310 * Map of previous allocated UE per RBG
311 * (used to retrieve info from UL-CQI)
312 */
313 std::map<uint16_t, std::vector<uint16_t>> m_allocationMaps;
314
315 /**
316 * Map of UEs' UL-CQI per RBG
317 */
318 std::map<uint16_t, std::vector<double>> m_ueCqi;
319
320 /**
321 * Map of UEs' timers on UL-CQI per RBG
322 */
323 std::map<uint16_t, uint32_t> m_ueCqiTimers;
324
325 /**
326 * Map of UE's buffer status reports received
327 */
328 std::map<uint16_t, uint32_t> m_ceBsrRxed;
329
330 // MAC SAPs
331 FfMacCschedSapUser* m_cschedSapUser; ///< MAC Csched SAP user
332 FfMacSchedSapUser* m_schedSapUser; ///< MAC Sched SAP user
335
336 // FFR SAPs
337 LteFfrSapUser* m_ffrSapUser; ///< FFR SAP user
338 LteFfrSapProvider* m_ffrSapProvider; ///< FFR SAP provider
339
340 /// Internal parameters
342
343 double m_timeWindow; ///< time window
344
345 uint16_t m_nextRntiUl; ///< RNTI of the next user to be served next scheduling in UL
346
347 uint32_t m_cqiTimersThreshold; ///< # of TTIs for which a CQI can be considered valid
348
349 std::map<uint16_t, uint8_t> m_uesTxMode; ///< txMode of the UEs
350
351 // HARQ attributes
352 bool m_harqOn; ///< m_harqOn when false inhibit the HARQ mechanisms (by default active)
353 std::map<uint16_t, uint8_t> m_dlHarqCurrentProcessId; ///< DL HARQ process ID
354 // HARQ status
355 // 0: process Id available
356 // x>0: process Id equal to `x` transmission count
357 std::map<uint16_t, DlHarqProcessesStatus_t>
358 m_dlHarqProcessesStatus; ///< DL HARQ process statuses
359 std::map<uint16_t, DlHarqProcessesTimer_t> m_dlHarqProcessesTimer; ///< DL HARQ process timers
360 std::map<uint16_t, DlHarqProcessesDciBuffer_t>
361 m_dlHarqProcessesDciBuffer; ///< DL HARQ process DCI buffer
362 std::map<uint16_t, DlHarqRlcPduListBuffer_t>
363 m_dlHarqProcessesRlcPduListBuffer; ///< DL HARQ process RLC PDU list buffer
364 std::vector<DlInfoListElement_s> m_dlInfoListBuffered; ///< DL HARQ retx buffered
365
366 std::map<uint16_t, uint8_t> m_ulHarqCurrentProcessId; ///< UL HARQ current process ID
367 // HARQ status
368 // 0: process Id available
369 // x>0: process Id equal to `x` transmission count
370 std::map<uint16_t, UlHarqProcessesStatus_t> m_ulHarqProcessesStatus; ///< UL HARQ process status
371 std::map<uint16_t, UlHarqProcessesDciBuffer_t>
372 m_ulHarqProcessesDciBuffer; ///< UL HARQ process DCI buffer
373
374 // RACH attributes
375 std::vector<RachListElement_s> m_rachList; ///< RACH list
376 std::vector<uint16_t> m_rachAllocationMap; ///< RACH allocation map
377 uint8_t m_ulGrantMcs; ///< MCS for UL grant (default 0)
378
379 std::string m_CqaMetric; ///< CQA metric name
380};
381
382} // namespace ns3
383
384#endif /* QOS_FF_MAC_SCHEDULER_H */
Implements the SCHED SAP and CSCHED SAP for the Channel and QoS Aware Scheduler.
std::map< uint16_t, DlHarqRlcPduListBuffer_t > m_dlHarqProcessesRlcPduListBuffer
DL HARQ process RLC PDU list buffer.
FfMacCschedSapProvider * m_cschedSapProvider
Csched SAP provider.
void RefreshHarqProcesses()
Refresh HARQ processes according to the timers.
int GetRbgSize(int dlbandwidth)
Get RBG Size.
void DoSchedUlTriggerReq(const FfMacSchedSapProvider::SchedUlTriggerReqParameters &params)
Sched UL Trigger Request.
std::map< uint16_t, CqasFlowPerf_t > m_flowStatsDl
Map of UE statistics (per RNTI basis) in downlink.
std::map< uint16_t, uint32_t > m_p10CqiTimers
Map of UE's timers on DL CQI P01 received.
std::map< uint16_t, uint8_t > m_dlHarqCurrentProcessId
DL HARQ process ID.
static TypeId GetTypeId()
Get the type ID.
std::map< uint16_t, DlHarqProcessesTimer_t > m_dlHarqProcessesTimer
DL HARQ process timers.
std::map< uint16_t, uint32_t > m_a30CqiTimers
Map of UE's timers on DL CQI A30 received.
std::map< uint16_t, std::vector< double > > m_ueCqi
Map of UEs' UL-CQI per RBG.
std::map< uint16_t, uint32_t > m_ueCqiTimers
Map of UEs' timers on UL-CQI per RBG.
void DoSchedDlPagingBufferReq(const FfMacSchedSapProvider::SchedDlPagingBufferReqParameters &params)
Sched DL Paging Buffer Request.
~CqaFfMacScheduler() override
Destructor.
unsigned int LcActivePerFlow(uint16_t rnti)
LC Active per flow.
void SetLteFfrSapProvider(LteFfrSapProvider *s) override
Set the Provider part of the LteFfrSap that this Scheduler will interact with.
FfMacSchedSapUser * m_schedSapUser
MAC Sched SAP user.
void DoSchedDlTriggerReq(const FfMacSchedSapProvider::SchedDlTriggerReqParameters &params)
Sched DL RLC Buffer Request.
void UpdateDlRlcBufferInfo(uint16_t rnti, uint8_t lcid, uint16_t size)
Update DL RLC buffer info.
LteFfrSapProvider * m_ffrSapProvider
FFR SAP provider.
uint8_t UpdateHarqProcessId(uint16_t rnti)
Update and return a new process Id for the RNTI specified.
std::map< uint16_t, DlHarqProcessesDciBuffer_t > m_dlHarqProcessesDciBuffer
DL HARQ process DCI buffer.
void DoSchedDlRlcBufferReq(const FfMacSchedSapProvider::SchedDlRlcBufferReqParameters &params)
Sched DL RLC Buffer Request.
std::map< uint16_t, uint8_t > m_ulHarqCurrentProcessId
UL HARQ current process ID.
std::map< uint16_t, SbMeasResult_s > m_a30CqiRxed
Map of UE's DL CQI A30 received.
std::vector< RachListElement_s > m_rachList
RACH list.
void DoSchedDlMacBufferReq(const FfMacSchedSapProvider::SchedDlMacBufferReqParameters &params)
Sched DL MAC Buffer Request.
void DoCschedLcReleaseReq(const FfMacCschedSapProvider::CschedLcReleaseReqParameters &params)
Csched LC Release Request.
void DoSchedUlMacCtrlInfoReq(const FfMacSchedSapProvider::SchedUlMacCtrlInfoReqParameters &params)
Sched UL MAC Control Info Request.
void DoCschedLcConfigReq(const FfMacCschedSapProvider::CschedLcConfigReqParameters &params)
Csched LC Config Request.
FfMacCschedSapUser * m_cschedSapUser
MAC Csched SAP user.
bool HarqProcessAvailability(uint16_t rnti)
Return the availability of free process for the RNTI specified.
LteFfrSapUser * m_ffrSapUser
FFR SAP user.
void UpdateUlRlcBufferInfo(uint16_t rnti, uint16_t size)
Update UL RLC buffer info.
std::map< uint16_t, UlHarqProcessesStatus_t > m_ulHarqProcessesStatus
UL HARQ process status.
uint8_t m_ulGrantMcs
MCS for UL grant (default 0)
void DoSchedUlNoiseInterferenceReq(const FfMacSchedSapProvider::SchedUlNoiseInterferenceReqParameters &params)
Sched UL Noise InterferenceRequest.
void DoSchedUlCqiInfoReq(const FfMacSchedSapProvider::SchedUlCqiInfoReqParameters &params)
Sched UL CGI Info Request.
std::map< LteFlowId_t, LogicalChannelConfigListElement_s > m_ueLogicalChannelsConfigList
Map of UE logical channel config list.
std::map< uint16_t, uint8_t > m_uesTxMode
txMode of the UEs
std::vector< uint16_t > m_rachAllocationMap
RACH allocation map.
void SetFfMacSchedSapUser(FfMacSchedSapUser *s) override
set the user part of the FfMacSchedSap that this Scheduler will interact with.
std::map< uint16_t, uint8_t > m_p10CqiRxed
Map of UE's DL CQI P01 received.
void DoDispose() override
Destructor implementation.
std::map< uint16_t, std::vector< uint16_t > > m_allocationMaps
Map of previous allocated UE per RBG (used to retrieve info from UL-CQI)
void DoSchedDlRachInfoReq(const FfMacSchedSapProvider::SchedDlRachInfoReqParameters &params)
Sched DL RACH Info Request.
std::map< uint16_t, UlHarqProcessesDciBuffer_t > m_ulHarqProcessesDciBuffer
UL HARQ process DCI buffer.
void RefreshUlCqiMaps()
Refresh UL CGI maps.
Ptr< LteAmc > m_amc
LTE AMC object.
void DoSchedDlCqiInfoReq(const FfMacSchedSapProvider::SchedDlCqiInfoReqParameters &params)
Sched DL CGI Info Request.
std::vector< DlInfoListElement_s > m_dlInfoListBuffered
DL HARQ retx buffered.
void DoCschedUeReleaseReq(const FfMacCschedSapProvider::CschedUeReleaseReqParameters &params)
Csched UE Release Request.
FfMacSchedSapProvider * GetFfMacSchedSapProvider() override
void SetFfMacCschedSapUser(FfMacCschedSapUser *s) override
set the user part of the FfMacCschedSap that this Scheduler will interact with.
std::map< uint16_t, CqasFlowPerf_t > m_flowStatsUl
Map of UE statistics (per RNTI basis)
FfMacSchedSapProvider * m_schedSapProvider
Sched SAP provider.
FfMacCschedSapProvider * GetFfMacCschedSapProvider() override
void DoCschedCellConfigReq(const FfMacCschedSapProvider::CschedCellConfigReqParameters &params)
Csched Cell Config Request.
double EstimateUlSinr(uint16_t rnti, uint16_t rb)
Estimate UL Sinr.
void RefreshDlCqiMaps()
Refresh DL CGI maps.
void DoCschedUeConfigReq(const FfMacCschedSapProvider::CschedUeConfigReqParameters &params)
Csched UE Config Request.
FfMacCschedSapProvider::CschedCellConfigReqParameters m_cschedCellConfig
Internal parameters.
std::map< uint16_t, DlHarqProcessesStatus_t > m_dlHarqProcessesStatus
DL HARQ process statuses.
LteFfrSapUser * GetLteFfrSapUser() override
uint16_t m_nextRntiUl
RNTI of the next user to be served next scheduling in UL.
std::map< LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters > m_rlcBufferReq
Vectors of UE's LC info.
std::string m_CqaMetric
CQA metric name.
std::map< uint16_t, uint32_t > m_ceBsrRxed
Map of UE's buffer status reports received.
bool m_harqOn
m_harqOn when false inhibit the HARQ mechanisms (by default active)
void DoSchedUlSrInfoReq(const FfMacSchedSapProvider::SchedUlSrInfoReqParameters &params)
Sched UL Sr Info Request.
void TransmissionModeConfigurationUpdate(uint16_t rnti, uint8_t txMode)
Trans mode config update.
Provides the CSCHED SAP.
FfMacCschedSapUser class.
Provides the SCHED SAP.
FfMacSchedSapUser class.
This abstract base class identifies the interface by means of which the helper object can plug on the...
Service Access Point (SAP) offered by the Frequency Reuse algorithm instance to the MAC Scheduler ins...
Definition lte-ffr-sap.h:29
Service Access Point (SAP) offered by the eNodeB RRC instance to the Frequency Reuse algorithm instan...
MemberCschedSapProvider class.
MemberSchedSapProvider class.
Smart pointer class similar to boost::intrusive_ptr.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
a unique identifier for an interface.
Definition type-id.h:48
Every class exported by the ns3 library is enclosed in the ns3 namespace.
CGA Flow Performance structure.
double lastAveragedThroughput
Past average throughput.
double secondLastAveragedThroughput
Second last average throughput.
double targetThroughput
Target throughput.
Time flowStart
flow start time
unsigned int lastTtiBytesTransmitted
Total bytes send by eNB in last tti for this UE.
unsigned long totalBytesTransmitted
Total bytes send by eNb for this UE.
Parameters of the CSCHED_LC_CONFIG_REQ primitive.
Parameters of the CSCHED_LC_RELEASE_REQ primitive.
Parameters of the CSCHED_UE_CONFIG_REQ primitive.
Parameters of the CSCHED_UE_RELEASE_REQ primitive.
Parameters of the SCHED_DL_CQI_INFO_REQ primitive.
Parameters of the SCHED_DL_MAC_BUFFER_REQ primitive.
Parameters of the SCHED_DL_PAGING_BUFFER_REQ primitive.
Parameters of the SCHED_DL_RACH_INFO_REQ primitive.
Parameters of the SCHED_DL_TRIGGER_REQ primitive.
Parameters of the SCHED_UL_CQI_INFO_REQ primitive.
Parameters of the SCHED_UL_MAC_CTRL_INFO_REQ primitive.
Parameters of the SCHED_UL_NOISE_INTERFERENCE_REQ primitive.
Parameters of the SCHED_UL_SR_INFO_REQ primitive.
Parameters of the SCHED_UL_TRIGGER_REQ primitive.