22 #ifndef FDBET_FF_MAC_SCHEDULER_H
23 #define FDBET_FF_MAC_SCHEDULER_H
25 #include <ns3/lte-common.h>
26 #include <ns3/ff-mac-csched-sap.h>
27 #include <ns3/ff-mac-sched-sap.h>
28 #include <ns3/ff-mac-scheduler.h>
31 #include <ns3/nstime.h>
32 #include <ns3/lte-amc.h>
40 #define HARQ_PROC_NUM 8
41 #define HARQ_DL_TIMEOUT 11
46 typedef std::vector < uint8_t > DlHarqProcessesStatus_t;
47 typedef std::vector < uint8_t > DlHarqProcessesTimer_t;
48 typedef std::vector < DlDciListElement_s > DlHarqProcessesDciBuffer_t;
49 typedef std::vector < std::vector <struct RlcPduListElement_s> > RlcPduList_t;
50 typedef std::vector < RlcPduList_t > DlHarqRlcPduListBuffer_t;
52 typedef std::vector < UlDciListElement_s > UlHarqProcessesDciBuffer_t;
53 typedef std::vector < uint8_t > UlHarqProcessesStatus_t;
59 unsigned long totalBytesTransmitted;
60 unsigned int lastTtiBytesTrasmitted;
61 double lastAveragedThroughput;
93 static TypeId GetTypeId (
void);
104 void TransmissionModeConfigurationUpdate (uint16_t rnti, uint8_t txMode);
150 int GetRbgSize (
int dlbandwidth);
152 int LcActivePerFlow (uint16_t rnti);
154 double EstimateUlSinr (uint16_t rnti, uint16_t rb);
156 void RefreshDlCqiMaps (
void);
157 void RefreshUlCqiMaps (
void);
159 void UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t size);
160 void UpdateUlRlcBufferInfo (uint16_t rnti, uint16_t size);
189 std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters> m_rlcBufferReq;
195 std::map <uint16_t, fdbetsFlowPerf_t> m_flowStatsDl;
200 std::map <uint16_t, fdbetsFlowPerf_t> m_flowStatsUl;
206 std::map <uint16_t,uint8_t> m_p10CqiRxed;
210 std::map <uint16_t,uint32_t> m_p10CqiTimers;
215 std::map <uint16_t,SbMeasResult_s> m_a30CqiRxed;
219 std::map <uint16_t,uint32_t> m_a30CqiTimers;
225 std::map <uint16_t, std::vector <uint16_t> > m_allocationMaps;
230 std::map <uint16_t, std::vector <double> > m_ueCqi;
234 std::map <uint16_t, uint32_t> m_ueCqiTimers;
239 std::map <uint16_t,uint32_t> m_ceBsrRxed;
254 uint16_t m_nextRntiUl;
256 uint32_t m_cqiTimersThreshold;
258 std::map <uint16_t,uint8_t> m_uesTxMode;
265 std::map <uint16_t, uint8_t> m_dlHarqCurrentProcessId;
269 std::map <uint16_t, DlHarqProcessesStatus_t> m_dlHarqProcessesStatus;
270 std::map <uint16_t, DlHarqProcessesTimer_t> m_dlHarqProcessesTimer;
271 std::map <uint16_t, DlHarqProcessesDciBuffer_t> m_dlHarqProcessesDciBuffer;
272 std::map <uint16_t, DlHarqRlcPduListBuffer_t> m_dlHarqProcessesRlcPduListBuffer;
273 std::vector <DlInfoListElement_s> m_dlInfoListBuffered;
275 std::map <uint16_t, uint8_t> m_ulHarqCurrentProcessId;
279 std::map <uint16_t, UlHarqProcessesStatus_t> m_ulHarqProcessesStatus;
280 std::map <uint16_t, UlHarqProcessesDciBuffer_t> m_ulHarqProcessesDciBuffer;
284 std::vector <struct RachListElement_s> m_rachList;
285 std::vector <uint16_t> m_rachAllocationMap;
286 uint8_t m_ulGrantMcs;
virtual void SetFfMacCschedSapUser(FfMacCschedSapUser *s)
void RefreshHarqProcesses()
Refresh HARQ processes according to the timers.
smart pointer class similar to boost::intrusive_ptr
virtual ~FdBetFfMacScheduler()
virtual void DoDispose(void)
uint8_t UpdateHarqProcessId(uint16_t rnti)
Update and return a new process Id for the RNTI specified.
virtual void SetFfMacSchedSapUser(FfMacSchedSapUser *s)
virtual FfMacSchedSapProvider * GetFfMacSchedSapProvider()
Implements the SCHED SAP and CSCHED SAP for a Frequency Domain Blind Equal Throughput scheduler...
uint8_t HarqProcessAvailability(uint16_t rnti)
Return the availability of free process for the RNTI specified.
virtual FfMacCschedSapProvider * GetFfMacCschedSapProvider()
FdBetFfMacScheduler()
Constructor.
a unique identifier for an interface.