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 * 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 * Based on lte-test-interference.{h,cc} by Manuel Requena <manuel.requena@cttc.es>
19 * Nicola Baldo
20 * <nbaldo@cttc.es>
21 */
22
24
26
27#include "ns3/boolean.h"
28#include "ns3/double.h"
29#include "ns3/ff-mac-scheduler.h"
30#include "ns3/log.h"
31#include "ns3/lte-enb-net-device.h"
32#include "ns3/lte-enb-phy.h"
33#include "ns3/lte-helper.h"
34#include "ns3/lte-spectrum-value-helper.h"
35#include "ns3/lte-ue-net-device.h"
36#include "ns3/lte-ue-phy.h"
37#include "ns3/mobility-helper.h"
38#include "ns3/simulator.h"
39#include "ns3/spectrum-value.h"
40#include "ns3/string.h"
41#include <ns3/enum.h>
42#include <ns3/lte-chunk-processor.h>
43#include <ns3/pointer.h>
44
45using namespace ns3;
46
47NS_LOG_COMPONENT_DEFINE("LteInterferenceFrTest");
48
54 : TestSuite("lte-interference-fr", SYSTEM)
55{
56 // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_DEBUG);
57 // LogComponentEnable ("LteInterferenceFrTest", logLevel);
58
60 50.000000,
61 20.000000,
62 356449.932732,
63 10803.280215),
66 50.000000,
67 50.000000,
68 356449.932732,
69 10803.280215),
72 50.000000,
73 200.000000,
74 356449.932732,
75 10803.280215),
78 50.000000,
79 500.000000,
80 356449.932732,
81 10803.280215),
83
85 50.000000,
86 20.000000,
87 0.160000,
88 0.159998,
89 356449.932732,
90 10803.280215,
91 18),
94 50.000000,
95 50.000000,
96 0.999997,
97 0.999907,
98 356449.932732,
99 10803.280215,
100 28),
103 50.000000,
104 200.000000,
105 15.999282,
106 15.976339,
107 356449.932732,
108 10803.280215,
109 30),
112 50.000000,
113 500.000000,
114 99.971953,
115 99.082845,
116 356449.932732,
117 10803.280215,
118 30),
120}
121
127
132 double d1,
133 double d2,
134 double dlSinr,
135 double ulSinr)
136 : TestCase("Test: " + name),
137 m_d1(d1),
138 m_d2(d2),
139 m_expectedDlSinrDb(10 * std::log10(dlSinr))
140{
141 NS_LOG_INFO("Creating LteInterferenceFrTestCase");
142}
143
145{
146}
147
148void
150{
151 NS_LOG_INFO(this << GetName());
152 NS_LOG_DEBUG("LteInterferenceHardFrTestCase");
153
155 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(false));
156
157 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
158 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
159 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
160 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(0.00005));
161
162 Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
163 lteHelper->SetFfrAlgorithmType("ns3::LteFrHardAlgorithm");
164
165 lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
166
167 // Create Nodes: eNodeB and UE
168 NodeContainer enbNodes;
169 NodeContainer ueNodes1;
170 NodeContainer ueNodes2;
171 enbNodes.Create(2);
172 ueNodes1.Create(1);
173 ueNodes2.Create(1);
174 NodeContainer allNodes = NodeContainer(enbNodes, ueNodes1, ueNodes2);
175
176 // the topology is the following:
177 // d2
178 // UE1-----------eNB2
179 // | |
180 // d1| |d1
181 // | d2 |
182 // eNB1----------UE2
183 //
184 Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
185 positionAlloc->Add(Vector(0.0, 0.0, 0.0)); // eNB1
186 positionAlloc->Add(Vector(m_d2, m_d1, 0.0)); // eNB2
187 positionAlloc->Add(Vector(0.0, m_d1, 0.0)); // UE1
188 positionAlloc->Add(Vector(m_d2, 0.0, 0.0)); // UE2
189 MobilityHelper mobility;
190 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
191 mobility.SetPositionAllocator(positionAlloc);
192 mobility.Install(allNodes);
193
194 // Create Devices and install them in the Nodes (eNB and UE)
195 NetDeviceContainer enbDevs;
196 NetDeviceContainer ueDevs1;
197 NetDeviceContainer ueDevs2;
198 lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");
199 lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
200
201 lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue(0));
202 lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue(12));
203 lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue(0));
204 lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue(25));
205 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(0)));
206
207 lteHelper->SetFfrAlgorithmAttribute("DlSubBandOffset", UintegerValue(12));
208 lteHelper->SetFfrAlgorithmAttribute("DlSubBandwidth", UintegerValue(12));
209 lteHelper->SetFfrAlgorithmAttribute("UlSubBandOffset", UintegerValue(0));
210 lteHelper->SetFfrAlgorithmAttribute("UlSubBandwidth", UintegerValue(25));
211 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(1)));
212
213 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
214 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
215
216 lteHelper->Attach(ueDevs1, enbDevs.Get(0));
217 lteHelper->Attach(ueDevs2, enbDevs.Get(1));
218
219 // Activate an EPS bearer
221 EpsBearer bearer(q);
222 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
223 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
224
225 // Use testing chunk processor in the PHY layer
226 // It will be used to test that the SNR is as intended
227 // we plug in two instances, one for DL and one for UL
228
229 Ptr<LtePhy> ue1Phy = ueDevs1.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
230 Ptr<LteChunkProcessor> testDlSinr1 = Create<LteChunkProcessor>();
231 LteSpectrumValueCatcher dlSinr1Catcher;
232 testDlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr1Catcher));
233 ue1Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr1);
234
235 Ptr<LtePhy> enb1phy =
236 enbDevs.Get(0)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
237 Ptr<LteChunkProcessor> testUlSinr1 = Create<LteChunkProcessor>();
238 LteSpectrumValueCatcher ulSinr1Catcher;
239 testUlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr1Catcher));
240 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr1);
241
242 // same as above for eNB2 and UE2
243
244 Ptr<LtePhy> ue2Phy = ueDevs2.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
245 Ptr<LteChunkProcessor> testDlSinr2 = Create<LteChunkProcessor>();
246 LteSpectrumValueCatcher dlSinr2Catcher;
247 testDlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr2Catcher));
248 ue2Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr2);
249
250 Ptr<LtePhy> enb2phy =
251 enbDevs.Get(1)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
252 Ptr<LteChunkProcessor> testUlSinr2 = Create<LteChunkProcessor>();
253 LteSpectrumValueCatcher ulSinr2Catcher;
254 testUlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr2Catcher));
255 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr2);
256
257 // need to allow for RRC connection establishment + SRS
258 Simulator::Stop(Seconds(0.200));
260
261 for (uint32_t i = 0; i < 12; i++)
262 {
263 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
264 double dlSinr1Db = 10.0 * std::log10(dlSinr1);
267 0.01,
268 "Wrong SINR in DL! (eNB1 --> UE1)");
269
270 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
271 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr2, 0, 0.01, "Wrong SINR in DL! (eNB2 --> UE2)");
272 }
273
274 for (uint32_t i = 12; i < 24; i++)
275 {
276 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
277 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr1, 0, 0.01, "Wrong SINR in DL! (eNB1 --> UE1)");
278
279 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
280 double dlSinr2Db = 10.0 * std::log10(dlSinr2);
283 0.01,
284 "Wrong SINR in DL! (eNB2 --> UE2)");
285 }
286
287 // FR algorithms do not operate in uplink now, so we do not test it
288 // double ulSinr1Db = 10.0 * std::log10 (testUlSinr1->GetValue ()->operator[] (0));
289 // NS_LOG_DEBUG("ulSinr1Db: "<< ulSinr1Db);
290 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr1Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE1 -->
291 // eNB1)");
292 //
293 // double ulSinr2Db = 10.0 * std::log10 (testUlSinr2->GetValue ()->operator[] (0));
294 // NS_LOG_DEBUG("ulSinr2Db: "<< ulSinr2Db);
295 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr2Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE2 -->
296 // eNB2)");
297
299}
300
302 double d1,
303 double d2,
304 double commonDlSinr,
305 double commonUlSinr,
306 double edgeDlSinr,
307 double edgeUlSinr,
308 uint32_t rspqThreshold)
309 : TestCase("Test: " + name),
310 m_d1(d1),
311 m_d2(d2),
312 m_commonDlSinrDb(10 * std::log10(commonDlSinr)),
313 m_edgeDlSinrDb(10 * std::log10(edgeDlSinr)),
314 m_rspqThreshold(rspqThreshold)
315{
316 NS_LOG_INFO("Creating LteInterferenceFrTestCase");
317}
318
320{
321}
322
323void
325{
326 NS_LOG_INFO(this << GetName());
327 NS_LOG_DEBUG("LteInterferenceStrictFrTestCase");
328
330 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
331
332 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
333 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
334 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
335 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(0.00005));
336
337 Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
338 lteHelper->SetFfrAlgorithmType("ns3::LteFrStrictAlgorithm");
339 lteHelper->SetFfrAlgorithmAttribute("RsrqThreshold", UintegerValue(m_rspqThreshold));
340 lteHelper->SetFfrAlgorithmAttribute("CenterPowerOffset",
342 lteHelper->SetFfrAlgorithmAttribute("EdgePowerOffset",
344
345 lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
346
347 // Create Nodes: eNodeB and UE
348 NodeContainer enbNodes;
349 NodeContainer ueNodes1;
350 NodeContainer ueNodes2;
351 enbNodes.Create(2);
352 ueNodes1.Create(2);
353 ueNodes2.Create(2);
354 NodeContainer allNodes = NodeContainer(enbNodes, ueNodes1, ueNodes2);
355
356 // the topology is the following:
357 // d2
358 // UE1-----------eNB2
359 // | |
360 // d1| |d1
361 // | d2 |
362 // eNB1----------UE2
363 //
364 Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
365 positionAlloc->Add(Vector(0.0, 0.0, 0.0)); // eNB1
366 positionAlloc->Add(Vector(m_d2, m_d1, 0.0)); // eNB2
367
368 positionAlloc->Add(Vector(0.0, m_d1, 0.0)); // UE1-eNB1
369 positionAlloc->Add(Vector(0.5 * m_d2, 0.0, 0.0)); // UE2-eNB1
370
371 positionAlloc->Add(Vector(m_d2, 0.0, 0.0)); // UE1-eNB2
372 positionAlloc->Add(Vector(0.5 * m_d2, m_d1, 0.0)); // UE2-eNB2
373
374 MobilityHelper mobility;
375 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
376 mobility.SetPositionAllocator(positionAlloc);
377 mobility.Install(allNodes);
378
379 // Create Devices and install them in the Nodes (eNB and UE)
380 NetDeviceContainer enbDevs;
381 NetDeviceContainer ueDevs1;
382 NetDeviceContainer ueDevs2;
383 lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");
384 lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
385
386 lteHelper->SetFfrAlgorithmAttribute("DlCommonSubBandwidth", UintegerValue(12));
387 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue(0));
388 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue(6));
389 lteHelper->SetFfrAlgorithmAttribute("UlCommonSubBandwidth", UintegerValue(25));
390 lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandOffset", UintegerValue(0));
391 lteHelper->SetFfrAlgorithmAttribute("UlEdgeSubBandwidth", UintegerValue(0));
392
393 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(0)));
394
395 lteHelper->SetFfrAlgorithmAttribute("DlCommonSubBandwidth", UintegerValue(12));
396 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandOffset", UintegerValue(6));
397 lteHelper->SetFfrAlgorithmAttribute("DlEdgeSubBandwidth", UintegerValue(6));
398 enbDevs.Add(lteHelper->InstallEnbDevice(enbNodes.Get(1)));
399
400 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
401 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
402
403 lteHelper->Attach(ueDevs1, enbDevs.Get(0));
404 lteHelper->Attach(ueDevs2, enbDevs.Get(1));
405
406 // Activate an EPS bearer
408 EpsBearer bearer(q);
409 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
410 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
411
412 // Use testing chunk processor in the PHY layer
413 // It will be used to test that the SNR is as intended
414 // we plug in two instances, one for DL and one for UL
415
416 Ptr<LtePhy> ue1Phy = ueDevs1.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
417 Ptr<LteChunkProcessor> testDlSinr1 = Create<LteChunkProcessor>();
418 LteSpectrumValueCatcher dlSinr1Catcher;
419 testDlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr1Catcher));
420 ue1Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr1);
421
422 Ptr<LtePhy> enb1phy =
423 enbDevs.Get(0)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
424 Ptr<LteChunkProcessor> testUlSinr1 = Create<LteChunkProcessor>();
425 LteSpectrumValueCatcher ulSinr1Catcher;
426 testUlSinr1->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr1Catcher));
427 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr1);
428
429 // same as above for eNB2 and UE2
430
431 Ptr<LtePhy> ue2Phy = ueDevs2.Get(0)->GetObject<LteUeNetDevice>()->GetPhy()->GetObject<LtePhy>();
432 Ptr<LteChunkProcessor> testDlSinr2 = Create<LteChunkProcessor>();
433 LteSpectrumValueCatcher dlSinr2Catcher;
434 testDlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &dlSinr2Catcher));
435 ue2Phy->GetDownlinkSpectrumPhy()->AddDataSinrChunkProcessor(testDlSinr2);
436
437 Ptr<LtePhy> enb2phy =
438 enbDevs.Get(1)->GetObject<LteEnbNetDevice>()->GetPhy()->GetObject<LtePhy>();
439 Ptr<LteChunkProcessor> testUlSinr2 = Create<LteChunkProcessor>();
440 LteSpectrumValueCatcher ulSinr2Catcher;
441 testUlSinr2->AddCallback(MakeCallback(&LteSpectrumValueCatcher::ReportValue, &ulSinr2Catcher));
442 enb1phy->GetUplinkSpectrumPhy()->AddDataSinrChunkProcessor(testUlSinr2);
443
444 // need to allow for UE Measurement report
445 Simulator::Stop(Seconds(2.000));
447
448 for (uint32_t i = 0; i < 12; i++)
449 {
450 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
451 double dlSinr1Db = 10.0 * std::log10(dlSinr1);
454 0.01,
455 "Wrong SINR in DL! (eNB1 --> UE1)");
456
457 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
458 double dlSinr2Db = 10.0 * std::log10(dlSinr2);
461 0.01,
462 "Wrong SINR in DL! (eNB2 --> UE2)");
463 }
464
465 for (uint32_t i = 12; i < 18; i++)
466 {
467 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
468 double dlSinr1Db = 10.0 * std::log10(dlSinr1);
471 0.01,
472 "Wrong SINR in DL! (eNB1 --> UE1)");
473
474 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
475 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr2, 0, 0.01, "Wrong SINR in DL! (eNB2 --> UE2)");
476 }
477
478 for (uint32_t i = 18; i < 24; i++)
479 {
480 double dlSinr1 = dlSinr1Catcher.GetValue()->operator[](i);
481 NS_TEST_ASSERT_MSG_EQ_TOL(dlSinr1, 0, 0.01, "Wrong SINR in DL! (eNB1 --> UE1)");
482
483 double dlSinr2 = dlSinr2Catcher.GetValue()->operator[](i);
484 double dlSinr2Db = 10.0 * std::log10(dlSinr2);
487 0.01,
488 "Wrong SINR in DL! (eNB2 --> UE2)");
489 }
490
491 // FR algorithms do not operate in uplink now, so we do not test it
492 // double ulSinr1Db = 10.0 * std::log10 (testUlSinr1->GetValue ()->operator[] (0));
493 // NS_LOG_DEBUG("ulSinr1Db: "<< ulSinr1Db);
494 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr1Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE1 -->
495 // eNB1)");
496 //
497 // double ulSinr2Db = 10.0 * std::log10 (testUlSinr2->GetValue ()->operator[] (0));
498 // NS_LOG_DEBUG("ulSinr2Db: "<< ulSinr2Db);
499 // NS_TEST_ASSERT_MSG_EQ_TOL (ulSinr2Db, m_expectedUlSinrDb, 0.01, "Wrong SINR in UL! (UE2 -->
500 // eNB2)");
501
503}
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:37
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
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
@ GBR_CONV_VOICE
GBR Conversational Voice.
Definition: eps-bearer.h:107
@ PiroEW2010
Definition: lte-amc.h:63
The eNodeB device implementation.
The LtePhy models the physical layer of LTE.
Definition: lte-phy.h:51
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:471
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:140
static void Run()
Run the simulation.
Definition: simulator.cc:176
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:184
Hold variables of type string.
Definition: string.h:56
encapsulates test code
Definition: test.h:1060
@ QUICK
Fast test.
Definition: test.h:1065
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
std::string GetName() const
Definition: test.cc:373
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
#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
static LteInterferenceFrTestSuite LteInterferenceFrTestSuite
Static variable for test initialization.
#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:337
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1336
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:702
STL namespace.