21 #ifndef PF_FF_MAC_SCHEDULER_H
22 #define PF_FF_MAC_SCHEDULER_H
24 #include <ns3/lte-common.h>
25 #include <ns3/ff-mac-csched-sap.h>
26 #include <ns3/ff-mac-sched-sap.h>
27 #include <ns3/ff-mac-scheduler.h>
30 #include <ns3/nstime.h>
31 #include <ns3/lte-amc.h>
39 #define HARQ_PROC_NUM 8
40 #define HARQ_DL_TIMEOUT 11
45 typedef std::vector < uint8_t > DlHarqProcessesStatus_t;
46 typedef std::vector < uint8_t > DlHarqProcessesTimer_t;
47 typedef std::vector < DlDciListElement_s > DlHarqProcessesDciBuffer_t;
48 typedef std::vector < std::vector <struct RlcPduListElement_s> > RlcPduList_t;
49 typedef std::vector < RlcPduList_t > DlHarqRlcPduListBuffer_t;
51 typedef std::vector < UlDciListElement_s > UlHarqProcessesDciBuffer_t;
52 typedef std::vector < uint8_t > UlHarqProcessesStatus_t;
58 unsigned long totalBytesTransmitted;
59 unsigned int lastTtiBytesTrasmitted;
60 double lastAveragedThroughput;
92 static TypeId GetTypeId (
void);
103 void TransmissionModeConfigurationUpdate (uint16_t rnti, uint8_t txMode);
149 int GetRbgSize (
int dlbandwidth);
151 int LcActivePerFlow (uint16_t rnti);
153 double EstimateUlSinr (uint16_t rnti, uint16_t rb);
155 void RefreshDlCqiMaps (
void);
156 void RefreshUlCqiMaps (
void);
158 void UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t size);
159 void UpdateUlRlcBufferInfo (uint16_t rnti, uint16_t size);
188 std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters> m_rlcBufferReq;
194 std::map <uint16_t, pfsFlowPerf_t> m_flowStatsDl;
199 std::map <uint16_t, pfsFlowPerf_t> m_flowStatsUl;
205 std::map <uint16_t,uint8_t> m_p10CqiRxed;
209 std::map <uint16_t,uint32_t> m_p10CqiTimers;
214 std::map <uint16_t,SbMeasResult_s> m_a30CqiRxed;
218 std::map <uint16_t,uint32_t> m_a30CqiTimers;
224 std::map <uint16_t, std::vector <uint16_t> > m_allocationMaps;
229 std::map <uint16_t, std::vector <double> > m_ueCqi;
233 std::map <uint16_t, uint32_t> m_ueCqiTimers;
238 std::map <uint16_t,uint32_t> m_ceBsrRxed;
253 uint16_t m_nextRntiUl;
255 uint32_t m_cqiTimersThreshold;
257 std::map <uint16_t,uint8_t> m_uesTxMode;
264 std::map <uint16_t, uint8_t> m_dlHarqCurrentProcessId;
268 std::map <uint16_t, DlHarqProcessesStatus_t> m_dlHarqProcessesStatus;
269 std::map <uint16_t, DlHarqProcessesTimer_t> m_dlHarqProcessesTimer;
270 std::map <uint16_t, DlHarqProcessesDciBuffer_t> m_dlHarqProcessesDciBuffer;
271 std::map <uint16_t, DlHarqRlcPduListBuffer_t> m_dlHarqProcessesRlcPduListBuffer;
272 std::vector <DlInfoListElement_s> m_dlInfoListBuffered;
274 std::map <uint16_t, uint8_t> m_ulHarqCurrentProcessId;
278 std::map <uint16_t, UlHarqProcessesStatus_t> m_ulHarqProcessesStatus;
279 std::map <uint16_t, UlHarqProcessesDciBuffer_t> m_ulHarqProcessesDciBuffer;
283 std::vector <struct RachListElement_s> m_rachList;
284 std::vector <uint16_t> m_rachAllocationMap;
285 uint8_t m_ulGrantMcs;
smart pointer class similar to boost::intrusive_ptr
Implements the SCHED SAP and CSCHED SAP for a Proportional Fair scheduler.
virtual FfMacSchedSapProvider * GetFfMacSchedSapProvider()
uint8_t HarqProcessAvailability(uint16_t rnti)
Return the availability of free process for the RNTI specified.
virtual ~PfFfMacScheduler()
virtual void SetFfMacSchedSapUser(FfMacSchedSapUser *s)
PfFfMacScheduler()
Constructor.
virtual FfMacCschedSapProvider * GetFfMacCschedSapProvider()
virtual void DoDispose(void)
void RefreshHarqProcesses()
Refresh HARQ processes according to the timers.
virtual void SetFfMacCschedSapUser(FfMacCschedSapUser *s)
a unique identifier for an interface.
uint8_t UpdateHarqProcessId(uint16_t rnti)
Update and return a new process Id for the RNTI specified.