22 #ifndef TDTBFQ_FF_MAC_SCHEDULER_H
23 #define TDTBFQ_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;
62 uint64_t packetArrivalRate;
100 static TypeId GetTypeId (
void);
111 void TransmissionModeConfigurationUpdate (uint16_t rnti, uint8_t txMode);
157 int GetRbgSize (
int dlbandwidth);
159 int LcActivePerFlow (uint16_t rnti);
161 double EstimateUlSinr (uint16_t rnti, uint16_t rb);
163 void RefreshDlCqiMaps (
void);
164 void RefreshUlCqiMaps (
void);
166 void UpdateDlRlcBufferInfo (uint16_t rnti, uint8_t lcid, uint16_t size);
167 void UpdateUlRlcBufferInfo (uint16_t rnti, uint16_t size);
196 std::map <LteFlowId_t, FfMacSchedSapProvider::SchedDlRlcBufferReqParameters> m_rlcBufferReq;
202 std::map <uint16_t, tdtbfqsFlowPerf_t> m_flowStatsDl;
207 std::map <uint16_t, tdtbfqsFlowPerf_t> m_flowStatsUl;
213 std::map <uint16_t,uint8_t> m_p10CqiRxed;
217 std::map <uint16_t,uint32_t> m_p10CqiTimers;
222 std::map <uint16_t,SbMeasResult_s> m_a30CqiRxed;
226 std::map <uint16_t,uint32_t> m_a30CqiTimers;
232 std::map <uint16_t, std::vector <uint16_t> > m_allocationMaps;
237 std::map <uint16_t, std::vector <double> > m_ueCqi;
241 std::map <uint16_t, uint32_t> m_ueCqiTimers;
246 std::map <uint16_t,uint32_t> m_ceBsrRxed;
261 uint16_t m_nextRntiUl;
263 uint32_t m_cqiTimersThreshold;
265 std::map <uint16_t,uint8_t> m_uesTxMode;
271 uint32_t m_creditLimit;
273 uint32_t m_tokenPoolSize;
275 uint32_t m_creditableThreshold;
282 std::map <uint16_t, uint8_t> m_dlHarqCurrentProcessId;
286 std::map <uint16_t, DlHarqProcessesStatus_t> m_dlHarqProcessesStatus;
287 std::map <uint16_t, DlHarqProcessesTimer_t> m_dlHarqProcessesTimer;
288 std::map <uint16_t, DlHarqProcessesDciBuffer_t> m_dlHarqProcessesDciBuffer;
289 std::map <uint16_t, DlHarqRlcPduListBuffer_t> m_dlHarqProcessesRlcPduListBuffer;
290 std::vector <DlInfoListElement_s> m_dlInfoListBuffered;
292 std::map <uint16_t, uint8_t> m_ulHarqCurrentProcessId;
296 std::map <uint16_t, UlHarqProcessesStatus_t> m_ulHarqProcessesStatus;
297 std::map <uint16_t, UlHarqProcessesDciBuffer_t> m_ulHarqProcessesDciBuffer;
301 std::vector <struct RachListElement_s> m_rachList;
302 std::vector <uint16_t> m_rachAllocationMap;
303 uint8_t m_ulGrantMcs;
smart pointer class similar to boost::intrusive_ptr
virtual void DoDispose(void)
virtual FfMacCschedSapProvider * GetFfMacCschedSapProvider()
uint32_t burstCredit
the number of token borrow or given to token bank
uint32_t maxTokenPoolSize
current size of token pool (byte)
virtual ~TdTbfqFfMacScheduler()
uint8_t HarqProcessAvailability(uint16_t rnti)
Return the availability of free process for the RNTI specified.
int counter
maximum size of token pool (byte)
Implements the SCHED SAP and CSCHED SAP for a Time Domain Token Bank Fair Queue scheduler.
TdTbfqFfMacScheduler()
Constructor.
int debtLimit
the maximum number of tokens connection i can borrow from the bank each time
virtual FfMacSchedSapProvider * GetFfMacSchedSapProvider()
virtual void SetFfMacSchedSapUser(FfMacSchedSapUser *s)
uint64_t tokenGenerationRate
packet arrival rate( byte/s)
uint32_t creditableThreshold
counter threshold that the flow cannot further borrow tokens from bank
uint32_t tokenPoolSize
token generation rate ( byte/s )
virtual void SetFfMacCschedSapUser(FfMacCschedSapUser *s)
void RefreshHarqProcesses()
Refresh HARQ processes according to the timers.
uint8_t UpdateHarqProcessId(uint16_t rnti)
Update and return a new process Id for the RNTI specified.
a unique identifier for an interface.