A Discrete-Event Network Simulator
API
lte-test-cqi-generation.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014 Piotr Gawlowicz
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
18 *
19 */
20
22
23#include "lte-ffr-simple.h"
24
25#include "ns3/ff-mac-scheduler.h"
26#include "ns3/lte-helper.h"
27#include "ns3/lte-rrc-sap.h"
28#include "ns3/mobility-helper.h"
29#include <ns3/boolean.h>
30#include <ns3/callback.h>
31#include <ns3/config.h>
32#include <ns3/double.h>
33#include <ns3/enum.h>
34#include <ns3/log.h>
35#include <ns3/lte-ue-mac.h>
36#include <ns3/lte-ue-net-device.h>
37#include <ns3/pointer.h>
38#include <ns3/simulator.h>
39#include <ns3/string.h>
40
41using namespace ns3;
42
43NS_LOG_COMPONENT_DEFINE("LteCqiGenerationTest");
44
45void
47 std::string path,
49{
50 testcase->DlScheduling(dlInfo);
51}
52
53void
55 std::string path,
56 uint32_t frameNo,
57 uint32_t subframeNo,
58 uint16_t rnti,
59 uint8_t mcs,
60 uint16_t sizeTb,
61 uint8_t ccId)
62{
63 testcase->UlScheduling(frameNo, subframeNo, rnti, mcs, sizeTb);
64}
65
66void
68 std::string path,
70{
71 testcase->DlScheduling(dlInfo);
72}
73
74void
76 std::string path,
77 uint32_t frameNo,
78 uint32_t subframeNo,
79 uint16_t rnti,
80 uint8_t mcs,
81 uint16_t sizeTb,
82 uint8_t componentCarrierId)
83{
84 testcase->UlScheduling(frameNo, subframeNo, rnti, mcs, sizeTb);
85}
86
92 : TestSuite("lte-cqi-generation", SYSTEM)
93{
94 // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_DEBUG);
95 // LogComponentEnable ("LteCqiGenerationTest", logLevel);
96 NS_LOG_INFO("Creating LteCqiGenerationTestSuite");
97
98 AddTestCase(new LteCqiGenerationTestCase("UsePdcchForCqiGeneration", false, 4, 2),
99 TestCase::QUICK);
100 AddTestCase(new LteCqiGenerationTestCase("UsePdschForCqiGeneration", true, 28, 2),
101 TestCase::QUICK);
102
103 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
104 LteRrcSap::PdschConfigDedicated::dB0,
105 LteRrcSap::PdschConfigDedicated::dB0,
106 4,
107 2),
108 TestCase::QUICK);
109 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
110 LteRrcSap::PdschConfigDedicated::dB0,
111 LteRrcSap::PdschConfigDedicated::dB_3,
112 8,
113 2),
114 TestCase::QUICK);
115 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
116 LteRrcSap::PdschConfigDedicated::dB0,
117 LteRrcSap::PdschConfigDedicated::dB_6,
118 10,
119 2),
120 TestCase::QUICK);
121 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
122 LteRrcSap::PdschConfigDedicated::dB1,
123 LteRrcSap::PdschConfigDedicated::dB_6,
124 12,
125 2),
126 TestCase::QUICK);
127 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
128 LteRrcSap::PdschConfigDedicated::dB2,
129 LteRrcSap::PdschConfigDedicated::dB_6,
130 14,
131 2),
132 TestCase::QUICK);
133 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
134 LteRrcSap::PdschConfigDedicated::dB3,
135 LteRrcSap::PdschConfigDedicated::dB_6,
136 14,
137 2),
138 TestCase::QUICK);
139 AddTestCase(new LteCqiGenerationDlPowerControlTestCase("CqiGenerationWithDlPowerControl",
140 LteRrcSap::PdschConfigDedicated::dB3,
141 LteRrcSap::PdschConfigDedicated::dB0,
142 8,
143 2),
144 TestCase::QUICK);
145}
146
148
150 bool usePdcchForCqiGeneration,
151 uint16_t dlMcs,
152 uint16_t ulMcs)
153 : TestCase("Downlink Power Control: " + name),
154 m_dlMcs(dlMcs),
155 m_ulMcs(ulMcs)
156{
157 m_usePdschForCqiGeneration = usePdcchForCqiGeneration;
158 NS_LOG_INFO("Creating LteCqiGenerationTestCase");
159}
160
162{
163}
164
165void
167{
168 // need to allow for RRC connection establishment + CQI feedback reception
169 if (Simulator::Now() > MilliSeconds(35))
170 {
171 // NS_LOG_UNCOND("DL MSC: " << (uint32_t)mcsTb1 << " expected DL MCS: " <<
172 // (uint32_t)m_dlMcs);
173 NS_TEST_ASSERT_MSG_EQ((uint32_t)dlInfo.mcsTb1, (uint32_t)m_dlMcs, "Wrong DL MCS ");
174 }
175}
176
177void
179 uint32_t subframeNo,
180 uint16_t rnti,
181 uint8_t mcs,
182 uint16_t sizeTb)
183{
184 // need to allow for RRC connection establishment + SRS transmission
185 if (Simulator::Now() > MilliSeconds(50))
186 {
187 // NS_LOG_UNCOND("UL MSC: " << (uint32_t)mcs << " expected UL MCS: " <<
188 // (uint32_t)m_ulMcs);
189 NS_TEST_ASSERT_MSG_EQ((uint32_t)mcs, (uint32_t)m_ulMcs, "Wrong UL MCS");
190 }
191}
192
193void
195{
196 NS_LOG_DEBUG("LteCqiGenerationTestCase");
197
199 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
200 Config::SetDefault("ns3::LteHelper::UsePdschForCqiGeneration",
202
203 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(true));
204 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(true));
205
206 Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
207
208 // Create Nodes: eNodeB and UE
209 NodeContainer enbNodes;
210 NodeContainer ueNodes1;
211 NodeContainer ueNodes2;
212 enbNodes.Create(2);
213 ueNodes1.Create(1);
214 ueNodes2.Create(1);
215 NodeContainer allNodes = NodeContainer(enbNodes, ueNodes1, ueNodes2);
216
217 /*
218 * The topology is the following:
219 *
220 * eNB1 UE1 UE2 eNB2
221 * | | |
222 * x -------------------------- x -------------------------- x
223 * 500 m 500 m
224 *
225 */
226
227 Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
228 positionAlloc->Add(Vector(0.0, 0.0, 0.0)); // eNB1
229 positionAlloc->Add(Vector(1000, 0.0, 0.0)); // eNB2
230 positionAlloc->Add(Vector(500.0, 0.0, 0.0)); // UE1
231 positionAlloc->Add(Vector(500, 0.0, 0.0)); // UE2
233 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
234 mobility.SetPositionAllocator(positionAlloc);
235 mobility.Install(allNodes);
236
237 // Create Devices and install them in the Nodes (eNB and UE)
238 NetDeviceContainer enbDevs;
239 NetDeviceContainer ueDevs1;
240 NetDeviceContainer ueDevs2;
241 lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");
242 lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
243
244 lteHelper->SetFfrAlgorithmType("ns3::LteFrHardAlgorithm");
245
246 lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue(0));
247 lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue(12));
248 lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue(0));
249 lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue(25));
250 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(0)));
251
252 lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue(12));
253 lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue(12));
254 lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue(0));
255 lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue(25));
256 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(1)));
257
258 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
259 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
260
261 // Attach a UE to a eNB
262 lteHelper->Attach(ueDevs1, enbDevs.Get(0));
263 lteHelper->Attach(ueDevs2, enbDevs.Get(1));
264
265 // Activate an EPS bearer
266 enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
267 EpsBearer bearer(q);
268 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
269 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
270
271 Config::Connect("/NodeList/0/DeviceList/0/ComponentCarrierMap/*/LteEnbMac/DlScheduling",
273
274 Config::Connect("/NodeList/0/DeviceList/0/ComponentCarrierMap/*/LteEnbMac/UlScheduling",
276
277 Config::Connect("/NodeList/1/DeviceList/0/ComponentCarrierMap/*/LteEnbMac/DlScheduling",
279
280 Config::Connect("/NodeList/1/DeviceList/0/ComponentCarrierMap/*/LteEnbMac/UlScheduling",
282
283 Simulator::Stop(Seconds(1.100));
284 Simulator::Run();
285
286 Simulator::Destroy();
287}
288
290 uint8_t cell0Pa,
291 uint8_t cell1Pa,
292 uint16_t dlMcs,
293 uint16_t ulMcs)
294 : TestCase("Downlink Power Control: " + name),
295 m_cell0Pa(cell0Pa),
296 m_cell1Pa(cell1Pa),
297 m_dlMcs(dlMcs),
298 m_ulMcs(ulMcs)
299{
300 NS_LOG_INFO("Creating LteCqiGenerationTestCase");
301}
302
304{
305}
306
307void
309{
310 // need to allow for RRC connection establishment + CQI feedback reception
311 if (Simulator::Now() > MilliSeconds(500))
312 {
313 // NS_LOG_UNCOND("DL MSC: " << (uint32_t)mcsTb1 << " expected DL MCS: " <<
314 // (uint32_t)m_dlMcs);
315 NS_TEST_ASSERT_MSG_EQ((uint32_t)dlInfo.mcsTb1, (uint32_t)m_dlMcs, "Wrong DL MCS ");
316 }
317}
318
319void
321 uint32_t subframeNo,
322 uint16_t rnti,
323 uint8_t mcs,
324 uint16_t sizeTb)
325{
326 // need to allow for RRC connection establishment + SRS transmission
327 if (Simulator::Now() > MilliSeconds(500))
328 {
329 // NS_LOG_UNCOND("UL MSC: " << (uint32_t)mcs << " expected UL MCS: " <<
330 // (uint32_t)m_ulMcs);
331 NS_TEST_ASSERT_MSG_EQ((uint32_t)mcs, (uint32_t)m_ulMcs, "Wrong UL MCS");
332 }
333}
334
335void
337{
338 NS_LOG_DEBUG("LteCqiGenerationTestCase");
339
341 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
342 Config::SetDefault("ns3::LteHelper::UsePdschForCqiGeneration", BooleanValue(true));
343
344 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(true));
345 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(true));
346
347 Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
348 lteHelper->SetFfrAlgorithmType("ns3::LteFfrSimple");
349
350 // Create Nodes: eNodeB and UE
351 NodeContainer enbNodes;
352 NodeContainer ueNodes1;
353 NodeContainer ueNodes2;
354 enbNodes.Create(2);
355 ueNodes1.Create(1);
356 ueNodes2.Create(2);
357 NodeContainer allNodes = NodeContainer(enbNodes, ueNodes1, ueNodes2);
358
359 /*
360 * The topology is the following:
361 *
362 * eNB1 UE1 UE2 eNB2 UE3
363 * | | | |
364 * x -------------------------- x -------------------------- x----x
365 * 500 m 500 m 50m
366 *
367 * see https://www.nsnam.org/bugzilla/show_bug.cgi?id=2048#c4 for why we need UE3
368 */
369
370 Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
371 positionAlloc->Add(Vector(0.0, 0.0, 0.0)); // eNB1
372 positionAlloc->Add(Vector(1000, 0.0, 0.0)); // eNB2
373 positionAlloc->Add(Vector(500.0, 0.0, 0.0)); // UE1
374 positionAlloc->Add(Vector(500, 0.0, 0.0)); // UE2
375 positionAlloc->Add(Vector(1050, 0.0, 0.0)); // UE3
377 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
378 mobility.SetPositionAllocator(positionAlloc);
379 mobility.Install(allNodes);
380
381 // Create Devices and install them in the Nodes (eNB and UE)
382 NetDeviceContainer enbDevs;
383 NetDeviceContainer ueDevs1;
384 NetDeviceContainer ueDevs2;
385 lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");
386 // In this scenario, eNB2 with 2 UEs will assign 12 RBs to UE2.
387 // On the other hand eNB1 will assign 25 RBs to UE1. As per the new uplink power
388 // spectral density computation, UE with less RBs to Tx will have more power
389 // per RB. Therefore UE2 will harm UE1 more, thus, both the UEs will have
390 // different Uplink CQI, which will cause the test to fail.
391 // In this case, we can use SRS based CQIs, since, they are not dependent on
392 // the transmission bandwidth.
393 lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::SRS_UL_CQI));
394 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
395 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
396 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
397 // We need to fix the stream to have control over
398 // random preamble generation by the UEs.
399 Ptr<LteUeNetDevice> lteUeDev;
400 Ptr<LteUeMac> lteUeMac;
401 lteUeDev = DynamicCast<LteUeNetDevice>(ueDevs1.Get(0));
402 lteUeMac = lteUeDev->GetMac();
403 lteUeMac->AssignStreams(1);
404 lteUeDev = DynamicCast<LteUeNetDevice>(ueDevs2.Get(0));
405 lteUeMac = lteUeDev->GetMac();
406 lteUeMac->AssignStreams(1);
407 lteUeDev = DynamicCast<LteUeNetDevice>(ueDevs2.Get(1));
408 lteUeMac = lteUeDev->GetMac();
409 lteUeMac->AssignStreams(2);
410
411 // Attach a UE to a eNB
412 lteHelper->Attach(ueDevs1, enbDevs.Get(0));
413 lteHelper->Attach(ueDevs2, enbDevs.Get(1));
414
415 // Activate an EPS bearer
416 enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
417 EpsBearer bearer(q);
418 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
419 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
420
421 PointerValue tmp;
422 enbDevs.Get(0)->GetAttribute("LteFfrAlgorithm", tmp);
423 Ptr<LteFfrSimple> simpleFfrAlgorithmEnb0 = DynamicCast<LteFfrSimple>(tmp.GetObject());
424 simpleFfrAlgorithmEnb0->ChangePdschConfigDedicated(true);
425
426 LteRrcSap::PdschConfigDedicated pdschConfigDedicatedEnb0;
427 pdschConfigDedicatedEnb0.pa = m_cell0Pa;
428 simpleFfrAlgorithmEnb0->SetPdschConfigDedicated(pdschConfigDedicatedEnb0);
429
430 enbDevs.Get(1)->GetAttribute("LteFfrAlgorithm", tmp);
431 Ptr<LteFfrSimple> simpleFfrAlgorithmEnb1 = DynamicCast<LteFfrSimple>(tmp.GetObject());
432 simpleFfrAlgorithmEnb1->ChangePdschConfigDedicated(true);
433
434 LteRrcSap::PdschConfigDedicated pdschConfigDedicatedEnb1;
435 pdschConfigDedicatedEnb1.pa = m_cell1Pa;
436 simpleFfrAlgorithmEnb1->SetPdschConfigDedicated(pdschConfigDedicatedEnb1);
437
438 Config::Connect("/NodeList/0/DeviceList/0/ComponentCarrierMap/*/LteEnbMac/DlScheduling",
440
441 Config::Connect("/NodeList/0/DeviceList/0/ComponentCarrierMap/*/LteEnbMac/UlScheduling",
443
444 Simulator::Stop(Seconds(1.100));
445 Simulator::Run();
446
447 Simulator::Destroy();
448}
This test is very similar to LteCqiGenerationTestCase.
void DoRun() override
Implementation to actually run this TestCase.
void DlScheduling(DlSchedulingCallbackInfo dlInfo)
DL Scheduling function.
LteCqiGenerationDlPowerControlTestCase(std::string name, uint8_t cell0Pa, uint8_t cell1Pa, uint16_t dlMcs, uint16_t ulMcs)
Constructor.
void UlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
UL Scheduling function.
This is the test case for testing different configuration of CQI generation.
void UlScheduling(uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb)
UL Scheduling function.
void DoRun() override
Implementation to actually run this TestCase.
bool m_usePdschForCqiGeneration
use PDCCH for CQI generation
void DlScheduling(DlSchedulingCallbackInfo dlInfo)
DL Scheduling function.
LteCqiGenerationTestCase(std::string name, bool usePdcchForCqiGeneration, uint16_t dlMcs, uint16_t ulMcs)
Constructor.
Lte Cqi Generation Test Suite.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Hold variables of type enum.
Definition: enum.h:56
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
Qci
QoS Class Indicator.
Definition: eps-bearer.h:106
void ChangePdschConfigDedicated(bool change)
Callback function that is used to be connected to trace ChangePdschConfigDedicated.
void SetPdschConfigDedicated(LteRrcSap::PdschConfigDedicated pdschConfigDedicated)
Set PDSCH config dedicated function.
void SetFfrAlgorithmType(std::string type)
Set the type of FFR algorithm to be used by eNodeB devices.
Definition: lte-helper.cc:316
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
Set an attribute for the scheduler to be created.
Definition: lte-helper.cc:303
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:482
void SetFfrAlgorithmAttribute(std::string n, const AttributeValue &v)
Set an attribute for the FFR algorithm to be created.
Definition: lte-helper.cc:324
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Definition: lte-helper.cc:289
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:1044
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
Definition: lte-helper.cc:1441
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:497
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Hold objects of type Ptr<T>.
Definition: pointer.h:37
Ptr< Object > GetObject() const
Get the Object referenced by the PointerValue.
Definition: pointer.cc:57
encapsulates test code
Definition: test.h:1060
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:305
A suite of tests to run.
Definition: test.h:1256
Hold an unsigned integer type.
Definition: uinteger.h:45
void Reset()
Reset the initial value of every attribute as well as the value of every global to what they were bef...
Definition: config.cc:856
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:891
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:975
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:268
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:275
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs... bargs)
Make Callbacks with varying number of bound arguments.
Definition: callback.h:752
Time Now()
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:296
#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:144
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1338
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1350
void LteTestUlSchedulingCallback(LteCqiGenerationTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb, uint8_t ccId)
void LteTestUlSchedulingCallback2(LteCqiGenerationDlPowerControlTestCase *testcase, std::string path, uint32_t frameNo, uint32_t subframeNo, uint16_t rnti, uint8_t mcs, uint16_t sizeTb, uint8_t componentCarrierId)
void LteTestDlSchedulingCallback2(LteCqiGenerationDlPowerControlTestCase *testcase, std::string path, DlSchedulingCallbackInfo dlInfo)
void LteTestDlSchedulingCallback(LteCqiGenerationTestCase *testcase, std::string path, DlSchedulingCallbackInfo dlInfo)
static LteCqiGenerationTestSuite lteCqiGenerationTestSuite
Every class exported by the ns3 library is enclosed in the ns3 namespace.
mobility
Definition: third.py:96
DlSchedulingCallbackInfo structure.
Definition: lte-common.h:231
PdschConfigDedicated structure.
Definition: lte-rrc-sap.h:157