A Discrete-Event Network Simulator
API
lte-test-tta-ff-mac-scheduler.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 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  * Dizhi Zhou <dizhi.zhou@gmail.com>
21  */
22 
23 #include <iostream>
24 #include <sstream>
25 #include <string>
26 #include <ns3/object.h>
27 #include <ns3/spectrum-interference.h>
28 #include <ns3/spectrum-error-model.h>
29 #include <ns3/log.h>
30 #include <ns3/test.h>
31 #include <ns3/simulator.h>
32 #include <ns3/packet.h>
33 #include <ns3/ptr.h>
34 #include "ns3/radio-bearer-stats-calculator.h"
35 #include <ns3/constant-position-mobility-model.h>
36 #include <ns3/ff-mac-scheduler.h>
38 #include <ns3/eps-bearer.h>
39 #include <ns3/node-container.h>
40 #include <ns3/mobility-helper.h>
41 #include <ns3/net-device-container.h>
42 #include <ns3/lte-ue-net-device.h>
43 #include <ns3/lte-enb-net-device.h>
44 #include <ns3/lte-ue-rrc.h>
45 #include <ns3/lte-helper.h>
46 #include "ns3/string.h"
47 #include "ns3/double.h"
48 #include <ns3/lte-enb-phy.h>
49 #include <ns3/lte-ue-phy.h>
50 #include <ns3/boolean.h>
51 #include <ns3/enum.h>
52 
53 using namespace ns3;
54 
55 NS_LOG_COMPONENT_DEFINE ("LenaTestTtaFfMacScheduler");
56 
58  : TestSuite ("lte-tta-ff-mac-scheduler", SYSTEM)
59 {
60  NS_LOG_INFO ("creating LenaTestTtaFfMacSchedulerSuite");
61 
62  bool errorModel = false;
63 
64  //Test Case : AMC works in TTA
65 
66 
67  //Note: here the MCS is calculated by the narrowband CQI
68 
69  // DOWNLINK - DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
70  // 1 user -> 24 PRB at Itbs 26 -> 2196 -> 2196000 bytes/sec for one UE; 0 bytes/sec for other UEs
71  // 3 users -> 2196000 among 3 users -> 2196000 bytes/sec for one UE; 0 bytes/sec for other UEs
72  // 6 users -> 2196000 among 6 users -> 2196000 bytes/sec for one UE; 0 bytes/sec for other UEs
73  // 12 users -> 2196000 among 12 users -> 2196000 bytes/sec for one UE; 0 bytes/sec for other UEs
74  // UPLINK- DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
75  // 1 user -> 25 PRB at Itbs 26 -> 2292 -> 2292000 bytes/sec
76  // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 bytes/sec
77  // 6 users -> 4 PRB at Itbs 26 -> 373 -> 373000 bytes/sec
78  // after the patch enforcing min 3 PRBs per UE:
79  // 12 users -> 3 PRB at Itbs 26 -> 277 bytes * 8/12 UE/TTI -> 184670 bytes/sec
80  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,2196000,2292000, errorModel), TestCase::EXTENSIVE);
81  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,2196000,749000,errorModel), TestCase::QUICK);
82  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,2196000,373000, errorModel), TestCase::EXTENSIVE);
83  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,2196000,184670, errorModel), TestCase::EXTENSIVE);
84  AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,2196000,147730, errorModel), TestCase::EXTENSIVE);
85 
86  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
87  // 1 user -> 24 PRB at Itbs 15 -> 1383 -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
88  // 3 users -> 1383000 among 3 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
89  // 6 users -> 1383000 among 6 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
90  // 12 users -> 1383000 among 12 users -> 1383000 bytes/sec for one UE; 0 bytes/sec for other UEs
91  // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
92  // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 bytes/sec
93  // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 bytes/sec
94  // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 bytes/sec
95  // after the patch enforcing min 3 PRBs per UE:
96  // 12 users -> 3 PRB at Itbs 13 -> 93 bytes * 8/12 UE/TTI -> 62000 bytes/sec
97  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,4800,1383000,807000,errorModel), TestCase::EXTENSIVE);
98  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,4800,1383000,253000,errorModel), TestCase::EXTENSIVE);
99  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,4800,1383000,125000,errorModel), TestCase::EXTENSIVE);
100  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,4800,1383000,62000,errorModel), TestCase::EXTENSIVE);
101 
102 
103  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
104  // 1 user -> 24 PRB at Itbs 15 -> 1191 -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
105  // 3 users -> 1191000 among 3 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
106  // 6 users -> 1191000 among 6 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
107  // 12 users ->1191000 among 12 users -> 1191000 bytes/sec for one UE; 0 bytes/sec for other UEs
108  // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
109  // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
110  // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
111  // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
112  // after the patch enforcing min 3 PRBs per UE:
113  // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 bytes/sec
114  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,6000,1191000,621000, errorModel), TestCase::EXTENSIVE);
115  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,6000,1191000,201000, errorModel), TestCase::EXTENSIVE);
116  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,6000,1191000,97000, errorModel), TestCase::EXTENSIVE);
117  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,6000,1191000,48667, errorModel), TestCase::EXTENSIVE);
118 
119  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
120  // 1 user -> 24 PRB at Itbs 8 -> 775 -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
121  // 3 users -> 775000 among 3 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
122  // 6 users -> 775000 among 6 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
123  // 12 users -> 775000 among 12 users -> 775000 bytes/sec for one UE; 0 bytes/sec for other UEs
124  // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
125  // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec
126  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec
127  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
128  // after the patch enforcing min 3 PRBs per UE:
129  // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 bytes/sec
130  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,10000,775000,437000,errorModel), TestCase::EXTENSIVE);
131  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,10000,775000,137000,errorModel), TestCase::EXTENSIVE);
132  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,10000,775000,67000,errorModel), TestCase::EXTENSIVE);
133  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,10000,775000,32667,errorModel), TestCase::EXTENSIVE);
134 
135  // DONWLINK - DISTANCE 20000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
136  // 1 user -> 24 PRB at Itbs 8 -> 421 -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
137  // 3 users -> 421000 among 3 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
138  // 6 users -> 421000 among 6 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
139  // 12 users -> 421000 among 12 users -> 421000 bytes/sec for one UE; 0 bytes/sec for other UEs
140  // UPLINK - DISTANCE 20000 -> MCS 2 -> Itbs 2 (from table 7.1.7.2.1-1 of 36.213)
141  // 1 user -> 25 PRB at Itbs 2 -> 233 -> 137000 bytes/sec
142  // 3 users -> 8 PRB at Itbs 2 -> 69 -> 41000 bytes/sec
143  // 6 users -> 4 PRB at Itbs 2 -> 32 -> 22000 bytes/sec
144  // after the patch enforcing min 3 PRBs per UE:
145  // 12 users -> 3 PRB at Itbs 2 -> 26 bytes * 8/12 UE/TTI -> 12000 bytes/sec
146  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,20000,421000,137000,errorModel), TestCase::EXTENSIVE);
147  AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,20000,421000,41000,errorModel), TestCase::EXTENSIVE);
148  AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,20000,421000,22000,errorModel), TestCase::EXTENSIVE);
149  AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,20000,421000,12000,errorModel), TestCase::EXTENSIVE);
150 
151  // DOWNLINK - DISTANCE 100000 -> CQI == 0 -> out of range -> 0 bytes/sec
152  // UPLINK - DISTANCE 100000 -> CQI == 0 -> out of range -> 0 bytes/sec
153  AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,100000,0,0,errorModel), TestCase::QUICK);
154 }
155 
157 
158 
159 // --------------- T E S T - C A S E ------------------------------
160 
161 std::string
163 {
164  std::ostringstream oss;
165  oss << nUser << " UEs, distance " << dist << " m";
166  return oss.str ();
167 }
168 
169 LenaTtaFfMacSchedulerTestCase::LenaTtaFfMacSchedulerTestCase (uint16_t nUser, double dist, double thrRefDl, double thrRefUl, bool errorModelEnabled)
170  : TestCase (BuildNameString (nUser, dist)),
171  m_nUser (nUser),
172  m_dist (dist),
173  m_thrRefDl (thrRefDl),
174  m_thrRefUl (thrRefUl),
175  m_errorModelEnabled (errorModelEnabled)
176 {
177 }
178 
180 {
181 }
182 
183 
184 void
186 {
187 
188  NS_LOG_FUNCTION (this << m_nUser << m_dist);
189 
190  if (!m_errorModelEnabled)
191  {
192  Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
193  Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
194  }
195 
196  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
197  Config::SetDefault ("ns3::MacStatsCalculator::DlOutputFilename", StringValue (CreateTempDirFilename ("DlMacStats.txt")));
198  Config::SetDefault ("ns3::MacStatsCalculator::UlOutputFilename", StringValue (CreateTempDirFilename ("UlMacStats.txt")));
199  Config::SetDefault ("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename", StringValue (CreateTempDirFilename ("DlRlcStats.txt")));
200  Config::SetDefault ("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename", StringValue (CreateTempDirFilename ("UlRlcStats.txt")));
201 
202  //Disable Uplink Power Control
203  Config::SetDefault ("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue (false));
204 
209  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
210  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
211 
212  // Create Nodes: eNodeB and UE
213  NodeContainer enbNodes;
214  NodeContainer ueNodes;
215  enbNodes.Create (1);
216  ueNodes.Create (m_nUser);
217 
218  // Install Mobility Model
220  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
221  mobility.Install (enbNodes);
222  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
223  mobility.Install (ueNodes);
224 
225  // Create Devices and install them in the Nodes (eNB and UE)
226  NetDeviceContainer enbDevs;
227  NetDeviceContainer ueDevs;
228  lteHelper->SetSchedulerType ("ns3::TtaFfMacScheduler");
229  lteHelper->SetSchedulerAttribute ("UlCqiFilter", EnumValue (FfMacScheduler::SRS_UL_CQI));
230  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
231  ueDevs = lteHelper->InstallUeDevice (ueNodes);
232 
233  // Attach a UE to a eNB
234  lteHelper->Attach (ueDevs, enbDevs.Get (0));
235 
236  // Activate an EPS bearer
237  enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
238  EpsBearer bearer (q);
239  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
240 
241 
242  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
243  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
244  enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
245  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
246 
247  // Set UEs' position and power
248  for (int i = 0; i < m_nUser; i++)
249  {
251  mm->SetPosition (Vector (m_dist, 0.0, 0.0));
252  Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
253  Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
254  uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
255  uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
256  }
257 
258 
259  double statsStartTime = 0.300; // need to allow for RRC connection establishment + SRS
260  double statsDuration = 0.6;
261  double tolerance = 0.1;
262  Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.000001));
263 
264  lteHelper->EnableMacTraces ();
265  lteHelper->EnableRlcTraces ();
266  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
267  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
268  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
269 
270 
271  Simulator::Run ();
272 
276  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
277  std::vector <uint64_t> dlDataRxed;
278  for (int i = 0; i < m_nUser; i++)
279  {
280  // get the imsi
281  uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
282  uint8_t lcId = 3;
283  dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
284  NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << " thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_thrRefDl);
285  }
286 
292  uint8_t found = 0;
293  for (int i = 0; i < m_nUser; i++)
294  {
295  double throughput = (double)dlDataRxed.at (i) / statsDuration;
296  if (throughput != 0 && found == 0)
297  {
298  NS_TEST_ASSERT_MSG_EQ_TOL (throughput, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
299  found = 1;
300  }
301  else if (throughput != 0 && found == 1)
302  {
303  NS_TEST_ASSERT_MSG_EQ_TOL (0, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
304  }
305  else
306  NS_TEST_ASSERT_MSG_EQ_TOL (throughput, 0, 0, " Unfair Throughput!");
307  }
308 
312  NS_LOG_INFO ("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
313  std::vector <uint64_t> ulDataRxed;
314  for (int i = 0; i < m_nUser; i++)
315  {
316  // get the imsi
317  uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
318  // get the lcId
319  uint8_t lcId = 3;
320  ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
321  NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / statsDuration << " ref " << m_thrRefUl);
322  }
329  for (int i = 0; i < m_nUser; i++)
330  {
331  NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / statsDuration, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
332  }
333  Simulator::Destroy ();
334 
335 }
336 
Lena Test Tta Ff Mac Scheduler Suite.
This system test program creates different test cases with a single eNB and several UEs,...
double m_dist
the distance between nodes
double m_thrRefUl
the UL throughput reference
LenaTtaFfMacSchedulerTestCase(uint16_t nUser, double dist, double thrRefDl, double thrRefUl, bool errorModelEnabled)
Constructor.
virtual void DoRun(void)
Implementation to actually run this TestCase.
bool m_errorModelEnabled
is error model enabled?
static std::string BuildNameString(uint16_t nUser, double dist)
Build name string.
double m_thrRefDl
the DL throughput reference
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Mobility model for which the current position does not change once it has been set and until it is se...
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:41
Hold variables of type enum.
Definition: enum.h:55
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:92
Qci
QoS Class Indicator.
Definition: eps-bearer.h:107
The eNodeB device implementation.
Ptr< LteEnbPhy > GetPhy(void) const
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
Set an attribute for the scheduler to be created.
Definition: lte-helper.cc:293
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:474
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
Definition: lte-helper.cc:1572
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Definition: lte-helper.cc:279
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:959
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
Definition: lte-helper.cc:1435
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
Definition: lte-helper.cc:1313
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:489
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
Definition: lte-helper.cc:1529
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
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.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Definition: object-base.cc:256
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:470
Hold variables of type string.
Definition: string.h:41
encapsulates test code
Definition: test.h:994
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:430
A suite of tests to run.
Definition: test.h:1188
AttributeValue implementation for Time.
Definition: nstime.h:1308
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:849
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
#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:323
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
static LenaTestTtaFfMacSchedulerSuite lenaTestTtaFfMacSchedulerSuite
Every class exported by the ns3 library is enclosed in the ns3 namespace.
mobility
Definition: third.py:108