A Discrete-Event Network Simulator
API
lte-test-rr-ff-mac-scheduler.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Marco Miozzo <marco.miozzo@cttc.es>
19  * Nicola Baldo <nbaldo@cttc.es>
20  */
21 
22 #include <ns3/object.h>
23 #include <ns3/spectrum-interference.h>
24 #include <ns3/spectrum-error-model.h>
25 #include <ns3/log.h>
26 #include <ns3/test.h>
27 #include <ns3/simulator.h>
28 #include <ns3/packet.h>
29 #include <ns3/ptr.h>
30 #include <iostream>
31 #include "ns3/radio-bearer-stats-calculator.h"
32 #include <ns3/constant-position-mobility-model.h>
33 #include <ns3/ff-mac-scheduler.h>
34 #include <ns3/eps-bearer.h>
35 #include <ns3/node-container.h>
36 #include <ns3/mobility-helper.h>
37 #include <ns3/net-device-container.h>
38 #include <ns3/lte-ue-net-device.h>
39 #include <ns3/lte-enb-net-device.h>
40 #include <ns3/lte-ue-rrc.h>
41 #include <ns3/lte-helper.h>
42 #include "ns3/string.h"
43 #include "ns3/double.h"
44 #include <ns3/lte-enb-phy.h>
45 #include <ns3/lte-ue-phy.h>
46 #include <ns3/boolean.h>
47 #include <ns3/enum.h>
48 #include <ns3/config-store-module.h>
49 
51 
52 using namespace ns3;
53 
54 NS_LOG_COMPONENT_DEFINE ("LenaTestRrFfMacScheduler");
55 
57  : TestSuite ("lte-rr-ff-mac-scheduler", SYSTEM)
58 {
59  NS_LOG_INFO ("creating LenaRrFfMacSchedulerTestCase");
60 
61  bool errorModel = true;
62 
63 
64  // DOWNLINK- DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
65  // 1 user -> 24 PRB at Itbs 26 -> 2196 -> 2196000 bytes/sec
66  // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 bytes/sec
67  // 6 users -> 4 PRB at Itbs 26 -> 373 -> 373000 bytes/sec
68  // 9 user -> 2 PRB at Itbs 26 -> 185 -> 185000 bytes/sec
69  // 12 users -> 2 PRB at Itbs 26 -> 185 -> 185000 bytes/sec
70  // 15 users -> 2 PRB at Itbs 26 * 0.8 -> 148 -> 148000 bytes/sec
71  // UPLINK- DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
72  // 1 user -> 25 PRB at Itbs 26 -> 2292 -> 2292000 bytes/sec
73  // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 bytes/sec
74  // 6 users -> 4 PRB at Itbs 26 -> 373 -> 373000 bytes/sec
75  // after the patch enforcing min 3 PRBs per UE:
76  // 9 users -> 3 PRB at Itbs 26 -> 277 bytes * 8/9 UE/TTI -> 246220 bytes/sec
77  // 12 users -> 3 PRB at Itbs 26 -> 277 bytes * 8/12 UE/TTI -> 184670 bytes/sec
78  // 15 users -> 3 PRB at Itbs 26 -> 277 bytes * 8/15 UE/TTI -> 147730 bytes/sec
79  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,2196000,2292000,errorModel), TestCase::EXTENSIVE);
80  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,749000,749000,errorModel), TestCase::QUICK);
81  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,373000,373000,errorModel), TestCase::EXTENSIVE);
82  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,185000,246220,errorModel), TestCase::EXTENSIVE);
83  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,185000,184670,errorModel), TestCase::EXTENSIVE);
84  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,148000,147730,errorModel), TestCase::EXTENSIVE);
85 
86  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
87  // 1 user -> 24 PRB at Itbs 20 -> 1383 -> 1383000 bytes/sec
88  // 3 users -> 8 PRB at Itbs 20 -> 469 -> 469000 bytes/sec
89  // 6 users -> 4 PRB at Itbs 20 -> 233 -> 233000 bytes/sec
90  // 9 user -> 2 PRB at Itbs 20 -> 113 -> 113000 bytes/sec
91  // 12 users -> 2 PRB at Itbs 20 -> 113 -> 113000 bytes/sec
92  // 15 users -> 2 PRB at Itbs 20 * 0.8 -> 90.4 -> 90400 bytes/sec
93  // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
94  // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 bytes/sec
95  // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 bytes/sec
96  // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 bytes/sec
97  // after the patch enforcing min 3 PRBs per UE:
98  // 9 users -> 3 PRB at Itbs 13 -> 93 bytes * 8/9 UE/TTI -> 82667 bytes/sec
99  // 12 users -> 3 PRB at Itbs 13 -> 93 bytes * 8/12 UE/TTI -> 62000 bytes/sec
100  // 15 users -> 3 PRB at Itbs 13 -> 93 bytes * 8/15 UE/TTI -> 49600 bytes/sec
101  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,4800,1383000,807000,errorModel), TestCase::EXTENSIVE);
102  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,4800,469000,253000,errorModel), TestCase::EXTENSIVE);
103  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,4800,233000,125000,errorModel), TestCase::EXTENSIVE);
104  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,4800,113000,82667,errorModel), TestCase::EXTENSIVE);
105  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,4800,113000,62000,errorModel), TestCase::EXTENSIVE);
106  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,4800,90400,49600,errorModel), TestCase::EXTENSIVE);
107 
108  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
109  // 1 user -> 24 PRB at Itbs 15 -> 1191 -> 1191000 bytes/sec
110  // 3 users -> 8 PRB at Itbs 15 -> 389 -> 389000 bytes/sec
111  // 6 users -> 4 PRB at Itbs 15 -> 193 -> 193000 bytes/sec
112  // 9 user -> 2 PRB at Itbs 15 -> 97 -> 97000 bytes/sec
113  // 12 users -> 2 PRB at Itbs 15 -> 97 -> 97000 bytes/sec
114  // 15 users -> 2 PRB at Itbs 15 * 0.8 -> 77.6 -> 77600 bytes/sec
115  // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
116  // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
117  // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
118  // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
119  // 9 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/9 UE/TTI -> 64889 bytes/sec
120  // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
121  // 15 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/15 UE/TTI -> 38993 bytes/sec
122  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,6000,1191000,621000,errorModel), TestCase::EXTENSIVE);
123  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,6000,389000,201000,errorModel), TestCase::EXTENSIVE);
124  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,6000,193000,97000,errorModel), TestCase::EXTENSIVE);
125  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,6000,97000,64889,errorModel), TestCase::EXTENSIVE);
126  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,6000,97000,48667,errorModel), TestCase::EXTENSIVE);
127  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,6000,77600,38993,errorModel), TestCase::EXTENSIVE);
128 
129  // DOWNLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
130  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec
131  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
132  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
133  // 9 user -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
134  // 12 users -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
135  // 15 users -> 2 PRB at Itbs 8 * 0.8 -> 25.6 -> 25600 bytes/sec
136  // UPLINK - DISTANCE 20000 -> MCS 2 -> Itbs 2 (from table 7.1.7.2.1-1 of 36.213)
137  // 1 user -> 25 PRB at Itbs 2 -> 137 -> 137000 bytes/sec
138  // 3 users -> 8 PRB at Itbs 2 -> 41 -> 41000 bytes/sec
139  // 6 users -> 4 PRB at Itbs 2 -> 22 -> 22000 bytes/sec
140  // after the patch enforcing min 3 PRBs per UE:
141  // 9 users -> 3 PRB at Itbs 2 -> 18 bytes * 8/9 UE/TTI -> 16000 bytes/sec
142  // 12 users -> 3 PRB at Itbs 2 -> 18 bytes * 8/12 UE/TTI -> 12000 bytes/sec
143  // 15 users -> 3 PRB at Itbs 2 -> 18 bytes * 8/15 UE/TTI -> 9600 bytes/sec
144  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,20000,421000,137000,errorModel), TestCase::EXTENSIVE);
145  AddTestCase (new LenaRrFfMacSchedulerTestCase (3,20000,137000,41000,errorModel), TestCase::EXTENSIVE);
146  AddTestCase (new LenaRrFfMacSchedulerTestCase (6,20000,67000,22000,errorModel), TestCase::EXTENSIVE);
147  AddTestCase (new LenaRrFfMacSchedulerTestCase (9,20000,32000,16000,errorModel), TestCase::EXTENSIVE);
148  AddTestCase (new LenaRrFfMacSchedulerTestCase (12,20000,32000,12000,errorModel), TestCase::EXTENSIVE);
149  AddTestCase (new LenaRrFfMacSchedulerTestCase (15,20000,25600,9600,errorModel), TestCase::EXTENSIVE);
150 
151  // DOWNLINK - DISTANCE 100000 -> CQI == 0 -> out of range -> 0 bytes/sec
152  // UPLINK - DISTANCE 100000 -> CQI == 0 -> out of range -> 0 bytes/sec
153  AddTestCase (new LenaRrFfMacSchedulerTestCase (1,100000,0,0,errorModel), TestCase::QUICK);
154 }
155 
157 
158 std::string
160 {
161  std::ostringstream oss;
162  oss << nUser << " UEs, distance " << dist << " m";
163  return oss.str ();
164 }
165 
166 LenaRrFfMacSchedulerTestCase::LenaRrFfMacSchedulerTestCase (uint16_t nUser, double dist, double thrRefDl, double thrRefUl, bool errorModelEnabled)
167  : TestCase (BuildNameString (nUser, dist)),
168  m_nUser (nUser),
169  m_dist (dist),
170  m_thrRefDl (thrRefDl),
171  m_thrRefUl (thrRefUl),
172  m_errorModelEnabled (errorModelEnabled)
173 {
174 }
175 
177 {
178 }
179 
180 void
182 {
183  NS_LOG_FUNCTION (this << m_nUser << m_dist);
184  if (!m_errorModelEnabled)
185  {
186  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
187  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
188  }
189  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (false));
190  Config::SetDefault ("ns3::MacStatsCalculator::DlOutputFilename", StringValue (CreateTempDirFilename ("DlMacStats.txt")));
191  Config::SetDefault ("ns3::MacStatsCalculator::UlOutputFilename", StringValue (CreateTempDirFilename ("UlMacStats.txt")));
192  Config::SetDefault ("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename", StringValue (CreateTempDirFilename ("DlRlcStats.txt")));
193  Config::SetDefault ("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename", StringValue (CreateTempDirFilename ("UlRlcStats.txt")));
194 
195  // This is needed as the RR scheduler does not allocate resources properly for retransmission
196  Config::SetDefault ("ns3::LteRlcAm::TxOpportunityForRetxAlwaysBigEnough", BooleanValue (true));
197 
198  //Disable Uplink Power Control
199  Config::SetDefault ("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue (false));
200 
205  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
206 
207  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
208 
209  // Create Nodes: eNodeB and UE
210  NodeContainer enbNodes;
211  NodeContainer ueNodes;
212  enbNodes.Create (1);
213  ueNodes.Create (m_nUser);
214 
215  // Install Mobility Model
217  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
218  mobility.Install (enbNodes);
219  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
220  mobility.Install (ueNodes);
221 
222  // Create Devices and install them in the Nodes (eNB and UE)
223  NetDeviceContainer enbDevs;
224  NetDeviceContainer ueDevs;
225  lteHelper->SetSchedulerType ("ns3::RrFfMacScheduler");
226  lteHelper->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::SRS_UL_CQI));
227  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
228  ueDevs = lteHelper->InstallUeDevice (ueNodes);
229 
230  // Attach a UE to a eNB
231  lteHelper->Attach (ueDevs, enbDevs.Get (0));
232 
233  // Activate an EPS bearer
234  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
235  EpsBearer bearer (q);
236  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
237 
238 
239  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
240  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
241  enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
242  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
243 
244  // Set UEs' position and power
245  for (int i = 0; i < m_nUser; i++)
246  {
248  mm->SetPosition (Vector (m_dist, 0.0, 0.0));
249  Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
250  Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
251  uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
252  uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
253  }
254 
255 
256  double statsStartTime = 0.300; // need to allow for RRC connection establishment + SRS
257  double statsDuration = 0.4;
258  double tolerance = 0.1;
259  Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
260 
261  lteHelper->EnableRlcTraces ();
262  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
263  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
264  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
265 
266  Simulator::Run ();
267 
271  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
272  std::vector <uint64_t> dlDataRxed;
274  {
275  m_thrRefDl *= 0.95; // for couting the Vienna AMC behavior: BLER between 0% and 10%
276  }
277  for (int i = 0; i < m_nUser; i++)
278  {
279  // get the imsi
280  uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
281  uint8_t lcId = 3;
282  dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
283  NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " lcid " << (uint16_t) lcId << " bytes rxed " << (double)dlDataRxed.at (i) << " thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_thrRefDl);
284  NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / statsDuration, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
285  }
286 
287  NS_LOG_INFO ("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
288  std::vector <uint64_t> ulDataRxed;
290  {
291  m_thrRefUl *= 0.95; // for couting the Vienna AMC behavior: BLER between 0% and 10%
292  }
293  for (int i = 0; i < m_nUser; i++)
294  {
295  // get the imsi
296  uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
297  // get the lcId
298  uint8_t lcId = 3;
299  ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
300  NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " lcid " << (uint16_t) lcId << " bytes rxed " << (double)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / statsDuration << " ref " << m_thrRefUl << " txed " << rlcStats->GetUlTxData (imsi, lcId) / statsDuration);
301  NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / statsDuration, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
302  }
303 
304  Simulator::Destroy ();
305 }
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
uint16_t m_nUser
number of UE nodes
AttributeValue implementation for Boolean.
Definition: boolean.h:36
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:474
Hold variables of type string.
Definition: string.h:41
A suite of tests to run.
Definition: test.h:1342
Mobility model for which the current position does not change once it has been set and until it is se...
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
Definition: lte-helper.cc:961
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:204
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
Definition: lte-helper.cc:1436
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:280
encapsulates test code
Definition: test.h:1155
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
Definition: lte-helper.cc:1314
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Definition: lte-helper.cc:279
mobility
Definition: third.py:108
double m_dist
the distance between nodes
double m_thrRefDl
the DL throughput reference
Hold variables of type enum.
Definition: enum.h:54
AttributeValue implementation for Time.
Definition: nstime.h:1124
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
uint64_t GetDlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received downlink data bytes.
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
Set an attribute for the scheduler to be created.
Definition: lte-helper.cc:293
holds a vector of ns3::NetDevice pointers
Ptr< LteEnbPhy > GetPhy(void) const
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
Definition: test.h:380
double m_thrRefUl
the UL throughput reference
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:459
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
static std::string BuildNameString(uint16_t nUser, double dist)
Builds the test name string based on provided parameter values.
Ptr< LteUePhy > GetPhy(void) const
Get the Phy.
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
bool m_errorModelEnabled
indicates whether the error model is enabled
void SetPosition(const Vector &position)
Test suite for RrFfMacScheduler test.
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
Definition: lte-helper.cc:1573
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:489
Helper class used to assign positions and mobility models to nodes.
uint64_t GetUlTxData(uint64_t imsi, uint8_t lcid)
Gets the number of transmitted uplink data bytes.
uint64_t GetUlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received uplink data bytes.
This system test program creates different test cases with a single eNB and This system test program ...
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:430
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1062
LenaRrFfMacSchedulerTestCase(uint16_t nUser, double dist, double thrRefDl, double thrRefUl, bool errorModelEnabled)
Constructor.
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:810
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Qci
QoS Class Indicator.
Definition: eps-bearer.h:106
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
static LenaTestRrFfMacSchedulerSuite lenaTestRrFfMacSchedulerSuite
virtual void DoRun(void)
Implementation to actually run this TestCase.
This class can be used to hold variables of floating point type such as &#39;double&#39; or &#39;float&#39;...
Definition: double.h:41
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Definition: object-base.cc:185
The eNodeB device implementation.
The LteUeNetDevice class implements the UE net device.