A Discrete-Event Network Simulator
API
lte-test-cqi-generation.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014 Piotr Gawlowicz
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: Piotr Gawlowicz <gawlowicz.p@gmail.com>
19  *
20  */
21 
22 #include <ns3/simulator.h>
23 #include <ns3/log.h>
24 #include <ns3/callback.h>
25 #include <ns3/config.h>
26 #include <ns3/string.h>
27 #include <ns3/double.h>
28 #include <ns3/enum.h>
29 #include <ns3/boolean.h>
30 #include <ns3/pointer.h>
31 #include "ns3/ff-mac-scheduler.h"
32 #include "ns3/mobility-helper.h"
33 #include "ns3/lte-helper.h"
34 
35 #include "lte-ffr-simple.h"
36 #include "ns3/lte-rrc-sap.h"
37 
39 
40 using namespace ns3;
41 
42 NS_LOG_COMPONENT_DEFINE ("LteCqiGenerationTest");
43 
44 void
46  uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
47  uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
48 {
49  testcase->DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
50 }
51 
52 void
54  uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
55  uint8_t mcs, uint16_t sizeTb)
56 {
57  testcase->UlScheduling (frameNo, subframeNo, rnti, mcs, sizeTb);
58 }
59 
60 void
62  uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
63  uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
64 {
65  testcase->DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
66 }
67 
68 void
70  uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
71  uint8_t mcs, uint16_t sizeTb)
72 {
73  testcase->UlScheduling (frameNo, subframeNo, rnti, mcs, sizeTb);
74 }
75 
76 
82  : TestSuite ("lte-cqi-generation", SYSTEM)
83 {
84 // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_DEBUG);
85 // LogComponentEnable ("LteCqiGenerationTest", logLevel);
86  NS_LOG_INFO ("Creating LteCqiGenerationTestSuite");
87 
88  AddTestCase (new LteCqiGenerationTestCase ("UsePdcchForCqiGeneration", false, 4, 2), TestCase::QUICK);
89  AddTestCase (new LteCqiGenerationTestCase ("UsePdschForCqiGeneration", true, 28, 2), TestCase::QUICK);
90 
91  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
92  LteRrcSap::PdschConfigDedicated::dB0, LteRrcSap::PdschConfigDedicated::dB0, 4, 2), TestCase::QUICK);
93  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
94  LteRrcSap::PdschConfigDedicated::dB0, LteRrcSap::PdschConfigDedicated::dB_3, 8, 2), TestCase::QUICK);
95  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
96  LteRrcSap::PdschConfigDedicated::dB0, LteRrcSap::PdschConfigDedicated::dB_6, 10, 2), TestCase::QUICK);
97  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
98  LteRrcSap::PdschConfigDedicated::dB1, LteRrcSap::PdschConfigDedicated::dB_6, 12, 2), TestCase::QUICK);
99  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
100  LteRrcSap::PdschConfigDedicated::dB2, LteRrcSap::PdschConfigDedicated::dB_6, 14, 2), TestCase::QUICK);
101  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
102  LteRrcSap::PdschConfigDedicated::dB3, LteRrcSap::PdschConfigDedicated::dB_6, 14, 2), TestCase::QUICK);
103  AddTestCase (new LteCqiGenerationDlPowerControlTestCase ("CqiGenerationWithDlPowerControl",
104  LteRrcSap::PdschConfigDedicated::dB3, LteRrcSap::PdschConfigDedicated::dB0, 8, 2), TestCase::QUICK);
105 }
106 
108 
109 
110 LteCqiGenerationTestCase::LteCqiGenerationTestCase (std::string name, bool usePdcchForCqiGeneration,
111  uint16_t dlMcs, uint16_t ulMcs)
112  : TestCase ("Downlink Power Control: " + name),
113  m_dlMcs (dlMcs),
114  m_ulMcs (ulMcs)
115 {
116  m_usePdcchForCqiGeneration = usePdcchForCqiGeneration;
117  NS_LOG_INFO ("Creating LteCqiGenerationTestCase");
118 }
119 
121 {
122 }
123 
124 void
125 LteCqiGenerationTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
126  uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
127 {
128  // need to allow for RRC connection establishment + CQI feedback reception
129  if (Simulator::Now () > MilliSeconds (35))
130  {
131 // NS_LOG_UNCOND("DL MSC: " << (uint32_t)mcsTb1 << " expected DL MCS: " << (uint32_t)m_dlMcs);
132  NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcsTb1, (uint32_t)m_dlMcs, "Wrong DL MCS ");
133  }
134 }
135 
136 void
137 LteCqiGenerationTestCase::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
138  uint8_t mcs, uint16_t sizeTb)
139 {
140  // need to allow for RRC connection establishment + SRS transmission
141  if (Simulator::Now () > MilliSeconds (50))
142  {
143 // NS_LOG_UNCOND("UL MSC: " << (uint32_t)mcs << " expected UL MCS: " << (uint32_t)m_ulMcs);
144  NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcs, (uint32_t)m_ulMcs, "Wrong UL MCS");
145  }
146 }
147 
148 void
150 {
151  NS_LOG_DEBUG ("LteCqiGenerationTestCase");
152 
153  Config::Reset ();
154  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
155  Config::SetDefault ("ns3::LteHelper::UsePdschForCqiGeneration", BooleanValue (m_usePdcchForCqiGeneration));
156 
157  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (true));
158  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (true));
159 
160  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
161 
162  // Create Nodes: eNodeB and UE
163  NodeContainer enbNodes;
164  NodeContainer ueNodes1;
165  NodeContainer ueNodes2;
166  enbNodes.Create (2);
167  ueNodes1.Create (1);
168  ueNodes2.Create (1);
169  NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes1, ueNodes2);
170 
171  /*
172  * The topology is the following:
173  *
174  * eNB1 UE1 UE2 eNB2
175  * | | |
176  * x -------------------------- x -------------------------- x
177  * 500 m 500 m
178  *
179  */
180 
181  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
182  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // eNB1
183  positionAlloc->Add (Vector (1000, 0.0, 0.0)); // eNB2
184  positionAlloc->Add (Vector (500.0, 0.0, 0.0)); // UE1
185  positionAlloc->Add (Vector (500, 0.0, 0.0)); // UE2
187  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
188  mobility.SetPositionAllocator (positionAlloc);
189  mobility.Install (allNodes);
190 
191  // Create Devices and install them in the Nodes (eNB and UE)
192  NetDeviceContainer enbDevs;
193  NetDeviceContainer ueDevs1;
194  NetDeviceContainer ueDevs2;
195  lteHelper->SetSchedulerType ("ns3::PfFfMacScheduler");
196  lteHelper->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
197 
198  lteHelper->SetFfrAlgorithmType ("ns3::LteFrHardAlgorithm");
199 
200  lteHelper->SetFfrAlgorithmAttribute ("DlSubBandOffset", UintegerValue (0));
201  lteHelper->SetFfrAlgorithmAttribute ("DlSubBandwidth", UintegerValue (12));
202  lteHelper->SetFfrAlgorithmAttribute ("UlSubBandOffset", UintegerValue (0));
203  lteHelper->SetFfrAlgorithmAttribute ("UlSubBandwidth", UintegerValue (25));
204  enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (0)));
205 
206  lteHelper->SetFfrAlgorithmAttribute ("DlSubBandOffset", UintegerValue (12));
207  lteHelper->SetFfrAlgorithmAttribute ("DlSubBandwidth", UintegerValue (12));
208  lteHelper->SetFfrAlgorithmAttribute ("UlSubBandOffset", UintegerValue (0));
209  lteHelper->SetFfrAlgorithmAttribute ("UlSubBandwidth", UintegerValue (25));
210  enbDevs.Add (lteHelper->InstallEnbDevice (enbNodes.Get (1)));
211 
212  ueDevs1 = lteHelper->InstallUeDevice (ueNodes1);
213  ueDevs2 = lteHelper->InstallUeDevice (ueNodes2);
214 
215  // Attach a UE to a eNB
216  lteHelper->Attach (ueDevs1, enbDevs.Get (0));
217  lteHelper->Attach (ueDevs2, enbDevs.Get (1));
218 
219  // Activate an EPS bearer
220  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
221  EpsBearer bearer (q);
222  lteHelper->ActivateDataRadioBearer (ueDevs1, bearer);
223  lteHelper->ActivateDataRadioBearer (ueDevs2, bearer);
224 
225  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
227 
228  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/UlScheduling",
230 
231  Config::Connect ("/NodeList/1/DeviceList/0/LteEnbMac/DlScheduling",
233 
234  Config::Connect ("/NodeList/1/DeviceList/0/LteEnbMac/UlScheduling",
236 
237  Simulator::Stop (Seconds (1.100));
238  Simulator::Run ();
239 
240  Simulator::Destroy ();
241 }
242 
244  uint8_t cell0Pa, uint8_t cell1Pa, uint16_t dlMcs, uint16_t ulMcs)
245  : TestCase ("Downlink Power Control: " + name),
246  m_cell0Pa (cell0Pa),
247  m_cell1Pa (cell1Pa),
248  m_dlMcs (dlMcs),
249  m_ulMcs (ulMcs)
250 {
251  NS_LOG_INFO ("Creating LteCqiGenerationTestCase");
252 }
253 
255 {
256 }
257 
258 void
259 LteCqiGenerationDlPowerControlTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
260  uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
261 {
262  // need to allow for RRC connection establishment + CQI feedback reception
263  if (Simulator::Now () > MilliSeconds (500))
264  {
265 // NS_LOG_UNCOND("DL MSC: " << (uint32_t)mcsTb1 << " expected DL MCS: " << (uint32_t)m_dlMcs);
266  NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcsTb1, (uint32_t)m_dlMcs, "Wrong DL MCS ");
267  }
268 }
269 
270 void
271 LteCqiGenerationDlPowerControlTestCase::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
272  uint8_t mcs, uint16_t sizeTb)
273 {
274  // need to allow for RRC connection establishment + SRS transmission
275  if (Simulator::Now () > MilliSeconds (500))
276  {
277 // NS_LOG_UNCOND("UL MSC: " << (uint32_t)mcs << " expected UL MCS: " << (uint32_t)m_ulMcs);
278  NS_TEST_ASSERT_MSG_EQ ((uint32_t)mcs, (uint32_t)m_ulMcs, "Wrong UL MCS");
279  }
280 }
281 
282 void
284 {
285  NS_LOG_DEBUG ("LteCqiGenerationTestCase");
286 
287  Config::Reset ();
288  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
289  Config::SetDefault ("ns3::LteHelper::UsePdschForCqiGeneration", BooleanValue (true));
290 
291  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (true));
292  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (true));
293 
294  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
295  lteHelper->SetFfrAlgorithmType ("ns3::LteFfrSimple");
296 
297  // Create Nodes: eNodeB and UE
298  NodeContainer enbNodes;
299  NodeContainer ueNodes1;
300  NodeContainer ueNodes2;
301  enbNodes.Create (2);
302  ueNodes1.Create (1);
303  ueNodes2.Create (1);
304  NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes1, ueNodes2);
305 
306  /*
307  * The topology is the following:
308  *
309  * eNB1 UE1 UE2 eNB2
310  * | | |
311  * x -------------------------- x -------------------------- x
312  * 500 m 500 m
313  *
314  */
315 
316  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
317  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // eNB1
318  positionAlloc->Add (Vector (1000, 0.0, 0.0)); // eNB2
319  positionAlloc->Add (Vector (500.0, 0.0, 0.0)); // UE1
320  positionAlloc->Add (Vector (500, 0.0, 0.0)); // UE2
322  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
323  mobility.SetPositionAllocator (positionAlloc);
324  mobility.Install (allNodes);
325 
326  // Create Devices and install them in the Nodes (eNB and UE)
327  NetDeviceContainer enbDevs;
328  NetDeviceContainer ueDevs1;
329  NetDeviceContainer ueDevs2;
330  lteHelper->SetSchedulerType ("ns3::PfFfMacScheduler");
331  lteHelper->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
332  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
333  ueDevs1 = lteHelper->InstallUeDevice (ueNodes1);
334  ueDevs2 = lteHelper->InstallUeDevice (ueNodes2);
335 
336  // Attach a UE to a eNB
337  lteHelper->Attach (ueDevs1, enbDevs.Get (0));
338  lteHelper->Attach (ueDevs2, enbDevs.Get (1));
339 
340  // Activate an EPS bearer
341  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
342  EpsBearer bearer (q);
343  lteHelper->ActivateDataRadioBearer (ueDevs1, bearer);
344  lteHelper->ActivateDataRadioBearer (ueDevs2, bearer);
345 
346  PointerValue tmp;
347  enbDevs.Get (0)->GetAttribute ("LteFfrAlgorithm", tmp);
348  Ptr<LteFfrSimple> simpleFfrAlgorithmEnb0 = DynamicCast<LteFfrSimple>(tmp.GetObject ());
349  simpleFfrAlgorithmEnb0->ChangePdschConfigDedicated (true);
350 
351  LteRrcSap::PdschConfigDedicated pdschConfigDedicatedEnb0;
352  pdschConfigDedicatedEnb0.pa = m_cell0Pa;
353  simpleFfrAlgorithmEnb0->SetPdschConfigDedicated (pdschConfigDedicatedEnb0);
354 
355  enbDevs.Get (1)->GetAttribute ("LteFfrAlgorithm", tmp);
356  Ptr<LteFfrSimple> simpleFfrAlgorithmEnb1 = DynamicCast<LteFfrSimple>(tmp.GetObject ());
357  simpleFfrAlgorithmEnb1->ChangePdschConfigDedicated (true);
358 
359  LteRrcSap::PdschConfigDedicated pdschConfigDedicatedEnb1;
360  pdschConfigDedicatedEnb1.pa = m_cell1Pa;
361  simpleFfrAlgorithmEnb1->SetPdschConfigDedicated (pdschConfigDedicatedEnb1);
362 
363 
364  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
366 
367  Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/UlScheduling",
369 
370  Simulator::Stop (Seconds (1.100));
371  Simulator::Run ();
372 
373  Simulator::Destroy ();
374 }
375 
void DlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
void LteTestUlSchedulingCallback2(LteCqiGenerationDlPowerControlTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
AttributeValue implementation for Boolean.
Definition: boolean.h:34
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:382
void DlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
A suite of tests to run.
Definition: test.h:1333
Callback< R > MakeBoundCallback(R(*fnPtr)(TX), ARG a1)
Make Callbacks with one bound argument.
Definition: callback.h:1686
Ptr< Object > GetObject(void) const
Get the Object referenced by the PointerValue.
Definition: pointer.cc:55
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:716
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:903
virtual void DoRun(void)
Implementation to actually run this TestCase.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:244
LteCqiGenerationTestCase(std::string name, bool usePdcchForCqiGeneration, uint16_t dlMcs, uint16_t ulMcs)
encapsulates test code
Definition: test.h:1147
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
Definition: lte-helper.cc:1046
void SetFfrAlgorithmType(std::string type)
Set the type of FFR algorithm to be used by eNodeB devices.
Definition: lte-helper.cc:252
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Definition: lte-helper.cc:225
virtual void DoRun(void)
Implementation to actually run this TestCase.
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:71
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
tuple mobility
Definition: third.py:101
Hold variables of type enum.
Definition: enum.h:54
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
Definition: test.cc:298
void ChangePdschConfigDedicated(bool change)
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Hold an unsigned integer type.
Definition: uinteger.h:44
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
Set an attribute for the scheduler to be created.
Definition: lte-helper.cc:239
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:161
holds a vector of ns3::NetDevice pointers
LteCqiGenerationDlPowerControlTestCase(std::string name, uint8_t cell0Pa, uint8_t cell1Pa, uint16_t dlMcs, uint16_t ulMcs)
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:835
void UlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
static LteCqiGenerationTestSuite lteCqiGenerationTestSuite
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Hold objects of type Ptr.
Definition: pointer.h:36
void LteTestDlSchedulingCallback2(LteCqiGenerationDlPowerControlTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
void UlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void Reset(void)
Reset the initial value of every attribute as well as the value of every global to what they were bef...
Definition: config.cc:749
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:397
Helper class used to assign positions and mobility models to nodes.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:236
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:895
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:774
void SetPdschConfigDedicated(LteRrcSap::PdschConfigDedicated pdschConfigDedicated)
void Add(Vector v)
Add a position to the list of positions.
void LteTestDlSchedulingCallback(LteCqiGenerationTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:340
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
void SetFfrAlgorithmAttribute(std::string n, const AttributeValue &v)
Set an attribute for the FFR algorithm to be created.
Definition: lte-helper.cc:260
Qci
QoS Class Indicator.
Definition: eps-bearer.h:77
void LteTestUlSchedulingCallback(LteCqiGenerationTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)