A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
lte-test-interference-fr.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014 Piotr Gawlowicz
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
7 * Based on lte-test-interference.{h,cc} by:
8 * Manuel Requena <manuel.requena@cttc.es>
9 * Nicola Baldo <nbaldo@cttc.es>
10 */
11
13
15
16#include "ns3/boolean.h"
17#include "ns3/double.h"
18#include "ns3/ff-mac-scheduler.h"
19#include "ns3/log.h"
20#include "ns3/lte-enb-net-device.h"
21#include "ns3/lte-enb-phy.h"
22#include "ns3/lte-helper.h"
23#include "ns3/lte-spectrum-value-helper.h"
24#include "ns3/lte-ue-net-device.h"
25#include "ns3/lte-ue-phy.h"
26#include "ns3/mobility-helper.h"
27#include "ns3/simulator.h"
28#include "ns3/spectrum-value.h"
29#include "ns3/string.h"
30#include <ns3/enum.h>
31#include <ns3/lte-chunk-processor.h>
32#include <ns3/pointer.h>
33
34using namespace ns3;
35
36NS_LOG_COMPONENT_DEFINE("LteInterferenceFrTest");
37
38/**
39 * TestSuite
40 */
41
43 : TestSuite("lte-interference-fr", Type::SYSTEM)
44{
45 // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_DEBUG);
46 // LogComponentEnable ("LteInterferenceFrTest", logLevel);
47
49 50.000000,
50 20.000000,
51 356449.932732,
52 10803.280215),
53 TestCase::Duration::QUICK);
55 50.000000,
56 50.000000,
57 356449.932732,
58 10803.280215),
59 TestCase::Duration::QUICK);
61 50.000000,
62 200.000000,
63 356449.932732,
64 10803.280215),
65 TestCase::Duration::QUICK);
67 50.000000,
68 500.000000,
69 356449.932732,
70 10803.280215),
71 TestCase::Duration::QUICK);
72
74 50.000000,
75 20.000000,
76 0.160000,
77 0.159998,
78 356449.932732,
79 10803.280215,
80 18),
81 TestCase::Duration::QUICK);
83 50.000000,
84 50.000000,
85 0.999997,
86 0.999907,
87 356449.932732,
88 10803.280215,
89 28),
90 TestCase::Duration::QUICK);
92 50.000000,
93 200.000000,
94 15.999282,
95 15.976339,
96 356449.932732,
97 10803.280215,
98 30),
99 TestCase::Duration::QUICK);
101 50.000000,
102 500.000000,
103 99.971953,
104 99.082845,
105 356449.932732,
106 10803.280215,
107 30),
108 TestCase::Duration::QUICK);
109}
110
111/**
112 * @ingroup lte-test
113 * Static variable for test initialization
114 */
116
117/**
118 * TestCase Data
119 */
121 double d1,
122 double d2,
123 double dlSinr,
124 double ulSinr)
125 : TestCase("Test: " + name),
126 m_d1(d1),
127 m_d2(d2),
128 m_expectedDlSinrDb(10 * std::log10(dlSinr))
129{
130 NS_LOG_INFO("Creating LteInterferenceFrTestCase");
131}
132
136
137void
139{
140 NS_LOG_INFO(this << GetName());
141 NS_LOG_DEBUG("LteInterferenceHardFrTestCase");
142
144 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(false));
145
146 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
147 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
148 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
149 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(0.00005));
150
152 lteHelper->SetFfrAlgorithmType("ns3::LteFrHardAlgorithm");
153
154 lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
155
156 // Create Nodes: eNodeB and UE
157 NodeContainer enbNodes;
158 NodeContainer ueNodes1;
159 NodeContainer ueNodes2;
160 enbNodes.Create(2);
161 ueNodes1.Create(1);
162 ueNodes2.Create(1);
163 NodeContainer allNodes = NodeContainer(enbNodes, ueNodes1, ueNodes2);
164
165 // the topology is the following:
166 // d2
167 // UE1-----------eNB2
168 // | |
169 // d1| |d1
170 // | d2 |
171 // eNB1----------UE2
172 //
174 positionAlloc->Add(Vector(0.0, 0.0, 0.0)); // eNB1
175 positionAlloc->Add(Vector(m_d2, m_d1, 0.0)); // eNB2
176 positionAlloc->Add(Vector(0.0, m_d1, 0.0)); // UE1
177 positionAlloc->Add(Vector(m_d2, 0.0, 0.0)); // UE2
178 MobilityHelper mobility;
179 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
180 mobility.SetPositionAllocator(positionAlloc);
181 mobility.Install(allNodes);
182
183 // Create Devices and install them in the Nodes (eNB and UE)
184 NetDeviceContainer enbDevs;
185 NetDeviceContainer ueDevs1;
186 NetDeviceContainer ueDevs2;
187 lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");
188 lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
189
190 lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue(0));
191 lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue(12));
192 lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue(0));
193 lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue(25));
194 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(0)));
195
196 lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue(12));
197 lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue(12));
198 lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue(0));
199 lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue(25));
200 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(1)));
201
202 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
203 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
204
205 lteHelper->Attach(ueDevs1, enbDevs.Get(0));
206 lteHelper->Attach(ueDevs2, enbDevs.Get(1));
207
208 // Activate an EPS bearer
210 EpsBearer bearer(q);
211 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
212 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
213
214 // Use testing chunk processor in the PHY layer
215 // It will be used to test that the SNR is as intended
216 // we plug in two instances, one for DL and one for UL
217
218 Ptr<LtePhy> ue1Phy = ueDevs1.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
220 LteSpectrumValueCatcher dlSinr1Catcher;
221 testDlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr1Catcher));
222 ue1Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr1);
223
224 Ptr<LtePhy> enb1phy =
225 enbDevs.Get(0)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
227 LteSpectrumValueCatcher ulSinr1Catcher;
228 testUlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr1Catcher));
229 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr1);
230
231 // same as above for eNB2 and UE2
232
233 Ptr<LtePhy> ue2Phy = ueDevs2.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
235 LteSpectrumValueCatcher dlSinr2Catcher;
236 testDlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr2Catcher));
237 ue2Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr2);
238
239 Ptr<LtePhy> enb2phy =
240 enbDevs.Get(1)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
242 LteSpectrumValueCatcher ulSinr2Catcher;
243 testUlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr2Catcher));
244 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr2);
245
246 // need to allow for RRC connection establishment + SRS
247 Simulator::Stop(Seconds(0.200));
249
250 for (uint32_t i = 0; i < 12; i++)
251 {
252 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
253 double dlSinr1Db = 10.0 * std::log10(dlSinr1);
256 0.01,
257 "Wrong SINR in DL! (eNB1 --> UE1)");
258
259 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
260 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr2, 0, 0.01, "Wrong SINR in DL! (eNB2 --> UE2)");
261 }
262
263 for (uint32_t i = 12; i < 24; i++)
264 {
265 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
266 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr1, 0, 0.01, "Wrong SINR in DL! (eNB1 --> UE1)");
267
268 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
269 double dlSinr2Db = 10.0 * std::log10(dlSinr2);
272 0.01,
273 "Wrong SINR in DL! (eNB2 --> UE2)");
274 }
275
276 // FR algorithms do not operate in uplink now, so we do not test it
277 // double ulSinr1Db = 10.0 * std::log10 (testUlSinr1->GetValue ()->operator[] (0));
278 // NS_LOG_DEBUG("ulSinr1Db: "<< ulSinr1Db);
279 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr1Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE1 -->
280 // eNB1)");
281 //
282 // double ulSinr2Db = 10.0 * std::log10 (testUlSinr2->GetValue ()->operator[] (0));
283 // NS_LOG_DEBUG("ulSinr2Db: "<< ulSinr2Db);
284 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr2Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE2 -->
285 // eNB2)");
286
288}
289
291 double d1,
292 double d2,
293 double commonDlSinr,
294 double commonUlSinr,
295 double edgeDlSinr,
296 double edgeUlSinr,
297 uint32_t rspqThreshold)
298 : TestCase("Test: " + name),
299 m_d1(d1),
300 m_d2(d2),
301 m_commonDlSinrDb(10 * std::log10(commonDlSinr)),
302 m_edgeDlSinrDb(10 * std::log10(edgeDlSinr)),
303 m_rspqThreshold(rspqThreshold)
304{
305 NS_LOG_INFO("Creating LteInterferenceFrTestCase");
306}
307
311
312void
314{
315 NS_LOG_INFO(this << GetName());
316 NS_LOG_DEBUG("LteInterferenceStrictFrTestCase");
317
319 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
320
321 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
322 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
323 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
324 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(0.00005));
325
327 lteHelper->SetFfrAlgorithmType("ns3::LteFrStrictAlgorithm");
328 lteHelper->SetFfrAlgorithmAttribute("RsrqThreshold", UintegerValue(m_rspqThreshold));
329 lteHelper->SetFfrAlgorithmAttribute("CenterPowerOffset",
331 lteHelper->SetFfrAlgorithmAttribute("EdgePowerOffset",
333
334 lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
335
336 // Create Nodes: eNodeB and UE
337 NodeContainer enbNodes;
338 NodeContainer ueNodes1;
339 NodeContainer ueNodes2;
340 enbNodes.Create(2);
341 ueNodes1.Create(2);
342 ueNodes2.Create(2);
343 NodeContainer allNodes = NodeContainer(enbNodes, ueNodes1, ueNodes2);
344
345 // the topology is the following:
346 // d2
347 // UE1-----------eNB2
348 // | |
349 // d1| |d1
350 // | d2 |
351 // eNB1----------UE2
352 //
354 positionAlloc->Add(Vector(0.0, 0.0, 0.0)); // eNB1
355 positionAlloc->Add(Vector(m_d2, m_d1, 0.0)); // eNB2
356
357 positionAlloc->Add(Vector(0.0, m_d1, 0.0)); // UE1-eNB1
358 positionAlloc->Add(Vector(0.5 * m_d2, 0.0, 0.0)); // UE2-eNB1
359
360 positionAlloc->Add(Vector(m_d2, 0.0, 0.0)); // UE1-eNB2
361 positionAlloc->Add(Vector(0.5 * m_d2, m_d1, 0.0)); // UE2-eNB2
362
363 MobilityHelper mobility;
364 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
365 mobility.SetPositionAllocator(positionAlloc);
366 mobility.Install(allNodes);
367
368 // Create Devices and install them in the Nodes (eNB and UE)
369 NetDeviceContainer enbDevs;
370 NetDeviceContainer ueDevs1;
371 NetDeviceContainer ueDevs2;
372 lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");
373 lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
374
375 lteHelper->SetFfrAlgorithmAttribute("DlCommonSubBandwidth", UintegerValue(12));
376 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue(0));
377 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue(6));
378 lteHelper->SetFfrAlgorithmAttribute("UlCommonSubBandwidth", UintegerValue(25));
379 lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandOffset", UintegerValue(0));
380 lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandwidth", UintegerValue(0));
381
382 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(0)));
383
384 lteHelper->SetFfrAlgorithmAttribute("DlCommonSubBandwidth", UintegerValue(12));
385 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue(6));
386 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue(6));
387 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(1)));
388
389 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
390 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
391
392 lteHelper->Attach(ueDevs1, enbDevs.Get(0));
393 lteHelper->Attach(ueDevs2, enbDevs.Get(1));
394
395 // Activate an EPS bearer
397 EpsBearer bearer(q);
398 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
399 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
400
401 // Use testing chunk processor in the PHY layer
402 // It will be used to test that the SNR is as intended
403 // we plug in two instances, one for DL and one for UL
404
405 Ptr<LtePhy> ue1Phy = ueDevs1.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
407 LteSpectrumValueCatcher dlSinr1Catcher;
408 testDlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr1Catcher));
409 ue1Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr1);
410
411 Ptr<LtePhy> enb1phy =
412 enbDevs.Get(0)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
414 LteSpectrumValueCatcher ulSinr1Catcher;
415 testUlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr1Catcher));
416 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr1);
417
418 // same as above for eNB2 and UE2
419
420 Ptr<LtePhy> ue2Phy = ueDevs2.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
422 LteSpectrumValueCatcher dlSinr2Catcher;
423 testDlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr2Catcher));
424 ue2Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr2);
425
426 Ptr<LtePhy> enb2phy =
427 enbDevs.Get(1)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
429 LteSpectrumValueCatcher ulSinr2Catcher;
430 testUlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr2Catcher));
431 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr2);
432
433 // need to allow for UE Measurement report
434 Simulator::Stop(Seconds(2.000));
436
437 for (uint32_t i = 0; i < 12; i++)
438 {
439 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
440 double dlSinr1Db = 10.0 * std::log10(dlSinr1);
443 0.01,
444 "Wrong SINR in DL! (eNB1 --> UE1)");
445
446 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
447 double dlSinr2Db = 10.0 * std::log10(dlSinr2);
450 0.01,
451 "Wrong SINR in DL! (eNB2 --> UE2)");
452 }
453
454 for (uint32_t i = 12; i < 18; i++)
455 {
456 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
457 double dlSinr1Db = 10.0 * std::log10(dlSinr1);
460 0.01,
461 "Wrong SINR in DL! (eNB1 --> UE1)");
462
463 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
464 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr2, 0, 0.01, "Wrong SINR in DL! (eNB2 --> UE2)");
465 }
466
467 for (uint32_t i = 18; i < 24; i++)
468 {
469 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
470 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr1, 0, 0.01, "Wrong SINR in DL! (eNB1 --> UE1)");
471
472 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
473 double dlSinr2Db = 10.0 * std::log10(dlSinr2);
476 0.01,
477 "Wrong SINR in DL! (eNB2 --> UE2)");
478 }
479
480 // FR algorithms do not operate in uplink now, so we do not test it
481 // double ulSinr1Db = 10.0 * std::log10 (testUlSinr1->GetValue ()->operator[] (0));
482 // NS_LOG_DEBUG("ulSinr1Db: "<< ulSinr1Db);
483 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr1Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE1 -->
484 // eNB1)");
485 //
486 // double ulSinr2Db = 10.0 * std::log10 (testUlSinr2->GetValue ()->operator[] (0));
487 // NS_LOG_DEBUG("ulSinr2Db: "<< ulSinr2Db);
488 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr2Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE2 -->
489 // eNB2)");
490
492}
Test suite for the interference test when using different frequency reuse algorithms....
Lte interference test when using hard frequency reuse algorithm.
double m_expectedDlSinrDb
expected DL SINR in dB
void DoRun() override
Implementation to actually run this TestCase.
double m_d2
distance between UE and other ENB
double m_d1
distance between UE and ENB
LteInterferenceHardFrTestCase(std::string name, double d1, double d2, double dlSinr, double ulSinr)
Constructor.
Lte interference test when using strict frequency reuse algorithm.
double m_d1
distance between UE and ENB
void DoRun() override
Implementation to actually run this TestCase.
double m_commonDlSinrDb
expected common DL SINR in dB
double m_edgeDlSinrDb
expected edge DL SINR in dB
LteInterferenceStrictFrTestCase(std::string name, double d1, double d2, double commonDlSinr, double commonUlSinr, double edgeDlSinr, double edgeUlSinr, uint32_t rspqThreshold)
Constructor.
double m_d2
distance between UE and other ENB
AttributeValue implementation for Boolean.
Definition boolean.h:26
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition double.h:31
Hold variables of type enum.
Definition enum.h:52
This class contains the specification of EPS Bearers.
Definition eps-bearer.h:80
Qci
QoS Class Indicator.
Definition eps-bearer.h:95
@ GBR_CONV_VOICE
GBR Conversational Voice.
Definition eps-bearer.h:96
The eNodeB device implementation.
The LtePhy models the physical layer of LTE.
Definition lte-phy.h:40
A sink to be plugged to the callback of LteChunkProcessor allowing to save and later retrieve the lat...
Ptr< SpectrumValue > GetValue()
void ReportValue(const SpectrumValue &value)
function to be plugged to LteChunkProcessor::AddCallback ()
The LteUeNetDevice class implements the UE net device.
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.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition object.h:511
Smart pointer class similar to boost::intrusive_ptr.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition simulator.cc:131
static void Run()
Run the simulation.
Definition simulator.cc:167
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition simulator.cc:175
Hold variables of type string.
Definition string.h:45
encapsulates test code
Definition test.h:1050
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition test.cc:292
std::string GetName() const
Definition test.cc:367
A suite of tests to run.
Definition test.h:1267
Type
Type of test.
Definition test.h:1274
Hold an unsigned integer type.
Definition uinteger.h:34
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:848
void SetDefault(std::string name, const AttributeValue &value)
Definition config.cc:883
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition log.h:257
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition log.h:264
static LteInterferenceFrTestSuite LteInterferenceFrTestSuite
Static variable for test initialization.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition object.h:619
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
#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:327
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition nstime.h:1344
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition callback.h:684
STL namespace.