author | Josh Pelkey <jpelkey@gatech.edu> |
Fri, 13 May 2011 15:02:36 -0400 | |
changeset 7195 | 316d93dd9375 |
parent 7107 | 6c0fabb46bce |
child 7252 | c8200621e252 |
permissions | -rw-r--r-- |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
2 |
/* |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
3 |
* This program is free software; you can redistribute it and/or modify |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
4 |
* it under the terms of the GNU General Public License version 2 as |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
5 |
* published by the Free Software Foundation; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
6 |
* |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
7 |
* This program is distributed in the hope that it will be useful, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
8 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
9 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
10 |
* GNU General Public License for more details. |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
11 |
* |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
12 |
* You should have received a copy of the GNU General Public License |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
13 |
* along with this program; if not, write to the Free Software |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
14 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
15 |
* |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
16 |
*/ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
17 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
18 |
#include "bs-uplink-scheduler-mbqos.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
19 |
#include "bs-net-device.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
20 |
#include "ns3/simulator.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
21 |
#include "cid.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
22 |
#include "burst-profile-manager.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
23 |
#include "ss-manager.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
24 |
#include "ns3/log.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
25 |
#include "ns3/uinteger.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
26 |
#include "service-flow.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
27 |
#include "service-flow-record.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
28 |
#include "bs-link-manager.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
29 |
#include "bandwidth-manager.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
30 |
#include "connection-manager.h" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
31 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
32 |
NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerMBQoS"); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
33 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
34 |
namespace ns3 { |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
35 |
|
6393
f7e1f9dfa08d
ensure objects are regsitered
Josh Pelkey <jpelkey@gatech.edu>
parents:
6273
diff
changeset
|
36 |
NS_OBJECT_ENSURE_REGISTERED (UplinkSchedulerMBQoS); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
37 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
38 |
UplinkSchedulerMBQoS::UplinkSchedulerMBQoS () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
39 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
40 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
41 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
42 |
UplinkSchedulerMBQoS::UplinkSchedulerMBQoS (Time time) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
43 |
: m_windowInterval (time) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
44 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
45 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
46 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
47 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
48 |
UplinkSchedulerMBQoS::~UplinkSchedulerMBQoS (void) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
49 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
50 |
SetBs (0); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
51 |
m_uplinkAllocations.clear (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
52 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
53 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
54 |
TypeId |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
55 |
UplinkSchedulerMBQoS::GetTypeId (void) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
56 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
57 |
static TypeId tid = TypeId ("ns3::UplinkSchedulerMBQoS") |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
58 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
59 |
.SetParent<UplinkScheduler> () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
60 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
61 |
.AddAttribute ("WindowInterval", |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
62 |
"The time to wait to reset window", |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
63 |
TimeValue (Seconds (1.0)), |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
64 |
MakeTimeAccessor (&UplinkSchedulerMBQoS::m_windowInterval), |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
65 |
MakeTimeChecker ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
66 |
return tid; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
67 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
68 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
69 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
70 |
UplinkSchedulerMBQoS::InitOnce () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
71 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
72 |
UplinkSchedWindowTimer (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
73 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
74 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
75 |
std::list<OfdmUlMapIe> |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
76 |
UplinkSchedulerMBQoS::GetUplinkAllocations (void) const |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
77 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
78 |
return m_uplinkAllocations; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
79 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
80 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
81 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
82 |
UplinkSchedulerMBQoS::GetChannelDescriptorsToUpdate (bool &updateDcd, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
83 |
bool &updateUcd, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
84 |
bool &sendDcd, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
85 |
bool &sendUcd) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
86 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
87 |
/* DCD and UCD shall actually be updated when channel or burst profile definitions |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
88 |
change. burst profiles are updated based on number of SSs, network conditions and etc. |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
89 |
for now temporarily assuming DCD/UCD shall be updated everytime */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
90 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
91 |
uint32_t randNr = rand (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
92 |
if (randNr % 5 == 0 || GetBs ()->GetNrDcdSent () == 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
93 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
94 |
sendDcd = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
95 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
96 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
97 |
randNr = rand (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
98 |
if (randNr % 5 == 0 || GetBs ()->GetNrUcdSent () == 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
99 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
100 |
sendUcd = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
101 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
102 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
103 |
// ------------------------------------- |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
104 |
// additional, just to send more frequently |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
105 |
if (!sendDcd) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
106 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
107 |
randNr = rand (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
108 |
if (randNr % 4 == 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
109 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
110 |
sendDcd = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
111 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
112 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
113 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
114 |
if (!sendUcd) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
115 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
116 |
randNr = rand (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
117 |
if (randNr % 4 == 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
118 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
119 |
sendUcd = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
120 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
121 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
122 |
// ------------------------------------- |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
123 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
124 |
Time timeSinceLastDcd = Simulator::Now () - GetDcdTimeStamp (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
125 |
Time timeSinceLastUcd = Simulator::Now () - GetUcdTimeStamp (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
126 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
127 |
if (timeSinceLastDcd > GetBs ()->GetDcdInterval ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
128 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
129 |
sendDcd = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
130 |
SetDcdTimeStamp (Simulator::Now ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
131 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
132 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
133 |
if (timeSinceLastUcd > GetBs ()->GetUcdInterval ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
134 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
135 |
sendUcd = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
136 |
SetUcdTimeStamp (Simulator::Now ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
137 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
138 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
139 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
140 |
uint32_t |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
141 |
UplinkSchedulerMBQoS::CalculateAllocationStartTime (void) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
142 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
143 |
return GetBs ()->GetNrDlSymbols () * GetBs ()->GetPhy ()->GetPsPerSymbol () + GetBs ()->GetTtg (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
144 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
145 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
146 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
147 |
UplinkSchedulerMBQoS::AddUplinkAllocation (OfdmUlMapIe &ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
148 |
const uint32_t &allocationSize, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
149 |
uint32_t &symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
150 |
uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
151 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
152 |
ulMapIe.SetDuration (allocationSize); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
153 |
ulMapIe.SetStartTime (symbolsToAllocation); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
154 |
m_uplinkAllocations.push_back (ulMapIe); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
155 |
symbolsToAllocation += allocationSize; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
156 |
availableSymbols -= allocationSize; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
157 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
158 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
159 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
160 |
UplinkSchedulerMBQoS::UplinkSchedWindowTimer (void) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
161 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
162 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
163 |
NS_LOG (LOG_DEBUG, "Window Reset at " << (Simulator::Now ()).GetSeconds ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
164 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
165 |
uint32_t min_bw = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
166 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
167 |
if (!GetBs ()->GetSSManager ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
168 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
169 |
Simulator::Schedule (m_windowInterval, &UplinkSchedulerMBQoS::UplinkSchedWindowTimer, this); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
170 |
return; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
171 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
172 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
173 |
std::vector<SSRecord*> *ssRecords = GetBs ()->GetSSManager ()->GetSSRecords (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
174 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
175 |
// For each SS |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
176 |
for (std::vector<SSRecord*>::iterator iter = ssRecords->begin (); iter != ssRecords->end (); ++iter) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
177 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
178 |
SSRecord *ssRecord = *iter; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
179 |
std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_ALL); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
180 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
181 |
// For each flow |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
182 |
for (std::vector<ServiceFlow*>::iterator iter2 = serviceFlows.begin (); iter2 != serviceFlows.end (); ++iter2) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
183 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
184 |
ServiceFlow *serviceFlow = *iter2; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
185 |
if ((serviceFlow->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS) || (serviceFlow->GetSchedulingType () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
186 |
== ServiceFlow::SF_TYPE_NRTPS)) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
187 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
188 |
min_bw = (int) ceil (serviceFlow->GetMinReservedTrafficRate ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
189 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
190 |
// This way we can compensate flows which did not get min_bw in the previous window |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
191 |
if ((serviceFlow->GetRecord ()->GetBacklogged () > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
192 |
&& (serviceFlow->GetRecord ()->GetBwSinceLastExpiry () < min_bw)) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
193 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
194 |
serviceFlow->GetRecord ()->UpdateBwSinceLastExpiry (-min_bw); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
195 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
196 |
// if backlogged < granted_bw then we don't need to provide granted_bw + min_bw in next window, but backlogged + min_bw |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
197 |
if (serviceFlow->GetRecord ()->GetBacklogged () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
198 |
< ((uint32_t) abs (serviceFlow->GetRecord ()->GetBwSinceLastExpiry ()))) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
199 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
200 |
serviceFlow->GetRecord ()->SetBwSinceLastExpiry (-serviceFlow->GetRecord ()->GetBacklogged ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
201 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
202 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
203 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
204 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
205 |
serviceFlow->GetRecord ()->SetBwSinceLastExpiry (0); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
206 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
207 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
208 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
209 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
210 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
211 |
// Periodically reset window |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
212 |
Simulator::Schedule (m_windowInterval, &UplinkSchedulerMBQoS::UplinkSchedWindowTimer, this); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
213 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
214 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
215 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
216 |
UplinkSchedulerMBQoS::Schedule (void) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
217 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
218 |
m_uplinkAllocations.clear (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
219 |
SetIsIrIntrvlAllocated (false); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
220 |
SetIsInvIrIntrvlAllocated (false); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
221 |
bool allocationForDsa = false; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
222 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
223 |
uint32_t symbolsToAllocation = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
224 |
uint32_t allocationSize = 0; // size in symbols |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
225 |
uint32_t availableSymbols = GetBs ()->GetNrUlSymbols (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
226 |
uint32_t availableSymbolsAux = GetBs ()->GetNrUlSymbols (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
227 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
228 |
AllocateInitialRangingInterval (symbolsToAllocation, availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
229 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
230 |
std::vector<SSRecord*> *ssRecords = GetBs ()->GetSSManager ()->GetSSRecords (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
231 |
for (std::vector<SSRecord*>::iterator iter = ssRecords->begin (); iter != ssRecords->end (); ++iter) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
232 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
233 |
SSRecord *ssRecord = *iter; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
234 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
235 |
if (ssRecord->GetIsBroadcastSS ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
236 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
237 |
continue; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
238 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
239 |
Cid cid = ssRecord->GetBasicCid (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
240 |
OfdmUlMapIe ulMapIe; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
241 |
ulMapIe.SetCid (cid); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
242 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
243 |
if (ssRecord->GetPollForRanging () && ssRecord->GetRangingStatus () == WimaxNetDevice::RANGING_STATUS_CONTINUE) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
244 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
245 |
// SS's ranging is not yet complete |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
246 |
// allocating invited initial ranging interval |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
247 |
ulMapIe.SetUiuc (OfdmUlBurstProfile::UIUC_INITIAL_RANGING); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
248 |
allocationSize = GetBs ()->GetRangReqOppSize (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
249 |
SetIsInvIrIntrvlAllocated (true); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
250 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
251 |
if (availableSymbols >= allocationSize) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
252 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
253 |
AddUplinkAllocation (ulMapIe, allocationSize, symbolsToAllocation, availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
254 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
255 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
256 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
257 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
258 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
259 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
260 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
261 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
262 |
WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
263 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
264 |
// need to update because modulation/FEC to UIUC mapping may vary over time |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
265 |
ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
266 |
WimaxNetDevice::DIRECTION_UPLINK)); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
267 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
268 |
// establish service flows for SS |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
269 |
if (ssRecord->GetRangingStatus () == WimaxNetDevice::RANGING_STATUS_SUCCESS |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
270 |
&& !ssRecord->GetAreServiceFlowsAllocated ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
271 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
272 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
273 |
// allocating grant (with arbitrary size) to allow SS to send DSA messages DSA-REQ and DSA-ACK |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
274 |
// only one DSA allocation per frame |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
275 |
if (!allocationForDsa) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
276 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
277 |
allocationSize = GetBs ()->GetPhy ()->GetNrSymbols (sizeof(DsaReq), modulationType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
278 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
279 |
if (availableSymbols >= allocationSize) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
280 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
281 |
AddUplinkAllocation (ulMapIe, allocationSize, symbolsToAllocation, availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
282 |
allocationForDsa = true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
283 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
284 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
285 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
286 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
287 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
288 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
289 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
290 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
291 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
292 |
// all service flows associated to SS are established now |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
293 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
294 |
/* Implementation of uplink scheduler |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
295 |
* [1] Freitag, J.; da Fonseca, N.L.S., "Uplink Scheduling with Quality of Service in IEEE 802.16 Networks," |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
296 |
* Global Telecommunications Conference, 2007. GLOBECOM '07. IEEE , vol., no., pp.2503-2508, 26-30 Nov. 2007 |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
297 |
* URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4411386&isnumber=4410910 */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
298 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
299 |
// Step 1 |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
300 |
if (availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
301 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
302 |
/*allocating grants for data transmission for UGS flows (Data Grant Burst Type IEs, 6.3.7.4.3.3) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
303 |
(grant has been referred by different names e.g. transmission opportunity, slot, uplink allocation, etc)*/ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
304 |
if (ssRecord->GetHasServiceFlowUgs ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
305 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
306 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering be unicast polling"); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
307 |
// Recover period interval information for UGS flow |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
308 |
Time frame_duration = GetBs ()->GetPhy ()->GetFrameDuration (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
309 |
Time |
7195
316d93dd9375
wimax coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7107
diff
changeset
|
310 |
timestamp = |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
311 |
(*(ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_UGS).begin ()))->GetRecord ()->GetLastGrantTime () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
312 |
+ MilliSeconds ((*(ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_UGS).begin ()))->GetUnsolicitedGrantInterval ()); |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
313 |
|
7044
f94b264549d1
introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7040
diff
changeset
|
314 |
Time frame = Time ((timestamp - Simulator::Now ()) / frame_duration); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
315 |
|
7036
f94c610203be
a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6393
diff
changeset
|
316 |
if (frame <= 1) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
317 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
318 |
// UGS Grants |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
319 |
// It is not necessary to enqueue UGS grants once it is periodically served |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
320 |
ServiceUnsolicitedGrants (ssRecord, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
321 |
ServiceFlow::SF_TYPE_UGS, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
322 |
ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
323 |
modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
324 |
symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
325 |
availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
326 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
327 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
328 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
329 |
// enqueue allocate unicast polls for rtPS flows if bandwidth is available |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
330 |
if (ssRecord->GetHasServiceFlowRtps ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
331 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
332 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering rtps unicast polling"); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
333 |
Ptr<UlJob> jobRTPSPoll = CreateUlJob (ssRecord, ServiceFlow::SF_TYPE_RTPS, UNICAST_POLLING); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
334 |
EnqueueJob (UlJob::HIGH, jobRTPSPoll); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
335 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
336 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
337 |
if (ssRecord->GetHasServiceFlowNrtps ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
338 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
339 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering nrtps unicast polling"); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
340 |
// allocate unicast polls for nrtPS flows if bandwidth is available |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
341 |
Ptr<UlJob> jobNRTPSPoll = CreateUlJob (ssRecord, ServiceFlow::SF_TYPE_NRTPS, UNICAST_POLLING); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
342 |
EnqueueJob (UlJob::HIGH, jobNRTPSPoll); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
343 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
344 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
345 |
if (ssRecord->GetHasServiceFlowBe ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
346 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
347 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering be unicast polling"); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
348 |
// finally allocate unicast polls for BE flows if bandwidth is available |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
349 |
Ptr<UlJob> jobBEPoll = CreateUlJob (ssRecord, ServiceFlow::SF_TYPE_BE, UNICAST_POLLING); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
350 |
EnqueueJob (UlJob::HIGH, jobBEPoll); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
351 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
352 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
353 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
354 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
355 |
} |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
356 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " high queue has " << m_uplinkJobs_high.size ()<< " jobs - after sched"); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
357 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
358 |
availableSymbolsAux = availableSymbols; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
359 |
uint32_t symbolsUsed = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
360 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
361 |
symbolsUsed += CountSymbolsQueue (m_uplinkJobs_high); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
362 |
availableSymbolsAux -= symbolsUsed; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
363 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
364 |
// Step 2 - Check Deadline - Migrate requests with deadline expiring |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
365 |
CheckDeadline (availableSymbolsAux); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
366 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
367 |
// Step 3 - Check Minimum Bandwidth |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
368 |
CheckMinimumBandwidth (availableSymbolsAux); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
369 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
370 |
// Scheduling high priority queue |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
371 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " high queue has " << m_uplinkJobs_high.size ()<< " jobs"); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
372 |
while ((availableSymbols) && (!m_uplinkJobs_high.empty ())) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
373 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
374 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
375 |
Ptr<UlJob> job = m_uplinkJobs_high.front (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
376 |
OfdmUlMapIe ulMapIe; |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
377 |
SSRecord * ssRecord = job->GetSsRecord (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
378 |
enum ServiceFlow::SchedulingType schedulingType = job->GetSchedulingType (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
379 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
380 |
Cid cid = ssRecord->GetBasicCid (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
381 |
ulMapIe.SetCid (cid); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
382 |
WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
383 |
// need to update because modulation/FEC to UIUC mapping may vary over time |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
384 |
ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
385 |
WimaxNetDevice::DIRECTION_UPLINK)); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
386 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
387 |
ReqType reqType = job->GetType (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
388 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
389 |
if (reqType == UNICAST_POLLING) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
390 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
391 |
ServiceUnsolicitedGrants (ssRecord, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
392 |
schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
393 |
ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
394 |
modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
395 |
symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
396 |
availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
397 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
398 |
else if (reqType == DATA) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
399 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
400 |
ServiceFlow *serviceFlow = job->GetServiceFlow (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
401 |
uint32_t allocSizeBytes = job->GetSize (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
402 |
ServiceBandwidthRequestsBytes (serviceFlow, |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
403 |
schedulingType, |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
404 |
ulMapIe, |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
405 |
modulationType, |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
406 |
symbolsToAllocation, |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
407 |
availableSymbols, |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
408 |
allocSizeBytes); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
409 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
410 |
m_uplinkJobs_high.pop_front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
411 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
412 |
|
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
413 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " interqueue has " << m_uplinkJobs_inter.size ()<< " jobs"); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
414 |
/* Scheduling intermediate priority queue */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
415 |
while ((availableSymbols) && (!m_uplinkJobs_inter.empty ())) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
416 |
{ |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
417 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " Scheduling interqueue"); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
418 |
Ptr<UlJob> job = m_uplinkJobs_inter.front (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
419 |
OfdmUlMapIe ulMapIe; |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
420 |
SSRecord * ssRecord = job->GetSsRecord (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
421 |
enum ServiceFlow::SchedulingType schedulingType = job->GetSchedulingType (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
422 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
423 |
Cid cid = ssRecord->GetBasicCid (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
424 |
ulMapIe.SetCid (cid); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
425 |
WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
426 |
// need to update because modulation/FEC to UIUC mapping may vary over time |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
427 |
ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
428 |
WimaxNetDevice::DIRECTION_UPLINK)); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
429 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
430 |
ReqType reqType = job->GetType (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
431 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
432 |
if (reqType == DATA) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
433 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
434 |
ServiceBandwidthRequests (ssRecord, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
435 |
schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
436 |
ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
437 |
modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
438 |
symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
439 |
availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
440 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
441 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
442 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
443 |
NS_FATAL_ERROR ("Intermediate priority queue only should enqueue data packets."); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
444 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
445 |
m_uplinkJobs_inter.pop_front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
446 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
447 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
448 |
/* Scheduling low priority queue */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
449 |
while ((availableSymbols) && (!m_uplinkJobs_low.empty ())) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
450 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
451 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
452 |
Ptr<UlJob> job = m_uplinkJobs_low.front (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
453 |
OfdmUlMapIe ulMapIe; |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
454 |
SSRecord * ssRecord = job->GetSsRecord (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
455 |
enum ServiceFlow::SchedulingType schedulingType = job->GetSchedulingType (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
456 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
457 |
Cid cid = ssRecord->GetBasicCid (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
458 |
ulMapIe.SetCid (cid); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
459 |
WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
460 |
// need to update because modulation/FEC to UIUC mapping may vary over time |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
461 |
ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
462 |
WimaxNetDevice::DIRECTION_UPLINK)); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
463 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
464 |
ReqType reqType = job->GetType (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
465 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
466 |
if (reqType == DATA) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
467 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
468 |
ServiceBandwidthRequests (ssRecord, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
469 |
schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
470 |
ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
471 |
modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
472 |
symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
473 |
availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
474 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
475 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
476 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
477 |
NS_FATAL_ERROR ("Low priority queue only should enqueue data packets."); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
478 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
479 |
m_uplinkJobs_low.pop_front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
480 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
481 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
482 |
OfdmUlMapIe ulMapIeEnd; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
483 |
ulMapIeEnd.SetCid (*(new Cid (0))); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
484 |
ulMapIeEnd.SetStartTime (symbolsToAllocation); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
485 |
ulMapIeEnd.SetUiuc (OfdmUlBurstProfile::UIUC_END_OF_MAP); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
486 |
ulMapIeEnd.SetDuration (0); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
487 |
m_uplinkAllocations.push_back (ulMapIeEnd); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
488 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
489 |
// setting DL/UL subframe allocation for the next frame |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
490 |
GetBs ()->GetBandwidthManager ()->SetSubframeRatio (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
491 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
492 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
493 |
bool UplinkSchedulerMBQoS::ServiceBandwidthRequestsBytes (ServiceFlow *serviceFlow, |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
494 |
enum ServiceFlow::SchedulingType schedulingType, OfdmUlMapIe &ulMapIe, |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
495 |
const WimaxPhy::ModulationType modulationType, |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
496 |
uint32_t &symbolsToAllocation, uint32_t &availableSymbols, uint32_t allocationSizeBytes) |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
497 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
498 |
uint32_t allocSizeBytes = allocationSizeBytes; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
499 |
uint32_t allocSizeSymbols = 0; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
500 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
501 |
ServiceFlowRecord *record = serviceFlow->GetRecord (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
502 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
503 |
uint32_t requiredBandwidth = record->GetRequestedBandwidth (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
504 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
505 |
if (requiredBandwidth > 0) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
506 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
507 |
allocSizeSymbols = GetBs ()->GetPhy ()->GetNrSymbols (allocSizeBytes, modulationType); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
508 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
509 |
if (availableSymbols < allocSizeSymbols) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
510 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
511 |
allocSizeSymbols = availableSymbols; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
512 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
513 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
514 |
if (availableSymbols >= allocSizeSymbols) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
515 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
516 |
NS_LOG_DEBUG ( |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
517 |
"At " << Simulator::Now ().GetSeconds ()<<" BS uplink scheduler, " |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
518 |
<< serviceFlow->GetSchedulingTypeStr () |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
519 |
<< " allocation, size: " << allocSizeSymbols << " symbols" |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
520 |
<< ", CID: " |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
521 |
<< serviceFlow->GetConnection ()->GetCid () |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
522 |
<< ", SFID: " << serviceFlow->GetSfid () |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
523 |
<< ", bw requested: " << record->GetRequestedBandwidth () |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
524 |
<< ", bw granted: " << allocSizeBytes |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
525 |
<< std::endl); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
526 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
527 |
record->UpdateGrantedBandwidthTemp (allocSizeBytes); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
528 |
record->UpdateGrantedBandwidth (allocSizeBytes); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
529 |
record->UpdateRequestedBandwidth (-allocSizeBytes); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
530 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
531 |
record->UpdateBwSinceLastExpiry (allocSizeBytes); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
532 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
533 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
534 |
AddUplinkAllocation (ulMapIe, allocSizeSymbols, symbolsToAllocation, |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
535 |
availableSymbols); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
536 |
} else |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
537 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
538 |
return false; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
539 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
540 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
541 |
return true; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
542 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
543 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
544 |
uint32_t |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
545 |
UplinkSchedulerMBQoS::CountSymbolsQueue (std::list<Ptr<UlJob> > jobs) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
546 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
547 |
uint32_t symbols = 0; |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
548 |
for (std::list<Ptr<UlJob> >::iterator iter = jobs.begin (); iter != jobs.end (); ++iter) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
549 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
550 |
Ptr<UlJob> job = *iter; |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
551 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
552 |
// count symbols |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
553 |
symbols += CountSymbolsJobs (job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
554 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
555 |
return symbols; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
556 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
557 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
558 |
Ptr<UlJob> |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
559 |
UplinkSchedulerMBQoS::CreateUlJob (SSRecord *ssRecord, enum ServiceFlow::SchedulingType schedType, ReqType reqType) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
560 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
561 |
Ptr<UlJob> job = CreateObject <UlJob> (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
562 |
job->SetSsRecord (ssRecord); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
563 |
job->SetSchedulingType (schedType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
564 |
job->SetServiceFlow (*(ssRecord->GetServiceFlows (schedType).begin ())); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
565 |
job->SetType (reqType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
566 |
return job; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
567 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
568 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
569 |
uint32_t |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
570 |
UplinkSchedulerMBQoS::CountSymbolsJobs (Ptr<UlJob> job) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
571 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
572 |
SSRecord *ssRecord = job->GetSsRecord (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
573 |
ServiceFlow *serviceFlow = job->GetServiceFlow (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
574 |
uint32_t allocationSize = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
575 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
576 |
if (job->GetType () == UNICAST_POLLING) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
577 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
578 |
// if polling |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
579 |
Time currentTime = Simulator::Now (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
580 |
allocationSize = 0; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
581 |
if ((currentTime - serviceFlow->GetRecord ()->GetGrantTimeStamp ()).GetMilliSeconds () |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
582 |
>= serviceFlow->GetUnsolicitedPollingInterval ()) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
583 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
584 |
allocationSize = GetBs ()->GetBwReqOppSize (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
585 |
} |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
586 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
587 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
588 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
589 |
// if data |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
590 |
uint16_t sduSize = serviceFlow->GetSduSize (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
591 |
ServiceFlowRecord *record = serviceFlow->GetRecord (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
592 |
uint32_t requiredBandwidth = record->GetRequestedBandwidth () - record->GetGrantedBandwidth (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
593 |
if (requiredBandwidth > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
594 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
595 |
WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
596 |
if (sduSize > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
597 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
598 |
// if SDU size is mentioned, allocate grant of that size |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
599 |
allocationSize = GetBs ()->GetPhy ()->GetNrSymbols (sduSize, modulationType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
600 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
601 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
602 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
603 |
allocationSize = GetBs ()->GetPhy ()->GetNrSymbols (requiredBandwidth, modulationType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
604 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
605 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
606 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
607 |
return allocationSize; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
608 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
609 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
610 |
void |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
611 |
UplinkSchedulerMBQoS::EnqueueJob (UlJob::JobPriority priority, Ptr<UlJob> job) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
612 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
613 |
switch (priority) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
614 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
615 |
case UlJob::HIGH: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
616 |
m_uplinkJobs_high.push_back (job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
617 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
618 |
case UlJob::INTERMEDIATE: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
619 |
m_uplinkJobs_inter.push_back (job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
620 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
621 |
case UlJob::LOW: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
622 |
m_uplinkJobs_low.push_back (job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
623 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
624 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
625 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
626 |
Ptr<UlJob> |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
627 |
UplinkSchedulerMBQoS::DequeueJob (UlJob::JobPriority priority) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
628 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
629 |
Ptr<UlJob> job_front; |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
630 |
switch (priority) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
631 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
632 |
case UlJob::HIGH: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
633 |
job_front = m_uplinkJobs_high.front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
634 |
m_uplinkJobs_high.pop_front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
635 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
636 |
case UlJob::INTERMEDIATE: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
637 |
job_front = m_uplinkJobs_inter.front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
638 |
m_uplinkJobs_inter.pop_front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
639 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
640 |
case UlJob::LOW: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
641 |
job_front = m_uplinkJobs_low.front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
642 |
m_uplinkJobs_low.pop_front (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
643 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
644 |
return job_front; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
645 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
646 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
647 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
648 |
UplinkSchedulerMBQoS::CheckDeadline (uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
649 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
650 |
// for each request in the imermediate queue |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
651 |
if (m_uplinkJobs_inter.size () > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
652 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
653 |
std::list<Ptr<UlJob> >::iterator iter = m_uplinkJobs_inter.begin (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
654 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
655 |
while (iter != m_uplinkJobs_inter.end () && availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
656 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
657 |
Ptr<UlJob> job = *iter; |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
658 |
|
6273
8d70de29d514
spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents:
6156
diff
changeset
|
659 |
// guarantee delay bound for rtps connections |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
660 |
if (job->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
661 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
662 |
Time deadline = job->GetDeadline (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
663 |
Time frame_duration = GetBs ()->GetPhy ()->GetFrameDuration (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
664 |
|
7044
f94b264549d1
introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7040
diff
changeset
|
665 |
Time frame = Time ((deadline - Simulator::Now ()) / frame_duration); |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
666 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
667 |
NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " reserved traffic rate: " |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
668 |
<< job->GetServiceFlow ()->GetMinReservedTrafficRate () |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
669 |
<<" deadline: "<<job->GetDeadline ().GetSeconds () << " frame start: "<<GetBs ()->m_frameStartTime.GetSeconds () |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
670 |
<<" frame duration: "<< frame_duration ); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
671 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
672 |
// should be schedule in this frame to max latency |
7036
f94c610203be
a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
6393
diff
changeset
|
673 |
if (frame >= 3) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
674 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
675 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
676 |
if (availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
677 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
678 |
uint32_t availableBytes = GetBs ()->GetPhy ()->GetNrBytes (availableSymbols,job->GetSsRecord ()->GetModulationType ()); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
679 |
uint32_t allocationSize = job->GetSize (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
680 |
if (allocationSize > availableBytes) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
681 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
682 |
allocationSize = availableBytes; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
683 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
684 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
685 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
686 |
if (allocationSize == 0) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
687 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
688 |
continue; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
689 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
690 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
691 |
uint32_t symbolsToAllocate = GetBs ()->GetPhy ()->GetNrSymbols(allocationSize, job->GetSsRecord ()->GetModulationType ()); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
692 |
if (symbolsToAllocate > availableSymbols) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
693 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
694 |
symbolsToAllocate = availableSymbols; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
695 |
allocationSize = GetBs ()->GetPhy ()->GetNrBytes (symbolsToAllocate,job->GetSsRecord ()->GetModulationType ()); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
696 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
697 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
698 |
job->SetSize (job->GetSize () - allocationSize); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
699 |
|
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
700 |
Ptr<UlJob> newJob = CreateObject<UlJob> (); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
701 |
// Record data in job |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
702 |
newJob->SetSsRecord (job->GetSsRecord ()); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
703 |
newJob->SetServiceFlow (job->GetServiceFlow ()); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
704 |
newJob->SetSize (allocationSize); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
705 |
newJob->SetDeadline (job->GetDeadline ()); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
706 |
newJob->SetReleaseTime (job->GetReleaseTime ()); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
707 |
newJob->SetSchedulingType (job->GetSchedulingType ()); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
708 |
newJob->SetPeriod (job->GetPeriod ()); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
709 |
newJob->SetType (job->GetType ()); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
710 |
|
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
711 |
EnqueueJob (UlJob::HIGH, newJob); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
712 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
713 |
// migrate request |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
714 |
iter++; |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
715 |
if ((job->GetSize () - allocationSize) == 0) |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
716 |
{ |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
717 |
m_uplinkJobs_inter.remove (job); |
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
718 |
} |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
719 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
720 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
721 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
722 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
723 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
724 |
iter++; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
725 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
726 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
727 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
728 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
729 |
iter++; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
730 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
731 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
732 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
733 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
734 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
735 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
736 |
UplinkSchedulerMBQoS::CheckMinimumBandwidth (uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
737 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
738 |
std::list<Ptr<PriorityUlJob> > priorityUlJobs; |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
739 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
740 |
// For each connection of type rtPS or nrtPS |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
741 |
std::vector<SSRecord*> *ssRecords = GetBs ()->GetSSManager ()->GetSSRecords (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
742 |
for (std::vector<SSRecord*>::iterator iter = ssRecords->begin (); iter != ssRecords->end (); ++iter) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
743 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
744 |
SSRecord *ssRecord = *iter; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
745 |
std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_ALL); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
746 |
for (std::vector<ServiceFlow*>::iterator iter2 = serviceFlows.begin (); iter2 != serviceFlows.end (); ++iter2) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
747 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
748 |
ServiceFlow *serviceFlow = *iter2; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
749 |
if (serviceFlow->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS || serviceFlow->GetSchedulingType () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
750 |
== ServiceFlow::SF_TYPE_NRTPS) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
751 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
752 |
serviceFlow->GetRecord ()->SetBackloggedTemp (serviceFlow->GetRecord ()->GetBacklogged ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
753 |
serviceFlow->GetRecord ()->SetGrantedBandwidthTemp (serviceFlow->GetRecord ()->GetBwSinceLastExpiry ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
754 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
755 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
756 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
757 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
758 |
// for each request in the imermediate queue |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
759 |
for (std::list<Ptr<UlJob> >::const_iterator iter = m_uplinkJobs_inter.begin (); iter != m_uplinkJobs_inter.end (); ++iter) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
760 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
761 |
Ptr<UlJob> job = *iter; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
762 |
// SSRecord ssRecord = job->GetSsRecord(); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
763 |
ServiceFlow *serviceFlow = job->GetServiceFlow (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
764 |
if ((job->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS || job->GetSchedulingType () |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
765 |
== ServiceFlow::SF_TYPE_NRTPS) && (serviceFlow->GetRecord ()->GetBacklogged () > 0)) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
766 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
767 |
uint32_t minReservedTrafficRate = serviceFlow->GetMinReservedTrafficRate (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
768 |
uint32_t grantedBandwidth = serviceFlow->GetRecord ()->GetBwSinceLastExpiry (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
769 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
770 |
Ptr<PriorityUlJob> priorityUlJob = CreateObject<PriorityUlJob> (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
771 |
priorityUlJob->SetUlJob (job); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
772 |
// pri_array |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
773 |
if (minReservedTrafficRate <= grantedBandwidth) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
774 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
775 |
priorityUlJob->SetPriority (-10000); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
776 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
777 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
778 |
{ |
6156
d911cbffa052
Fix build on MinGW.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
6148
diff
changeset
|
779 |
uint32_t allocationSize = serviceFlow->GetRecord ()->GetRequestedBandwidth () |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
780 |
- serviceFlow->GetRecord ()->GetGrantedBandwidth (); |
6156
d911cbffa052
Fix build on MinGW.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
6148
diff
changeset
|
781 |
uint32_t sduSize = serviceFlow->GetSduSize (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
782 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
783 |
if (allocationSize > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
784 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
785 |
if (sduSize > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
786 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
787 |
// if SDU size is mentioned, grant of that size |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
788 |
allocationSize = sduSize; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
789 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
790 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
791 |
int priority = serviceFlow->GetRecord ()->GetBackloggedTemp () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
792 |
- (serviceFlow->GetRecord ()->GetGrantedBandwidthTemp () - minReservedTrafficRate); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
793 |
priorityUlJob->SetPriority (priority); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
794 |
serviceFlow->GetRecord ()->SetGrantedBandwidthTemp (serviceFlow->GetRecord ()->GetGrantedBandwidthTemp () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
795 |
+ allocationSize); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
796 |
serviceFlow->GetRecord ()->SetBackloggedTemp (serviceFlow->GetRecord ()->GetBackloggedTemp () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
797 |
- allocationSize); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
798 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
799 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
800 |
priorityUlJobs.push_back (priorityUlJob); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
801 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
802 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
803 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
804 |
priorityUlJobs.sort (SortProcessPtr ()); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
805 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
806 |
for (std::list<Ptr<PriorityUlJob> >::const_iterator iter = priorityUlJobs.begin (); iter != priorityUlJobs.end (); ++iter) |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
807 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
808 |
Ptr<PriorityUlJob> priorityUlJob = *iter; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
809 |
Ptr<UlJob> job_priority = priorityUlJob->GetUlJob (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
810 |
Ptr<UlJob> job = job_priority; |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
811 |
if (availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
812 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
813 |
availableSymbols -= CountSymbolsJobs (job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
814 |
// migrate request |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
815 |
m_uplinkJobs_inter.remove (job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
816 |
EnqueueJob (UlJob::HIGH, job); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
817 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
818 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
819 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
820 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
821 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
822 |
UplinkSchedulerMBQoS::ServiceUnsolicitedGrants (const SSRecord *ssRecord, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
823 |
enum ServiceFlow::SchedulingType schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
824 |
OfdmUlMapIe &ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
825 |
const WimaxPhy::ModulationType modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
826 |
uint32_t &symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
827 |
uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
828 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
829 |
uint32_t allocationSize = 0; // size in symbols |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
830 |
uint8_t uiuc = ulMapIe.GetUiuc (); // SS's burst profile |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
831 |
std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (schedulingType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
832 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
833 |
for (std::vector<ServiceFlow*>::iterator iter = serviceFlows.begin (); iter != serviceFlows.end (); ++iter) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
834 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
835 |
ServiceFlow *serviceFlow = *iter; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
836 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
837 |
/* in case of rtPS, nrtPS and BE, allocating unicast polls for bandwidth requests (Request IEs, 6.3.7.4.3.1). |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
838 |
in case of UGS, allocating grants for data transmission (Data Grant Burst Type IEs, 6.3.7.4.3.3) (grant has |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
839 |
been referred in this code by different names e.g. transmission opportunity, slot, allocation, etc) */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
840 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
841 |
allocationSize = GetBs ()->GetBandwidthManager ()->CalculateAllocationSize (ssRecord, serviceFlow); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
842 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
843 |
if (availableSymbols < allocationSize) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
844 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
845 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
846 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
847 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
848 |
if (allocationSize > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
849 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
850 |
ulMapIe.SetStartTime (symbolsToAllocation); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
851 |
if (serviceFlow->GetSchedulingType () != ServiceFlow::SF_TYPE_UGS) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
852 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
853 |
// special burst profile with most robust modulation type is used for unicast polls (Request IEs) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
854 |
ulMapIe.SetUiuc (OfdmUlBurstProfile::UIUC_REQ_REGION_FULL); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
855 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
856 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
857 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
858 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
859 |
continue; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
860 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
861 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
862 |
if (serviceFlow->GetSchedulingType () == ServiceFlow::SF_TYPE_UGS) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
863 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
864 |
NS_LOG_DEBUG ("BS uplink scheduler, UGS allocation, size: " << allocationSize << " symbols"); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
865 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
866 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
867 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
868 |
NS_LOG_DEBUG ("BS uplink scheduler, " << serviceFlow->GetSchedulingTypeStr () << " unicast poll, size: " |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
869 |
<< allocationSize << " symbols" << ", modulation: BPSK 1/2"); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
870 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
871 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
872 |
NS_LOG_DEBUG (", CID: " << serviceFlow->GetConnection ()->GetCid () << ", SFID: " << serviceFlow->GetSfid ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
873 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
874 |
serviceFlow->GetRecord ()->SetLastGrantTime (Simulator::Now ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
875 |
AddUplinkAllocation (ulMapIe, allocationSize, symbolsToAllocation, availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
876 |
ulMapIe.SetUiuc (uiuc); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
877 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
878 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
879 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
880 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
881 |
UplinkSchedulerMBQoS::ServiceBandwidthRequests (const SSRecord *ssRecord, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
882 |
enum ServiceFlow::SchedulingType schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
883 |
OfdmUlMapIe &ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
884 |
const WimaxPhy::ModulationType modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
885 |
uint32_t &symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
886 |
uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
887 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
888 |
std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (schedulingType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
889 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
890 |
for (std::vector<ServiceFlow*>::iterator iter = serviceFlows.begin (); iter != serviceFlows.end (); ++iter) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
891 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
892 |
if (!ServiceBandwidthRequests (*iter, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
893 |
schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
894 |
ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
895 |
modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
896 |
symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
897 |
availableSymbols)) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
898 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
899 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
900 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
901 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
902 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
903 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
904 |
bool |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
905 |
UplinkSchedulerMBQoS::ServiceBandwidthRequests (ServiceFlow *serviceFlow, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
906 |
enum ServiceFlow::SchedulingType schedulingType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
907 |
OfdmUlMapIe &ulMapIe, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
908 |
const WimaxPhy::ModulationType modulationType, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
909 |
uint32_t &symbolsToAllocation, |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
910 |
uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
911 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
912 |
uint32_t allocSizeBytes = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
913 |
uint32_t allocSizeSymbols = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
914 |
uint16_t sduSize = 0; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
915 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
916 |
ServiceFlowRecord *record = serviceFlow->GetRecord (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
917 |
sduSize = serviceFlow->GetSduSize (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
918 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
919 |
uint32_t requiredBandwidth = record->GetRequestedBandwidth () - record->GetGrantedBandwidth (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
920 |
if (requiredBandwidth > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
921 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
922 |
if (sduSize > 0) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
923 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
924 |
// if SDU size is mentioned, allocate grant of that size |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
925 |
allocSizeBytes = sduSize; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
926 |
allocSizeSymbols = GetBs ()->GetPhy ()->GetNrSymbols (sduSize, modulationType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
927 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
928 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
929 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
930 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
931 |
allocSizeBytes = requiredBandwidth; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
932 |
allocSizeSymbols = GetBs ()->GetPhy ()->GetNrSymbols (requiredBandwidth, modulationType); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
933 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
934 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
935 |
if (availableSymbols >= allocSizeSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
936 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
937 |
NS_LOG_DEBUG ("BS uplink scheduler, " << serviceFlow->GetSchedulingTypeStr () << " allocation, size: " |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
938 |
<< allocSizeSymbols << " symbols" << ", CID: " << serviceFlow->GetConnection ()->GetCid () << ", SFID: " |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
939 |
<< serviceFlow->GetSfid () << ", bw requested: " << record->GetRequestedBandwidth () << ", bw granted: " |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
940 |
<< record->GetGrantedBandwidth ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
941 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
942 |
record->UpdateGrantedBandwidth (allocSizeBytes); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
943 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
944 |
record->SetBwSinceLastExpiry (allocSizeBytes); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
945 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
946 |
if (serviceFlow->GetRecord ()->GetBacklogged () < allocSizeBytes) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
947 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
948 |
serviceFlow->GetRecord ()->SetBacklogged (0); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
949 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
950 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
951 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
952 |
serviceFlow->GetRecord ()->IncreaseBacklogged (-allocSizeBytes); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
953 |
} |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
954 |
serviceFlow->GetRecord ()->SetLastGrantTime (Simulator::Now ()); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
955 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
956 |
AddUplinkAllocation (ulMapIe, allocSizeSymbols, symbolsToAllocation, availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
957 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
958 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
959 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
960 |
return false; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
961 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
962 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
963 |
return true; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
964 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
965 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
966 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
967 |
UplinkSchedulerMBQoS::AllocateInitialRangingInterval (uint32_t &symbolsToAllocation, uint32_t &availableSymbols) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
968 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
969 |
Time ssUlStartTime = Seconds (CalculateAllocationStartTime () * GetBs ()->GetPsDuration ().GetSeconds ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
970 |
SetNrIrOppsAllocated (GetBs ()->GetLinkManager ()->CalculateRangingOppsToAllocate ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
971 |
uint32_t allocationSize = GetNrIrOppsAllocated () * GetBs ()->GetRangReqOppSize (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
972 |
Time timeSinceLastIrInterval = Simulator::Now () - GetTimeStampIrInterval (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
973 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
974 |
// adding one frame because may be the time has not elapsed now but will elapse before the next frame is sent |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
975 |
if (timeSinceLastIrInterval + GetBs ()->GetPhy ()->GetFrameDuration () > GetBs ()->GetInitialRangingInterval () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
976 |
&& availableSymbols >= allocationSize) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
977 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
978 |
SetIsIrIntrvlAllocated (true); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
979 |
OfdmUlMapIe ulMapIeIr; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
980 |
ulMapIeIr.SetCid ((GetBs ()->GetBroadcastConnection ())->GetCid ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
981 |
ulMapIeIr.SetStartTime (symbolsToAllocation); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
982 |
ulMapIeIr.SetUiuc (OfdmUlBurstProfile::UIUC_INITIAL_RANGING); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
983 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
984 |
NS_LOG_DEBUG ("BS uplink scheduler, initial ranging allocation, size: " << allocationSize << " symbols" |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
985 |
<< ", modulation: BPSK 1/2" ); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
986 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
987 |
// marking start and end of each TO, only for debugging |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
988 |
for (uint8_t i = 0; i < GetNrIrOppsAllocated (); i++) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
989 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
990 |
GetBs ()->MarkRangingOppStart (ssUlStartTime + Seconds (symbolsToAllocation |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
991 |
* GetBs ()->GetSymbolDuration ().GetSeconds ()) + Seconds (i * GetBs ()->GetRangReqOppSize () |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
992 |
* GetBs ()->GetSymbolDuration ().GetSeconds ())); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
993 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
994 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
995 |
AddUplinkAllocation (ulMapIeIr, allocationSize, symbolsToAllocation, availableSymbols); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
996 |
SetTimeStampIrInterval (Simulator::Now ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
997 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
998 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
999 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1000 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1001 |
UplinkSchedulerMBQoS::SetupServiceFlow (SSRecord *ssRecord, ServiceFlow *serviceFlow) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1002 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1003 |
uint8_t delayNrFrames = 1; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1004 |
uint32_t bitsPerSecond = serviceFlow->GetMinReservedTrafficRate (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1005 |
WimaxPhy::ModulationType modulation; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1006 |
uint32_t bytesPerFrame = |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1007 |
(uint32_t ((double)(bitsPerSecond) * GetBs ()->GetPhy ()->GetFrameDuration ().GetSeconds ())) / 8; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1008 |
uint32_t frameDurationMSec = GetBs ()->GetPhy ()->GetFrameDuration ().GetMilliSeconds (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1009 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1010 |
switch (serviceFlow->GetSchedulingType ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1011 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1012 |
case ServiceFlow::SF_TYPE_UGS: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1013 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1014 |
if (serviceFlow->GetIsMulticast () == true) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1015 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1016 |
modulation = serviceFlow->GetModulation (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1017 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1018 |
else |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1019 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1020 |
modulation = ssRecord->GetModulationType (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1021 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1022 |
uint32_t grantSize = GetBs ()->GetPhy ()->GetNrSymbols (bytesPerFrame, modulation); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1023 |
serviceFlow->GetRecord ()->SetGrantSize (grantSize); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1024 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1025 |
uint32_t toleratedJitter = serviceFlow->GetToleratedJitter (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1026 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1027 |
if (toleratedJitter > frameDurationMSec) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1028 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1029 |
delayNrFrames = (uint8_t)(toleratedJitter / frameDurationMSec); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1030 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1031 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1032 |
uint16_t interval = delayNrFrames * frameDurationMSec; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1033 |
serviceFlow->SetUnsolicitedGrantInterval (interval); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1034 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1035 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1036 |
case ServiceFlow::SF_TYPE_RTPS: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1037 |
{ |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1038 |
serviceFlow->SetUnsolicitedPollingInterval (20); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1039 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1040 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1041 |
case ServiceFlow::SF_TYPE_NRTPS: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1042 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1043 |
// no real-time guarantees are given to NRTPS, serviced based on available bandwidth |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1044 |
uint16_t interval = 1000; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1045 |
serviceFlow->SetUnsolicitedPollingInterval (interval); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1046 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1047 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1048 |
case ServiceFlow::SF_TYPE_BE: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1049 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1050 |
// no real-time guarantees are given to BE, serviced based on available bandwidth |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1051 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1052 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1053 |
default: |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1054 |
NS_FATAL_ERROR ("Invalid scheduling type"); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1055 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1056 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1057 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1058 |
uint32_t UplinkSchedulerMBQoS::GetPendingSize (ServiceFlow* serviceFlow) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1059 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1060 |
uint32_t size = 0; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1061 |
std::list<Ptr <PriorityUlJob> > priorityUlJobs; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1062 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1063 |
// for each request in the imermediate queue |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1064 |
for (std::list<Ptr<UlJob> >::const_iterator iter = m_uplinkJobs_inter.begin (); iter |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
1065 |
!= m_uplinkJobs_inter.end (); ++iter) |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1066 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1067 |
Ptr<UlJob> job = *iter; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1068 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1069 |
ServiceFlow *serviceFlowJob = job->GetServiceFlow (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1070 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1071 |
if (serviceFlowJob == serviceFlow) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1072 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1073 |
size += job->GetSize (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1074 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1075 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1076 |
return size; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1077 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1078 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1079 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1080 |
UplinkSchedulerMBQoS::ProcessBandwidthRequest (const BandwidthRequestHeader &bwRequestHdr) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1081 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1082 |
// Enqueue requests for uplink scheduler. |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1083 |
Ptr<UlJob> job = CreateObject <UlJob> (); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1084 |
Ptr<WimaxConnection> connection = GetBs ()->GetConnectionManager ()->GetConnection (bwRequestHdr.GetCid ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1085 |
SSRecord *ssRecord = GetBs ()->GetSSManager ()->GetSSRecord (connection->GetCid ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1086 |
ServiceFlow *serviceFlow = connection->GetServiceFlow (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1087 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1088 |
uint32_t size = bwRequestHdr.GetBr (); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1089 |
uint32_t pendingSize = GetPendingSize (serviceFlow); |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1090 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1091 |
if (size > pendingSize) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1092 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1093 |
size -= pendingSize; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1094 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1095 |
else |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1096 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1097 |
size = 0; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1098 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1099 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1100 |
if (size == 0) |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1101 |
{ |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1102 |
return; |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1103 |
} |
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1104 |
|
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1105 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1106 |
Time deadline = DetermineDeadline (serviceFlow); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1107 |
Time currentTime = Simulator::Now (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1108 |
Time period = deadline; // So that deadline is properly updated.. |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1109 |
|
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1110 |
NS_LOG_DEBUG ("At "<<Simulator::Now ().GetSeconds ()<<" at BS uplink scheduler, processing bandwidth request from." << |
7107
6c0fabb46bce
WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents:
7061
diff
changeset
|
1111 |
ssRecord->GetMacAddress () << " and sf " << serviceFlow->GetSchedulingType () <<" with deadline in " << deadline.GetSeconds () << " and size " << size << " aggreg size " << bwRequestHdr.GetBr ()); |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1112 |
|
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1113 |
// Record data in job |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1114 |
job->SetSsRecord (ssRecord); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1115 |
job->SetServiceFlow (serviceFlow); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1116 |
job->SetSize (size); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1117 |
job->SetDeadline (deadline); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1118 |
job->SetReleaseTime (currentTime); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1119 |
job->SetSchedulingType (serviceFlow->GetSchedulingType ()); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1120 |
job->SetPeriod (period); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1121 |
job->SetType (DATA); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1122 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1123 |
// Enqueue job in Uplink Scheduler |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1124 |
switch (serviceFlow->GetSchedulingType ()) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1125 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1126 |
case ServiceFlow::SF_TYPE_RTPS: |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1127 |
EnqueueJob (UlJob::INTERMEDIATE, job); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1128 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1129 |
case ServiceFlow::SF_TYPE_NRTPS: |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1130 |
EnqueueJob (UlJob::INTERMEDIATE, job); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1131 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1132 |
case ServiceFlow::SF_TYPE_BE: |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1133 |
EnqueueJob (UlJob::LOW, job); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1134 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1135 |
default: |
6148
163b163dde43
Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
6111
diff
changeset
|
1136 |
EnqueueJob (UlJob::LOW, job); |
6111
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1137 |
break; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1138 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1139 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1140 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1141 |
/* |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1142 |
* Calculate Deadline of requests according to QoS parameter |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1143 |
* */ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1144 |
Time |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1145 |
UplinkSchedulerMBQoS::DetermineDeadline (ServiceFlow *serviceFlow) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1146 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1147 |
uint32_t latency = serviceFlow->GetMaximumLatency (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1148 |
Time lastGrantTime = serviceFlow->GetRecord ()->GetLastGrantTime (); |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1149 |
Time deadline = MilliSeconds (latency) + lastGrantTime; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1150 |
return deadline; |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1151 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1152 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1153 |
void |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1154 |
UplinkSchedulerMBQoS::OnSetRequestedBandwidth (ServiceFlowRecord *sfr) |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1155 |
{ |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1156 |
// virtual function on UplinkScheduler |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1157 |
// this is not necessary on this implementation |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1158 |
} |
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1159 |
|
0b22ae082153
Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff
changeset
|
1160 |
} // namespace ns3 |