A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lte-test-phy-error-model.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011-2013 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/mobility-building-info.h>
33 #include <ns3/hybrid-buildings-propagation-loss-model.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/config.h>
47 #include <ns3/boolean.h>
48 #include <ns3/enum.h>
49 #include <ns3/integer.h>
50 #include <ns3/unused.h>
51 #include <ns3/ff-mac-scheduler.h>
52 #include <ns3/buildings-helper.h>
53 
55 
56 NS_LOG_COMPONENT_DEFINE ("LteTestPhyErrorModel");
57 
58 namespace ns3 {
59 
60 
62  : TestSuite ("lte-phy-error-model", SYSTEM)
63 {
64  NS_LOG_INFO ("creating LenaTestPhyErrorModelTestCase");
65 
66 
67  for (uint32_t rngRun = 1; rngRun <= 3; ++rngRun)
68  {
69 
70  // Tests on DL Control Channels (PCFICH+PDCCH)
71  // the tolerance is calculated with the following octave code:
72  //
73  // n = 1000; # TX packets
74  // for p=1-[0.007 0.045 0.206 0.343]
75  // tol = n*p - binoinv(0.001, n, p)
76  // endfor
77 
78  // 1 interfering eNB SINR -2.0 BLER 0.007 TB size 217
79  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (2, 1078, 0.007, 9,
80  Seconds (0.04), rngRun),
81  (rngRun == 1) ? TestCase::QUICK : TestCase::TAKES_FOREVER);
82  // 2 interfering eNBs SINR -4.0 BLER 0.037 TB size 217
83  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (3, 1040, 0.045, 21,
84  Seconds (0.04), rngRun),
85  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
86  // 3 interfering eNBs SINR -6.0 BLER 0.21 TB size 133
87  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (4, 1250, 0.206, 40,
88  Seconds (0.12), rngRun),
89  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
90  // 4 interfering eNBs SINR -7.0 BLER 0.34 TB size 133
91  AddTestCase (new LenaDlCtrlPhyErrorModelTestCase (5, 1260, 0.343, 47,
92  Seconds (0.12), rngRun),
93  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
94 
95  // Tests on DL Data channels (PDSCH)
96  // the tolerance is calculated with the following octave code:
97  //
98  // n = 1000; # TX packets
99  // for p=1-[0.33 0.11 0.2 0.3 0.55 0.14]
100  // tol = n*p - binoinv(0.005, n, p)
101  // endfor
102 
103  // MCS 2 TB size of 256 bits BLER 0.33 SINR -5.51
104  AddTestCase (new LenaDataPhyErrorModelTestCase (4, 1800, 0.33, 39,
105  Seconds (0.04), rngRun),
106  (rngRun == 1) ? TestCase::QUICK : TestCase::TAKES_FOREVER);
107  // MCS 2 TB size of 528 bits BLER 0.11 SINR -5.51
108  AddTestCase (new LenaDataPhyErrorModelTestCase (2, 1800, 0.11, 26,
109  Seconds (0.04), rngRun),
110  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
111  // MCS 2 TB size of 1088 bits BLER 0.02 SINR -5.51
112  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 1800, 0.02, 33,
113  Seconds (0.04), rngRun),
114  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
115  // MCS 12 TB size of 4800 bits BLER 0.3 SINR 4.43
116  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 600, 0.3, 38,
117  Seconds (0.04), rngRun),
118  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
119  // MCS 12 TB size of 1632 bits BLER 0.55 SINR 4.43
120  AddTestCase (new LenaDataPhyErrorModelTestCase (3, 600, 0.55, 40,
121  Seconds (0.04), rngRun),
122  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
123  // MCS 16 TB size of 7272 bits (3648 x 3584) BLER 0.14 SINR 8.48
124  // BLER 0.14 = 1 - ((1-0.075)*(1-0.075))
125  AddTestCase (new LenaDataPhyErrorModelTestCase (1, 470, 0.14, 29,
126  Seconds (0.04), rngRun),
127  (rngRun == 1) ? TestCase::EXTENSIVE : TestCase::TAKES_FOREVER);
128 
129  }
130 
131 }
132 
134 
135 std::string
136 LenaDataPhyErrorModelTestCase::BuildNameString (uint16_t nUser, uint16_t dist, uint32_t rngRun)
137 {
138  std::ostringstream oss;
139  oss << "DataPhyErrorModel " << nUser << " UEs, distance " << dist << " m, RngRun " << rngRun;
140  return oss.str ();
141 }
142 
144  uint16_t nUser, uint16_t dist, double blerRef,
145  uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
146  : TestCase (BuildNameString (nUser, dist, rngRun)),
147  m_nUser (nUser),
148  m_dist (dist),
149  m_blerRef (blerRef),
150  m_toleranceRxPackets (toleranceRxPackets),
151  m_statsStartTime (statsStartTime),
152  m_rngRun (rngRun)
153 {
154 }
155 
157 {
158 }
159 
160 void
162 {
163 
164  double ber = 0.03;
165  Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (ber));
166  Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
167  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
168  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (true));
169  Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
171 
172  /*
173  * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
174  */
175 
176  int64_t stream = 1;
177  Ptr<LteHelper> lena = CreateObject<LteHelper> ();
178 
179  // Create Nodes: eNodeB and UE
180  NodeContainer enbNodes;
181  NodeContainer ueNodes;
182  enbNodes.Create (1);
183  ueNodes.Create (m_nUser);
184 
185  // Install Mobility Model
186  MobilityHelper mobility;
187  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
188  mobility.Install (enbNodes);
189  BuildingsHelper::Install (enbNodes);
190  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
191  mobility.Install (ueNodes);
192  BuildingsHelper::Install (ueNodes);
193 
194  // remove random shadowing component
195  lena->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel"));
196  lena->SetPathlossModelAttribute ("ShadowSigmaOutdoor", DoubleValue (0.0));
197  lena->SetPathlossModelAttribute ("ShadowSigmaIndoor", DoubleValue (0.0));
198  lena->SetPathlossModelAttribute ("ShadowSigmaExtWalls", DoubleValue (0.0));
199 
200  // Create Devices and install them in the Nodes (eNB and UE)
201  NetDeviceContainer enbDevs;
202  NetDeviceContainer ueDevs;
203  lena->SetSchedulerType ("ns3::RrFfMacScheduler");
204  lena->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
205 
206  enbDevs = lena->InstallEnbDevice (enbNodes);
207  stream += lena->AssignStreams (enbDevs, stream);
208  ueDevs = lena->InstallUeDevice (ueNodes);
209  stream += lena->AssignStreams (ueDevs, stream);
210 
211  // Attach a UE to a eNB
212  lena->Attach (ueDevs, enbDevs.Get (0));
213 
214  // Activate an EPS bearer
216  EpsBearer bearer (q);
217  lena->ActivateDataRadioBearer (ueDevs, bearer);
218 
219 
220  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
221  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
222  enbPhy->SetAttribute ("TxPower", DoubleValue (43.0));
223  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
224  // place the HeNB over the default rooftop level (20 mt.)
225  Ptr<MobilityModel> mm = enbNodes.Get (0)->GetObject<MobilityModel> ();
226  mm->SetPosition (Vector (0.0, 0.0, 30.0));
227 
228  // Set UEs' position and power
229  for (int i = 0; i < m_nUser; i++)
230  {
231  Ptr<MobilityModel> mm = ueNodes.Get (i)->GetObject<MobilityModel> ();
232  mm->SetPosition (Vector (m_dist, 0.0, 1.0));
233  Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
234  Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
235  uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
236  uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
237  }
238 
239  Time statsDuration = Seconds (1.0);
240  Simulator::Stop (m_statsStartTime + statsDuration - Seconds (0.0001));
241 
242  lena->EnableRlcTraces ();
243  Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats ();
244  rlcStats->SetAttribute ("StartTime", TimeValue (m_statsStartTime));
245  rlcStats->SetAttribute ("EpochDuration", TimeValue (statsDuration));
246 
247  Simulator::Run ();
248 
249  NS_LOG_INFO ("\tTest downlink data shared channels (PDSCH)");
250  NS_LOG_INFO ("Test with " << m_nUser << " user(s) at distance " << m_dist << " expected BLER " << m_blerRef);
251  for (int i = 0; i < m_nUser; i++)
252  {
253  // get the imsi
254  uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
255  uint8_t lcId = 3;
256 
257  double dlRxPackets = rlcStats->GetDlRxPackets (imsi, lcId);
258  double dlTxPackets = rlcStats->GetDlTxPackets (imsi, lcId);
259  double dlBler = 1.0 - (dlRxPackets/dlTxPackets);
260  double expectedDlRxPackets = dlTxPackets -dlTxPackets*m_blerRef;
261  NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " DOWNLINK"
262  << " pkts rx " << dlRxPackets << " tx " << dlTxPackets
263  << " BLER " << dlBler << " Err " << std::fabs (m_blerRef - dlBler)
264  << " expected rx " << expectedDlRxPackets
265  << " difference " << std::abs (expectedDlRxPackets - dlRxPackets)
266  << " tolerance " << m_toleranceRxPackets);
267  NS_UNUSED (dlBler);
268 
269  // sanity check for whether the tx packets reported by the stats are correct
270  // we expect one packet per TTI
271  double expectedDlTxPackets = statsDuration.GetMilliSeconds ();
272  NS_TEST_ASSERT_MSG_EQ_TOL (dlTxPackets, expectedDlTxPackets, expectedDlTxPackets * 0.005,
273  " too different DL TX packets reported");
274 
275  // this is the main test condition: check that the RX packets are within the expected range
276  NS_TEST_ASSERT_MSG_EQ_TOL (dlRxPackets, expectedDlRxPackets, m_toleranceRxPackets,
277  " too different DL RX packets reported");
278  }
279 
280 
282 }
283 
284 
285 
286 
287 std::string
288 LenaDlCtrlPhyErrorModelTestCase::BuildNameString (uint16_t nEnb, uint16_t dist, uint32_t rngRun)
289 {
290  std::ostringstream oss;
291  oss << "DlCtrlPhyErrorModel " << nEnb << " eNBs, distance " << dist << " m, RngRun " << rngRun;
292  return oss.str ();
293 }
294 
295 
297  uint16_t nEnb, uint16_t dist, double blerRef,
298  uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
299  : TestCase (BuildNameString (nEnb, dist, rngRun)),
300  m_nEnb (nEnb),
301  m_dist (dist),
302  m_blerRef (blerRef),
303  m_toleranceRxPackets (toleranceRxPackets),
304  m_statsStartTime (statsStartTime),
305  m_rngRun (rngRun)
306 {
307 }
308 
310 {
311 }
312 
313 void
315 {
316 
317  double ber = 0.03;
318  Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (ber));
319  Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
320  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (true));
321  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
322  Config::SetDefault ("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue (false));
324 
325  /*
326  * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
327  */
328 
329  int64_t stream = 1;
330  Ptr<LteHelper> lena = CreateObject<LteHelper> ();
331 
332  // Create Nodes: eNodeB and UE
333  NodeContainer enbNodes;
334  NodeContainer ueNodes;
335  enbNodes.Create (m_nEnb);
336  ueNodes.Create (1);
337 
338  // Install Mobility Model
339  MobilityHelper mobility;
340  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
341  mobility.Install (enbNodes);
342  BuildingsHelper::Install (enbNodes);
343  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
344  mobility.Install (ueNodes);
345  BuildingsHelper::Install (ueNodes);
346 
347  // remove random shadowing component
348  lena->SetAttribute ("PathlossModel", StringValue ("ns3::HybridBuildingsPropagationLossModel"));
349  lena->SetPathlossModelAttribute ("ShadowSigmaOutdoor", DoubleValue (0.0));
350  lena->SetPathlossModelAttribute ("ShadowSigmaIndoor", DoubleValue (0.0));
351  lena->SetPathlossModelAttribute ("ShadowSigmaExtWalls", DoubleValue (0.0));
352 
353  // Create Devices and install them in the Nodes (eNB and UE)
354  NetDeviceContainer enbDevs;
355  NetDeviceContainer ueDevs;
356  lena->SetSchedulerType ("ns3::RrFfMacScheduler");
357  lena->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::PUSCH_UL_CQI));
358 
359  enbDevs = lena->InstallEnbDevice (enbNodes);
360  stream += lena->AssignStreams (enbDevs, stream);
361  ueDevs = lena->InstallUeDevice (ueNodes);
362  stream += lena->AssignStreams (ueDevs, stream);
363 
364  // Attach a UE to one eNB (the others are interfering ones)
365  lena->Attach (ueDevs, enbDevs.Get (0));
366 
367  // Activate an EPS bearer
369  EpsBearer bearer (q);
370  lena->ActivateDataRadioBearer (ueDevs, bearer);
371 
372  // Set UEs' position and power
373  for (int i = 0; i < m_nEnb; i++)
374  {
375  // place the HeNB over the default rooftop level (20 mt.)
376  Ptr<MobilityModel> mm = enbNodes.Get (i)->GetObject<MobilityModel> ();
377  mm->SetPosition (Vector (0.0, 0.0, 30.0));
378  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (i)->GetObject<LteEnbNetDevice> ();
379  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
380  enbPhy->SetAttribute ("TxPower", DoubleValue (43.0));
381  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
382  }
383 
384  // Set UEs' position and power
385  Ptr<MobilityModel> mm = ueNodes.Get (0)->GetObject<MobilityModel> ();
386  mm->SetPosition (Vector (m_dist, 0.0, 1.0));
387  Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (0)->GetObject<LteUeNetDevice> ();
388  Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
389  uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
390  uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
391 
392  Time statsDuration = Seconds (1.0);
393  Simulator::Stop (m_statsStartTime + statsDuration - Seconds (0.0001));
394 
395  lena->EnableRlcTraces ();
396  Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats ();
397  rlcStats->SetAttribute ("StartTime", TimeValue (m_statsStartTime));
398  rlcStats->SetAttribute ("EpochDuration", TimeValue (statsDuration));
399 
400  Simulator::Run ();
401 
402  NS_LOG_INFO ("\tTest downlink control channels (PCFICH+PDCCH)");
403  NS_LOG_INFO ("Test with " << m_nEnb << " eNB(s) at distance " << m_dist << " expected BLER " << m_blerRef);
404  int nUser = 1;
405  for (int i = 0; i < nUser; i++)
406  {
407  // get the imsi
408  uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
409  uint8_t lcId = 3;
410  double dlRxPackets = rlcStats->GetDlRxPackets (imsi, lcId);
411  double dlTxPackets = rlcStats->GetDlTxPackets (imsi, lcId);
412  double dlBler = 1.0 - (dlRxPackets/dlTxPackets);
413  double expectedDlRxPackets = dlTxPackets -dlTxPackets*m_blerRef;
414  NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " DOWNLINK"
415  << " pkts rx " << dlRxPackets << " tx " << dlTxPackets
416  << " BLER " << dlBler << " Err " << std::fabs (m_blerRef - dlBler)
417  << " expected rx " << expectedDlRxPackets
418  << " difference " << std::abs (expectedDlRxPackets - dlRxPackets)
419  << " tolerance " << m_toleranceRxPackets);
420  NS_UNUSED (dlBler);
421 
422  // sanity check for whether the tx packets reported by the stats are correct
423  // we expect one packet per TTI
424  double expectedDlTxPackets = statsDuration.GetMilliSeconds ();
425  NS_TEST_ASSERT_MSG_EQ_TOL (dlTxPackets, expectedDlTxPackets, expectedDlTxPackets * 0.005,
426  " too different DL TX packets reported");
427 
428  // this is the main test condition: check that the RX packets are within the expected range
429  NS_TEST_ASSERT_MSG_EQ_TOL (dlRxPackets, expectedDlRxPackets, m_toleranceRxPackets,
430  "too different DL RX packets reported");
431 
432  }
433 
435 }
436 
437 
438 } // namespace
keep track of time values and allow control of global simulation resolution
Definition: nstime.h:81
smart pointer class similar to boost::intrusive_ptr
Definition: ptr.h:59
Hold a bool native type.
Definition: boolean.h:38
virtual void DoRun(void)
Implementation to actually run this TestCase.
hold variables of type string
Definition: string.h:19
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
#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:326
NS_LOG_COMPONENT_DEFINE("LteTestPhyErrorModel")
A suite of tests to run.
Definition: test.h:1025
Very long running test.
Definition: test.h:859
static void Run(void)
Run the simulation until one of:
Definition: simulator.cc:157
Hold a signed integer type.
Definition: integer.h:45
#define NS_LOG_INFO(msg)
Definition: log.h:298
encapsulates test code
Definition: test.h:849
This system test program creates different test cases with a single eNB and several UEs...
a 3d vector
Definition: vector.h:31
static LenaTestPhyErrorModelSuite lenaTestPhyErrorModelSuite
Keep track of the current position and velocity of an object.
Time m_statsStartTime
Extra time in the beginning of simulation to allow RRC connection establishment + SRS...
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.
hold variables of type 'enum'
Definition: enum.h:37
hold objects of type ns3::Time
Definition: nstime.h:961
Time m_statsStartTime
Extra time in the beginning of simulation to allow RRC connection establishment + SRS...
virtual void DoRun(void)
Implementation to actually run this TestCase.
Medium length test.
Definition: test.h:858
holds a vector of ns3::NetDevice pointers
LenaDlCtrlPhyErrorModelTestCase(uint16_t nEnb, uint16_t dist, double blerRef, uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
Definition: simulator.cc:121
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:667
keep track of a set of node pointers.
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())
static std::string BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
LenaDataPhyErrorModelTestCase(uint16_t nUser, uint16_t dist, double blerRef, uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
Definition: test.cc:173
void SetPosition(const Vector &position)
Fast test.
Definition: test.h:857
Helper class used to assign positions and mobility models to nodes.
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
Definition: simulator.cc:165
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
#define NS_UNUSED(x)
Definition: unused.h:5
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Hold a floating point type.
Definition: double.h:41
The eNodeB device implementation.
Ptr< T > GetObject(void) const
Definition: object.h:361
void SetGlobal(std::string name, const AttributeValue &value)
Definition: config.cc:707
static std::string BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
int64_t GetMilliSeconds(void) const
Definition: nstime.h:283
Qci
QoS Class Indicator.
Definition: eps-bearer.h:77
static void Install(Ptr< Node > node)
Install the MobilityBuildingInfo to a node.
The LteUeNetDevice class implements the UE net device.