23 #ifndef UPLINK_SCHEDULER_MBQOS_H
24 #define UPLINK_SCHEDULER_MBQOS_H
27 #include "ul-mac-messages.h"
28 #include "ns3/nstime.h"
29 #include "wimax-phy.h"
31 #include "service-flow-record.h"
32 #include "ns3/object.h"
33 #include "bs-uplink-scheduler.h"
34 #include "service-flow.h"
38 class BaseStationNetDevice;
41 class ServiceFlowRecord;
76 static TypeId GetTypeId (
void);
78 std::list<OfdmUlMapIe> GetUplinkAllocations (
void)
const;
85 uint32_t CalculateAllocationStartTime (
void);
87 const uint32_t &allocationSize,
88 uint32_t &symbolsToAllocation,
89 uint32_t &availableSymbols);
92 void ServiceUnsolicitedGrants (
const SSRecord *ssRecord,
93 enum ServiceFlow::SchedulingType schedulingType,
95 const WimaxPhy::ModulationType modulationType,
96 uint32_t &symbolsToAllocation,
97 uint32_t &availableSymbols);
98 void ServiceBandwidthRequests (
const SSRecord *ssRecord,
99 enum ServiceFlow::SchedulingType schedulingType,
101 const WimaxPhy::ModulationType modulationType,
102 uint32_t &symbolsToAllocation,
103 uint32_t &availableSymbols);
104 bool ServiceBandwidthRequests (
ServiceFlow *serviceFlow,
105 enum ServiceFlow::SchedulingType schedulingType,
107 const WimaxPhy::ModulationType modulationType,
108 uint32_t &symbolsToAllocation,
109 uint32_t &availableSymbols);
110 void AllocateInitialRangingInterval (uint32_t &symbolsToAllocation, uint32_t &availableSymbols);
195 CreateUlJob (
SSRecord *ssRecord,
enum ServiceFlow::SchedulingType schedType, ReqType reqType);
201 ServiceBandwidthRequestsBytes (
ServiceFlow *serviceFlow,
202 enum ServiceFlow::SchedulingType schedulingType,
OfdmUlMapIe &ulMapIe,
203 const WimaxPhy::ModulationType modulationType,
204 uint32_t &symbolsToAllocation, uint32_t &availableSymbols, uint32_t allocationSizeBytes);
207 std::list<OfdmUlMapIe> m_uplinkAllocations;
210 std::list<Ptr<UlJob> > m_uplinkJobs_high;
211 std::list<Ptr<UlJob> > m_uplinkJobs_inter;
212 std::list<Ptr<UlJob> > m_uplinkJobs_low;
215 Time m_windowInterval;
Ptr< UlJob > DequeueJob(UlJob::JobPriority priority)
Dequeue a job from a priority queue.
smart pointer class similar to boost::intrusive_ptr
void GetChannelDescriptorsToUpdate(bool &, bool &, bool &, bool &)
uint32_t CountSymbolsJobs(Ptr< UlJob > job)
this class implements a structure to manage some parameters and statistics related to a service flow ...
Virtual class for uplink scheduler.
uint32_t CountSymbolsQueue(std::list< Ptr< UlJob > > jobs)
void UplinkSchedWindowTimer(void)
Reset the current window. According to a configured time, reset the window.
this class implements the bandwidth-request mac Header as described by IEEE Standard for Local and me...
void CheckMinimumBandwidth(uint32_t &availableSymbols)
Check if Minimum bandwidth is guarantee. Migrate requests if necessary.
This class implements a Migration-based Quality of Service uplink scheduler(MBQoS).
void EnqueueJob(UlJob::JobPriority priority, Ptr< UlJob > job)
Enqueue a job in a priority queue.
Ptr< UlJob > CreateUlJob(SSRecord *ssRecord, enum ServiceFlow::SchedulingType schedType, ReqType reqType)
This class is used by the base station to store some information related to subscriber station in the...
Time DetermineDeadline(ServiceFlow *serviceFlow)
Calculates deadline of a request.
a unique identifier for an interface.
void CheckDeadline(uint32_t &availableSymbols)
Check deadline from jobs. Migrate requests if necessary.