A Discrete-Event Network Simulator
API
lte-test-pss-ff-mac-scheduler.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
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: Marco Miozzo <marco.miozzo@cttc.es>,
18  * Nicola Baldo <nbaldo@cttc.es>
19  * Dizhi Zhou <dizhi.zhou@gmail.com>
20  */
21 
23 
24 #include "ns3/double.h"
25 #include "ns3/internet-module.h"
26 #include "ns3/ipv4-global-routing-helper.h"
27 #include "ns3/network-module.h"
28 #include "ns3/packet-sink-helper.h"
29 #include "ns3/point-to-point-epc-helper.h"
30 #include "ns3/point-to-point-helper.h"
31 #include "ns3/radio-bearer-stats-calculator.h"
32 #include "ns3/string.h"
33 #include "ns3/udp-client-server-helper.h"
34 #include <ns3/boolean.h>
35 #include <ns3/constant-position-mobility-model.h>
36 #include <ns3/enum.h>
37 #include <ns3/eps-bearer.h>
38 #include <ns3/ff-mac-scheduler.h>
39 #include <ns3/log.h>
40 #include <ns3/lte-enb-net-device.h>
41 #include <ns3/lte-enb-phy.h>
42 #include <ns3/lte-helper.h>
43 #include <ns3/lte-ue-net-device.h>
44 #include <ns3/lte-ue-phy.h>
45 #include <ns3/lte-ue-rrc.h>
46 #include <ns3/mobility-helper.h>
47 #include <ns3/net-device-container.h>
48 #include <ns3/node-container.h>
49 #include <ns3/object.h>
50 #include <ns3/packet.h>
51 #include <ns3/ptr.h>
52 #include <ns3/simulator.h>
53 #include <ns3/spectrum-error-model.h>
54 #include <ns3/spectrum-interference.h>
55 #include <ns3/test.h>
56 
57 #include <iostream>
58 #include <sstream>
59 #include <string>
60 
61 using namespace ns3;
62 
63 NS_LOG_COMPONENT_DEFINE("LenaTestPssFfMacScheduler");
64 
66  : TestSuite("lte-pss-ff-mac-scheduler", SYSTEM)
67 {
68  NS_LOG_INFO("creating LenaTestPssFfMacSchedulerSuite");
69 
70  bool errorModel = false;
71 
72  // General config
73  // Traffic: UDP traffic with fixed rate
74  // Token generation rate = traffic rate
75  // RLC header length = 2 bytes, PDCP header = 2 bytes
76  // Simulation time = 1.0 sec
77  // Throughput in this file is calculated in RLC layer
78 
79  // Test Case 1: homogeneous flow test in PSS (same distance)
80  // DOWNLINK -> DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.2 13)
81  // Traffic info
82  // UDP traffic: payload size = 200 bytes, interval = 1 ms
83  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) *
84  // 1000 byte/sec -> 232000 byte/rate
85  // Total bandwidth: 24 PRB at Itbs 26 -> 2196 -> 2196000 byte/sec
86  // 1 user -> 232000 * 1 = 232000 < 2196000 -> throughput = 232000 byte/sec
87  // 3 user -> 232000 * 3 = 696000 < 2196000 -> througphut = 232000 byte/sec
88  // 6 user -> 232000 * 6 = 139200 < 2196000 -> throughput = 232000 byte/sec
89  // 12 user -> 232000 * 12 = 2784000 > 2196000 -> throughput = 2196000 / 12 = 183000 byte/sec
90  // UPLINK -> DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.2 13)
91  // 1 user -> 25 PRB at Itbs 26 -> 2292 -> 2292000 > 232000 -> throughput = 232000 bytes/sec
92  // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 > 232000 -> throughput = 232000 bytes/sec
93  // 6 users -> 4 PRB at Itbs 26 -> 373 -> 373000 > 232000 -> throughput = 232000 bytes/sec
94  // 12 users -> 2 PRB at Itbs 26 -> 185 -> 185000 < 232000 -> throughput = 185000 bytes/sec
95  AddTestCase(new LenaPssFfMacSchedulerTestCase1(1, 0, 232000, 232000, 200, 1, errorModel),
96  TestCase::EXTENSIVE);
97  AddTestCase(new LenaPssFfMacSchedulerTestCase1(3, 0, 232000, 232000, 200, 1, errorModel),
98  TestCase::EXTENSIVE);
99  AddTestCase(new LenaPssFfMacSchedulerTestCase1(6, 0, 232000, 232000, 200, 1, errorModel),
100  TestCase::EXTENSIVE);
101 
102  // AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,0,183000,185000,200,1,errorModel));//
103  // simulation time = 1.5, otherwise, ul test will fail
104 
105  // DOWNLINK - DISTANCE 4800 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
106  // Traffic info
107  // UDP traffic: payload size = 200 bytes, interval = 1 ms
108  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
109  // byte/sec -> 232000 byte/rate
110  // Total bandwidth: 24 PRB at Itbs 20 -> 1383 -> 1383000 byte/sec
111  // 1 user -> 903000 * 1 = 232000 < 1383000 -> throughput = 232000 byte/sec
112  // 3 user -> 232000 * 3 = 696000 < 1383000 -> througphut = 232000 byte/sec
113  // 6 user -> 232000 * 6 = 139200 > 1383000 -> throughput = 1383000 / 6 = 230500 byte/sec
114  // 12 user -> 232000 * 12 = 2784000 > 1383000 -> throughput = 1383000 / 12 = 115250 byte/sec
115  // UPLINK - DISTANCE 4800 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
116  // 1 user -> 25 PRB at Itbs 13 -> 807 -> 807000 > 232000 -> throughput = 232000 bytes/sec
117  // 3 users -> 8 PRB at Itbs 13 -> 253 -> 253000 > 232000 -> throughput = 232000 bytes/sec
118  // 6 users -> 4 PRB at Itbs 13 -> 125 -> 125000 < 232000 -> throughput = 125000 bytes/sec
119  // after the patch enforcing min 3 PRBs per UE:
120  // 12 users -> 3 PRB at Itbs 13 -> 93 bytes * 8/12 UE/TTI -> 62000 < 232000 -> throughput =
121  // 62000 bytes/sec
122  AddTestCase(new LenaPssFfMacSchedulerTestCase1(1, 4800, 232000, 232000, 200, 1, errorModel),
123  TestCase::EXTENSIVE);
124  AddTestCase(new LenaPssFfMacSchedulerTestCase1(3, 4800, 232000, 232000, 200, 1, errorModel),
125  TestCase::EXTENSIVE);
126  AddTestCase(new LenaPssFfMacSchedulerTestCase1(6, 4800, 230500, 125000, 200, 1, errorModel),
127  TestCase::EXTENSIVE);
128  // AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,4800,115250,62000,200,1,errorModel)); //
129  // simulation time = 1.5, otherwise, ul test will fail
130 
131  // DOWNLINK - DISTANCE 6000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
132  // Traffic info
133  // UDP traffic: payload size = 200 bytes, interval = 1 ms
134  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
135  // byte/sec -> 232000 byte/rate
136  // Total bandwidth: 24 PRB at Itbs 18 -> 1191 -> 1191000 byte/sec
137  // 1 user -> 903000 * 1 = 232000 < 1191000 -> throughput = 232000 byte/sec
138  // 3 user -> 232000 * 3 = 696000 < 1191000 -> througphut = 232000 byte/sec
139  // 6 user -> 232000 * 6 = 1392000 > 1191000 -> throughput = 1191000 / 6 = 198500 byte/sec
140  // 12 user -> 232000 * 12 = 2784000 > 1191000 -> throughput = 1191000 / 12 = 99250 byte/sec
141 
142  // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
143  // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 > 232000 -> throughput = 232000 bytes/sec
144  // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 < 232000 -> throughput = 201000 bytes/sec
145  // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 < 232000 -> throughput = 97000 bytes/sec
146  // after the patch enforcing min 3 PRBs per UE:
147  // 12 users -> 3 PRB at Itbs 11 -> 73 bytes * 8/12 UE/TTI -> 48667 < 232000 -> throughput =
148  // 48667 bytes/sec
149  AddTestCase(new LenaPssFfMacSchedulerTestCase1(1, 6000, 232000, 232000, 200, 1, errorModel),
150  TestCase::EXTENSIVE);
151  AddTestCase(new LenaPssFfMacSchedulerTestCase1(3, 6000, 232000, 201000, 200, 1, errorModel),
152  TestCase::EXTENSIVE);
153  AddTestCase(new LenaPssFfMacSchedulerTestCase1(6, 6000, 198500, 97000, 200, 1, errorModel),
154  TestCase::EXTENSIVE);
155  // AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,6000,99250,48667,200,1, errorModel)); //
156  // simulation time = 1.5, otherwise, ul test will fail
157 
158  // DOWNLINK - DISTANCE 10000 -> MCS 14 -> Itbs 13 (from table 7.1.7.2.1-1 of 36.213)
159  // Traffic info
160  // UDP traffic: payload size = 200 bytes, interval = 1 ms
161  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
162  // byte/sec -> 232000 byte/rate
163  // Total bandwidth: 24 PRB at Itbs 13 -> 775 -> 775000 byte/sec
164  // 1 user -> 903000 * 1 = 232000 < 775000 -> throughput = 232000 byte/sec
165  // 3 user -> 232000 * 3 = 696000 > 775000 -> througphut = 232000 byte/sec
166  // 6 user -> 232000 * 6 = 139200 > 775000 -> throughput = 775000 / 6 = 129166 byte/sec
167  // 12 user -> 232000 * 12 = 2784000 > 775000 -> throughput = 775000 / 12 = 64583 byte/sec
168  // UPLINK - DISTANCE 10000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213)
169  // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 > 232000 -> throughput = 232000 bytes/sec
170  // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 < 232000 -> throughput = 137000 bytes/sec
171  // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 < 232000 -> throughput = 67000 bytes/sec
172  // after the patch enforcing min 3 PRBs per UE:
173  // 12 users -> 3 PRB at Itbs 8 -> 49 bytes * 8/12 UE/TTI -> 32667 < 232000 -> throughput = 32667
174  // bytes/sec
175  AddTestCase(new LenaPssFfMacSchedulerTestCase1(1, 10000, 232000, 232000, 200, 1, errorModel),
176  TestCase::EXTENSIVE);
177  AddTestCase(new LenaPssFfMacSchedulerTestCase1(3, 10000, 232000, 137000, 200, 1, errorModel),
178  TestCase::EXTENSIVE);
179  AddTestCase(new LenaPssFfMacSchedulerTestCase1(6, 10000, 129166, 67000, 200, 1, errorModel),
180  TestCase::EXTENSIVE);
181  // AddTestCase (new LenaPssFfMacSchedulerTestCase1 (12,10000,64583,32667,200,1,errorModel));//
182  // simulation time = 1.5, otherwise, ul test will fail
183 
184  // DOWNLINK - DISTANCE 100000 -> CQI == 0 -> out of range -> 0 bytes/sec
185  // UPLINK - DISTANCE 100000 -> CQI == 0 -> out of range -> 0 bytes/sec
186  AddTestCase(new LenaPssFfMacSchedulerTestCase1(1, 100000, 0, 0, 200, 1, errorModel),
187  TestCase::QUICK);
188 
189  // Test Case 2: homogeneous flow test in PSS (different distance)
190  // Traffic1 info
191  // UDP traffic: payload size = 100 bytes, interval = 1 ms
192  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
193  // byte/sec -> 132000 byte/rate
194  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
195  // 132000 * 4 = 528000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
196  std::vector<double> dist1;
197  dist1.push_back(0); // User 0 distance --> MCS 28
198  dist1.push_back(4800); // User 1 distance --> MCS 22
199  dist1.push_back(6000); // User 2 distance --> MCS 20
200  dist1.push_back(10000); // User 3 distance --> MCS 14
201  std::vector<uint16_t> packetSize1;
202  packetSize1.push_back(100);
203  packetSize1.push_back(100);
204  packetSize1.push_back(100);
205  packetSize1.push_back(100);
206  std::vector<uint32_t> estThrPssDl1;
207  estThrPssDl1.push_back(132000); // User 0 estimated TTI throughput from PSS
208  estThrPssDl1.push_back(132000); // User 1 estimated TTI throughput from PSS
209  estThrPssDl1.push_back(132000); // User 2 estimated TTI throughput from PSS
210  estThrPssDl1.push_back(132000); // User 3 estimated TTI throughput from PSS
211  AddTestCase(new LenaPssFfMacSchedulerTestCase2(dist1, estThrPssDl1, packetSize1, 1, errorModel),
212  TestCase::QUICK);
213 
214  // Traffic2 info
215  // UDP traffic: payload size = 200 bytes, interval = 1 ms
216  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
217  // byte/sec -> 232000 byte/rate
218  // Maximum throughput = 4 / ( 1/2196000 + 1/1191000 + 1/1383000 + 1/775000 ) = 1209046 byte/s
219  // 232000 * 4 = 928000 < 1209046 -> estimated throughput in downlink = 928000 / 4 = 230000
220  // byte/sec
221  std::vector<double> dist2;
222  dist2.push_back(0); // User 0 distance --> MCS 28
223  dist2.push_back(4800); // User 1 distance --> MCS 22
224  dist2.push_back(6000); // User 2 distance --> MCS 20
225  dist2.push_back(10000); // User 3 distance --> MCS 14
226  std::vector<uint16_t> packetSize2;
227  packetSize2.push_back(200);
228  packetSize2.push_back(200);
229  packetSize2.push_back(200);
230  packetSize2.push_back(200);
231  std::vector<uint32_t> estThrPssDl2;
232  estThrPssDl2.push_back(230000); // User 0 estimated TTI throughput from PSS
233  estThrPssDl2.push_back(230000); // User 1 estimated TTI throughput from PSS
234  estThrPssDl2.push_back(230000); // User 2 estimated TTI throughput from PSS
235  estThrPssDl2.push_back(230000); // User 3 estimated TTI throughput from PSS
236  AddTestCase(new LenaPssFfMacSchedulerTestCase2(dist2, estThrPssDl2, packetSize2, 1, errorModel),
237  TestCase::QUICK);
238 
239  // Test Case 3: heterogeneous flow test in PSS
240  // UDP traffic: payload size = [100,200,300] bytes, interval = 1 ms
241  // UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000
242  // byte/sec -> [132000, 232000, 332000] byte/rate
243  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
244  // 132000 + 232000 + 332000 = 696000 < 1486569 -> estimated throughput in downlink = [132000,
245  // 232000, 332000] byte/sec
246  std::vector<double> dist3;
247  dist3.push_back(0); // User 0 distance --> MCS 28
248  dist3.push_back(4800); // User 1 distance --> MCS 22
249  dist3.push_back(6000); // User 2 distance --> MCS 20
250  std::vector<uint16_t> packetSize3;
251  packetSize3.push_back(100);
252  packetSize3.push_back(200);
253  packetSize3.push_back(300);
254  std::vector<uint32_t> estThrPssDl3;
255  estThrPssDl3.push_back(132000); // User 0 estimated TTI throughput from PSS
256  estThrPssDl3.push_back(232000); // User 1 estimated TTI throughput from PSS
257  estThrPssDl3.push_back(332000); // User 2 estimated TTI throughput from PSS
258  AddTestCase(new LenaPssFfMacSchedulerTestCase2(dist3, estThrPssDl3, packetSize3, 1, errorModel),
259  TestCase::QUICK);
260 }
261 
267 
268 // --------------- T E S T - C A S E # 1 ------------------------------
269 
270 std::string
272 {
273  std::ostringstream oss;
274  oss << nUser << " UEs, distance " << dist << " m";
275  return oss.str();
276 }
277 
279  double dist,
280  double thrRefDl,
281  double thrRefUl,
282  uint16_t packetSize,
283  uint16_t interval,
284  bool errorModelEnabled)
285  : TestCase(BuildNameString(nUser, dist)),
286  m_nUser(nUser),
287  m_dist(dist),
288  m_packetSize(packetSize),
289  m_interval(interval),
290  m_thrRefDl(thrRefDl),
291  m_thrRefUl(thrRefUl),
292  m_errorModelEnabled(errorModelEnabled)
293 {
294 }
295 
297 {
298 }
299 
300 void
302 {
303  NS_LOG_FUNCTION(this << GetName());
304 
305  if (!m_errorModelEnabled)
306  {
307  Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
308  Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
309  }
310 
311  Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
312  Config::SetDefault("ns3::MacStatsCalculator::DlOutputFilename",
313  StringValue(CreateTempDirFilename("DlMacStats.txt")));
314  Config::SetDefault("ns3::MacStatsCalculator::UlOutputFilename",
315  StringValue(CreateTempDirFilename("UlMacStats.txt")));
316  Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
317  StringValue(CreateTempDirFilename("DlRlcStats.txt")));
318  Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
319  StringValue(CreateTempDirFilename("UlRlcStats.txt")));
320 
321  Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
322  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper>();
323  lteHelper->SetEpcHelper(epcHelper);
324 
325  // LogComponentEnable ("PssFfMacScheduler", LOG_DEBUG);
326 
327  Ptr<Node> pgw = epcHelper->GetPgwNode();
328 
329  // Create a single RemoteHost
330  NodeContainer remoteHostContainer;
331  remoteHostContainer.Create(1);
332  Ptr<Node> remoteHost = remoteHostContainer.Get(0);
334  internet.Install(remoteHostContainer);
335 
336  // Create the Internet
337  PointToPointHelper p2ph;
338  p2ph.SetDeviceAttribute("DataRate", DataRateValue(DataRate("100Gb/s")));
339  p2ph.SetDeviceAttribute("Mtu", UintegerValue(1500));
340  p2ph.SetChannelAttribute("Delay", TimeValue(Seconds(0.001)));
341  NetDeviceContainer internetDevices = p2ph.Install(pgw, remoteHost);
342  Ipv4AddressHelper ipv4h;
343  ipv4h.SetBase("1.0.0.0", "255.0.0.0");
344  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign(internetDevices);
345  // interface 0 is localhost, 1 is the p2p device
346  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress(1);
347 
348  Ipv4StaticRoutingHelper ipv4RoutingHelper;
349  Ptr<Ipv4StaticRouting> remoteHostStaticRouting =
350  ipv4RoutingHelper.GetStaticRouting(remoteHost->GetObject<Ipv4>());
351  remoteHostStaticRouting->AddNetworkRouteTo(Ipv4Address("7.0.0.0"), Ipv4Mask("255.0.0.0"), 1);
352 
353  // Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010));
354  // Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (0.00005));
355  // Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
356  // Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
357 
358  // Config::SetDefault ("ns3::LteEnbRrc::EpsBearerToRlcMapping", EnumValue
359  // (LteHelper::RLC_UM_ALWAYS));
360 
361  // LogComponentDisableAll (LOG_LEVEL_ALL);
362  // LogComponentEnable ("LenaTestPssFfMacScheduler", LOG_LEVEL_ALL);
363 
364  lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
365 
366  // Create Nodes: eNodeB and UE
367  NodeContainer enbNodes;
368  NodeContainer ueNodes;
369  enbNodes.Create(1);
370  ueNodes.Create(m_nUser);
371 
372  // Install Mobility Model
374  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
375  mobility.Install(enbNodes);
376  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
377  mobility.Install(ueNodes);
378 
379  // Create Devices and install them in the Nodes (eNB and UE)
380  NetDeviceContainer enbDevs;
381  NetDeviceContainer ueDevs;
382  lteHelper->SetSchedulerType("ns3::PssFfMacScheduler");
383  lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::SRS_UL_CQI));
384  enbDevs = lteHelper->InstallEnbDevice(enbNodes);
385  ueDevs = lteHelper->InstallUeDevice(ueNodes);
386 
387  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(0)->GetObject<LteEnbNetDevice>();
388  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
389  enbPhy->SetAttribute("TxPower", DoubleValue(30.0));
390  enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
391 
392  // Set UEs' position and power
393  for (int i = 0; i < m_nUser; i++)
394  {
397  mm->SetPosition(Vector(m_dist, 0.0, 0.0));
398  Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(i)->GetObject<LteUeNetDevice>();
399  Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
400  uePhy->SetAttribute("TxPower", DoubleValue(23.0));
401  uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
402  }
403 
404  // Install the IP stack on the UEs
405  internet.Install(ueNodes);
406  Ipv4InterfaceContainer ueIpIface;
407  ueIpIface = epcHelper->AssignUeIpv4Address(NetDeviceContainer(ueDevs));
408 
409  // Assign IP address to UEs
410  for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
411  {
412  Ptr<Node> ueNode = ueNodes.Get(u);
413  // Set the default gateway for the UE
414  Ptr<Ipv4StaticRouting> ueStaticRouting =
415  ipv4RoutingHelper.GetStaticRouting(ueNode->GetObject<Ipv4>());
416  ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
417  }
418 
419  // Attach a UE to a eNB
420  lteHelper->Attach(ueDevs, enbDevs.Get(0));
421 
422  // Activate an EPS bearer on all UEs
423  for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
424  {
425  Ptr<NetDevice> ueDevice = ueDevs.Get(u);
426  GbrQosInformation qos;
427  qos.gbrDl = (m_packetSize + 32) * (1000 / m_interval) *
428  8; // bit/s, considering IP, UDP, RLC, PDCP header size
429  qos.gbrUl = (m_packetSize + 32) * (1000 / m_interval) * 8;
430  qos.mbrDl = 0;
431  qos.mbrUl = 0;
432 
433  EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
434  EpsBearer bearer(q, qos);
435  lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, EpcTft::Default());
436  }
437 
438  // Install downlink and uplink applications
439  uint16_t dlPort = 1234;
440  uint16_t ulPort = 2000;
443  PacketSinkHelper dlPacketSinkHelper("ns3::UdpSocketFactory",
444  InetSocketAddress(Ipv4Address::GetAny(), dlPort));
445 
446  for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
447  {
448  ++ulPort;
449  PacketSinkHelper ulPacketSinkHelper("ns3::UdpSocketFactory",
450  InetSocketAddress(Ipv4Address::GetAny(), ulPort));
451  serverApps.Add(ulPacketSinkHelper.Install(remoteHost)); // receive packets from UEs
452  serverApps.Add(
453  dlPacketSinkHelper.Install(ueNodes.Get(u))); // receive packets from remotehost
454 
455  UdpClientHelper dlClient(ueIpIface.GetAddress(u), dlPort); // downlink packets generator
456  dlClient.SetAttribute("Interval", TimeValue(MilliSeconds(m_interval)));
457  dlClient.SetAttribute("MaxPackets", UintegerValue(1000000));
458  dlClient.SetAttribute("PacketSize", UintegerValue(m_packetSize));
459 
460  UdpClientHelper ulClient(remoteHostAddr, ulPort); // uplink packets generator
461  ulClient.SetAttribute("Interval", TimeValue(MilliSeconds(m_interval)));
462  ulClient.SetAttribute("MaxPackets", UintegerValue(1000000));
463  ulClient.SetAttribute("PacketSize", UintegerValue(m_packetSize));
464 
465  clientApps.Add(dlClient.Install(remoteHost));
466  clientApps.Add(ulClient.Install(ueNodes.Get(u)));
467  }
468 
469  serverApps.Start(Seconds(0.030));
470  clientApps.Start(Seconds(0.030));
471 
472  double statsStartTime = 0.300; // need to allow for RRC connection establishment + SRS
473  double statsDuration = 0.6;
474  double tolerance = 0.1;
475  Simulator::Stop(Seconds(statsStartTime + statsDuration - 0.0001));
476 
477  lteHelper->EnableRlcTraces();
478  lteHelper->EnableMacTraces();
479  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats();
480  rlcStats->SetAttribute("StartTime", TimeValue(Seconds(statsStartTime)));
481  rlcStats->SetAttribute("EpochDuration", TimeValue(Seconds(statsDuration)));
482 
483  Simulator::Run();
484 
489  NS_LOG_INFO("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
490  std::vector<uint64_t> dlDataRxed;
491  for (int i = 0; i < m_nUser; i++)
492  {
493  // get the imsi
494  uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
495  // get the lcId
496  uint8_t lcId = 4;
497  uint64_t data = rlcStats->GetDlRxData(imsi, lcId);
498  dlDataRxed.push_back(data);
499  NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at(i)
500  << " thr " << (double)dlDataRxed.at(i) / statsDuration << " ref "
501  << m_thrRefDl);
502  }
503 
504  for (int i = 0; i < m_nUser; i++)
505  {
506  NS_TEST_ASSERT_MSG_EQ_TOL((double)dlDataRxed.at(i) / statsDuration,
507  m_thrRefDl,
508  m_thrRefDl * tolerance,
509  " Unfair Throughput!");
510  }
511 
516  NS_LOG_INFO("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
517  std::vector<uint64_t> ulDataRxed;
518  for (int i = 0; i < m_nUser; i++)
519  {
520  // get the imsi
521  uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
522  // get the lcId
523  uint8_t lcId = 4;
524  ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
525  NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)ulDataRxed.at(i)
526  << " thr " << (double)ulDataRxed.at(i) / statsDuration << " ref "
527  << m_thrRefUl);
528  }
529 
530  for (int i = 0; i < m_nUser; i++)
531  {
532  NS_TEST_ASSERT_MSG_EQ_TOL((double)ulDataRxed.at(i) / statsDuration,
533  m_thrRefUl,
534  m_thrRefUl * tolerance,
535  " Unfair Throughput!");
536  }
537  Simulator::Destroy();
538 }
539 
540 // --------------- T E S T - C A S E # 2 ------------------------------
541 
542 std::string
543 LenaPssFfMacSchedulerTestCase2::BuildNameString(uint16_t nUser, std::vector<double> dist)
544 {
545  std::ostringstream oss;
546  oss << "distances (m) = [ ";
547  for (auto it = dist.begin(); it != dist.end(); ++it)
548  {
549  oss << *it << " ";
550  }
551  oss << "]";
552  return oss.str();
553 }
554 
556  std::vector<uint32_t> estThrPssDl,
557  std::vector<uint16_t> packetSize,
558  uint16_t interval,
559  bool errorModelEnabled)
560  : TestCase(BuildNameString(dist.size(), dist)),
561  m_nUser(dist.size()),
562  m_dist(dist),
563  m_packetSize(packetSize),
564  m_interval(interval),
565  m_estThrPssDl(estThrPssDl),
566  m_errorModelEnabled(errorModelEnabled)
567 {
568 }
569 
571 {
572 }
573 
574 void
576 {
577  if (!m_errorModelEnabled)
578  {
579  Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
580  Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
581  }
582 
583  Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
584  Config::SetDefault("ns3::MacStatsCalculator::DlOutputFilename",
585  StringValue(CreateTempDirFilename("DlMacStats.txt")));
586  Config::SetDefault("ns3::MacStatsCalculator::UlOutputFilename",
587  StringValue(CreateTempDirFilename("UlMacStats.txt")));
588  Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
589  StringValue(CreateTempDirFilename("DlRlcStats.txt")));
590  Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
591  StringValue(CreateTempDirFilename("UlRlcStats.txt")));
592 
593  Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
594  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper>();
595  lteHelper->SetEpcHelper(epcHelper);
596 
597  Ptr<Node> pgw = epcHelper->GetPgwNode();
598 
599  // Create a single RemoteHost
600  NodeContainer remoteHostContainer;
601  remoteHostContainer.Create(1);
602  Ptr<Node> remoteHost = remoteHostContainer.Get(0);
604  internet.Install(remoteHostContainer);
605 
606  // Create the Internet
607  PointToPointHelper p2ph;
608  p2ph.SetDeviceAttribute("DataRate", DataRateValue(DataRate("100Gb/s")));
609  p2ph.SetDeviceAttribute("Mtu", UintegerValue(1500));
610  p2ph.SetChannelAttribute("Delay", TimeValue(Seconds(0.001)));
611  NetDeviceContainer internetDevices = p2ph.Install(pgw, remoteHost);
612  Ipv4AddressHelper ipv4h;
613  ipv4h.SetBase("1.0.0.0", "255.0.0.0");
614  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign(internetDevices);
615  // interface 0 is localhost, 1 is the p2p device
616  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress(1);
617 
618  Ipv4StaticRoutingHelper ipv4RoutingHelper;
619  Ptr<Ipv4StaticRouting> remoteHostStaticRouting =
620  ipv4RoutingHelper.GetStaticRouting(remoteHost->GetObject<Ipv4>());
621  remoteHostStaticRouting->AddNetworkRouteTo(Ipv4Address("7.0.0.0"), Ipv4Mask("255.0.0.0"), 1);
622 
623  // LogComponentDisableAll (LOG_LEVEL_ALL);
624  // LogComponentEnable ("LenaTestPssFfMacScheduler", LOG_LEVEL_ALL);
625 
626  lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisSpectrumPropagationLossModel"));
627 
628  // Create Nodes: eNodeB and UE
629  NodeContainer enbNodes;
630  NodeContainer ueNodes;
631  enbNodes.Create(1);
632  ueNodes.Create(m_nUser);
633 
634  // Install Mobility Model
636  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
637  mobility.Install(enbNodes);
638  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
639  mobility.Install(ueNodes);
640 
641  // Create Devices and install them in the Nodes (eNB and UE)
642  NetDeviceContainer enbDevs;
643  NetDeviceContainer ueDevs;
644  lteHelper->SetSchedulerType("ns3::PssFfMacScheduler");
645  lteHelper->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::SRS_UL_CQI));
646  enbDevs = lteHelper->InstallEnbDevice(enbNodes);
647  ueDevs = lteHelper->InstallUeDevice(ueNodes);
648 
649  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(0)->GetObject<LteEnbNetDevice>();
650  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
651  enbPhy->SetAttribute("TxPower", DoubleValue(30.0));
652  enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
653 
654  // Set UEs' position and power
655  for (int i = 0; i < m_nUser; i++)
656  {
659  mm->SetPosition(Vector(m_dist.at(i), 0.0, 0.0));
660  Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(i)->GetObject<LteUeNetDevice>();
661  Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
662  uePhy->SetAttribute("TxPower", DoubleValue(23.0));
663  uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
664  }
665 
666  // Install the IP stack on the UEs
667  internet.Install(ueNodes);
668  Ipv4InterfaceContainer ueIpIface;
669  ueIpIface = epcHelper->AssignUeIpv4Address(NetDeviceContainer(ueDevs));
670 
671  // Assign IP address to UEs
672  for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
673  {
674  Ptr<Node> ueNode = ueNodes.Get(u);
675  // Set the default gateway for the UE
676  Ptr<Ipv4StaticRouting> ueStaticRouting =
677  ipv4RoutingHelper.GetStaticRouting(ueNode->GetObject<Ipv4>());
678  ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
679  }
680 
681  // Attach a UE to a eNB
682  lteHelper->Attach(ueDevs, enbDevs.Get(0));
683 
684  // Activate an EPS bearer on all UEs
685 
686  for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
687  {
688  Ptr<NetDevice> ueDevice = ueDevs.Get(u);
689  GbrQosInformation qos;
690  qos.gbrDl = (m_packetSize.at(u) + 32) * (1000 / m_interval) *
691  8; // bit/s, considering IP, UDP, RLC, PDCP header size
692  qos.gbrUl = (m_packetSize.at(u) + 32) * (1000 / m_interval) * 8;
693  qos.mbrDl = qos.gbrDl;
694  qos.mbrUl = qos.gbrUl;
695 
696  EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
697  EpsBearer bearer(q, qos);
698  lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, EpcTft::Default());
699  }
700 
701  // Install downlink and uplink applications
702  uint16_t dlPort = 1234;
703  uint16_t ulPort = 2000;
706  PacketSinkHelper dlPacketSinkHelper("ns3::UdpSocketFactory",
707  InetSocketAddress(Ipv4Address::GetAny(), dlPort));
708 
709  for (uint32_t u = 0; u < ueNodes.GetN(); ++u)
710  {
711  ++ulPort;
712  PacketSinkHelper ulPacketSinkHelper("ns3::UdpSocketFactory",
713  InetSocketAddress(Ipv4Address::GetAny(), ulPort));
714  serverApps.Add(ulPacketSinkHelper.Install(remoteHost)); // receive packets from UEs
715  serverApps.Add(
716  dlPacketSinkHelper.Install(ueNodes.Get(u))); // receive packets from remotehost
717 
718  UdpClientHelper dlClient(ueIpIface.GetAddress(u), dlPort); // downlink packets generator
719  dlClient.SetAttribute("Interval", TimeValue(MilliSeconds(m_interval)));
720  dlClient.SetAttribute("MaxPackets", UintegerValue(1000000));
721  dlClient.SetAttribute("PacketSize", UintegerValue(m_packetSize.at(u)));
722 
723  UdpClientHelper ulClient(remoteHostAddr, ulPort); // uplink packets generator
724  ulClient.SetAttribute("Interval", TimeValue(MilliSeconds(m_interval)));
725  ulClient.SetAttribute("MaxPackets", UintegerValue(1000000));
726  ulClient.SetAttribute("PacketSize", UintegerValue(m_packetSize.at(u)));
727 
728  clientApps.Add(dlClient.Install(remoteHost));
729  clientApps.Add(ulClient.Install(ueNodes.Get(u)));
730  }
731 
732  serverApps.Start(Seconds(0.030));
733  clientApps.Start(Seconds(0.030));
734 
735  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
736  double statsDuration = 0.5;
737  double tolerance = 0.1;
738  Simulator::Stop(Seconds(statsStartTime + statsDuration - 0.0001));
739 
740  lteHelper->EnableRlcTraces();
741  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats();
742  rlcStats->SetAttribute("StartTime", TimeValue(Seconds(statsStartTime)));
743  rlcStats->SetAttribute("EpochDuration", TimeValue(Seconds(statsDuration)));
744 
745  Simulator::Run();
746 
751  NS_LOG_INFO("DL - Test with " << m_nUser << " user(s)");
752  std::vector<uint64_t> dlDataRxed;
753  for (int i = 0; i < m_nUser; i++)
754  {
755  // get the imsi
756  uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
757  // get the lcId
758  uint8_t lcId = 4;
759  dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
760  NS_LOG_INFO("\tUser " << i << " dist " << m_dist.at(i) << " imsi " << imsi << " bytes rxed "
761  << (double)dlDataRxed.at(i) << " thr "
762  << (double)dlDataRxed.at(i) / statsDuration << " ref "
763  << m_estThrPssDl.at(i));
764  }
765 
766  for (int i = 0; i < m_nUser; i++)
767  {
768  NS_TEST_ASSERT_MSG_EQ_TOL((double)dlDataRxed.at(i) / statsDuration,
769  m_estThrPssDl.at(i),
770  m_estThrPssDl.at(i) * tolerance,
771  " Unfair Throughput!");
772  }
773 
774  Simulator::Destroy();
775 }
This system test program creates different test cases with a single eNB and several UEs,...
uint16_t m_interval
the interval time in ms
uint16_t m_packetSize
the packet size in bytes
bool m_errorModelEnabled
indicates whether the error model is enabled
double m_thrRefDl
the DL throughput reference value
static std::string BuildNameString(uint16_t nUser, double dist)
Builds the test name string based on provided parameter values.
double m_thrRefUl
the UL throughput reference value
double m_dist
the distance between nodes
LenaPssFfMacSchedulerTestCase1(uint16_t nUser, double dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool errorModelEnabled)
Constructor.
void DoRun() override
Implementation to actually run this TestCase.
Similar to the LenaPssFfMacSchedulerTestCase1 with the difference that UEs are places in such a way t...
bool m_errorModelEnabled
indicates whether the error model is enabled
std::vector< double > m_dist
the distance between nodes
uint16_t m_interval
the interval time in ms
std::vector< uint16_t > m_packetSize
the packet size in bytes
static std::string BuildNameString(uint16_t nUser, std::vector< double > dist)
Builds the test name string based on provided parameter values.
LenaPssFfMacSchedulerTestCase2(std::vector< double > dist, std::vector< uint32_t > estThrPssDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled)
Constructor.
void DoRun() override
Implementation to actually run this TestCase.
std::vector< uint32_t > m_estThrPssDl
the DL estimated throughput PSS
Lena Pss Ff Mac Scheduler Test Suite.
holds a vector of ns3::Application pointers.
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:42
Hold variables of type enum.
Definition: enum.h:62
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
Qci
QoS Class Indicator.
Definition: eps-bearer.h:106
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:42
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:80
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:257
Helper class that adds ns3::Ipv4StaticRouting objects.
Ptr< Ipv4StaticRouting > GetStaticRouting(Ptr< Ipv4 > ipv4) const
Try and find the static routing protocol as either the main routing protocol or in the list of routin...
The eNodeB device implementation.
Ptr< LteEnbPhy > GetPhy() const
void SetEpcHelper(Ptr< EpcHelper > h)
Set the EpcHelper to be used to setup the EPC network in conjunction with the setup of the LTE radio ...
Definition: lte-helper.cc:285
Ptr< RadioBearerStatsCalculator > GetRlcStats()
Definition: lte-helper.cc:1701
void SetSchedulerAttribute(std::string n, const AttributeValue &v)
Set an attribute for the scheduler to be created.
Definition: lte-helper.cc:306
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:485
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Definition: lte-helper.cc:292
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:1039
void EnableRlcTraces()
Enable trace sinks for RLC layer.
Definition: lte-helper.cc:1558
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:500
void EnableMacTraces()
Enable trace sinks for MAC layer.
Definition: lte-helper.cc:1659
uint8_t ActivateDedicatedEpsBearer(NetDeviceContainer ueDevices, EpsBearer bearer, Ptr< EpcTft > tft)
Activate a dedicated EPS bearer on a given set of UE devices.
Definition: lte-helper.cc:1154
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.
Ptr< Node > GetPgwNode() const override
Get the PGW node.
Ipv4Address GetUeDefaultGatewayAddress() override
Ipv4InterfaceContainer AssignUeIpv4Address(NetDeviceContainer ueDevices) override
Assign IPv4 addresses to UE devices.
keep track of a set of node pointers.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
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:204
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition: object.h:471
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Hold variables of type string.
Definition: string.h:56
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:301
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:438
std::string GetName() const
Definition: test.cc:373
A suite of tests to run.
Definition: test.h:1256
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
ApplicationContainer Install(NodeContainer c)
Hold an unsigned integer type.
Definition: uinteger.h:45
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:890
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#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:275
static LenaTestPssFfMacSchedulerSuite lenaTestPssFfMacSchedulerSuite
Static variable for test initialization.
void(* DataRate)(DataRate oldValue, DataRate newValue)
TracedValue callback signature for DataRate.
Definition: data-rate.h:327
#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:1326
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1338
serverApps
Definition: first.py:54
clientApps
Definition: first.py:64
Every class exported by the ns3 library is enclosed in the ns3 namespace.
mobility
Definition: third.py:105
uint8_t data[writeSize]
3GPP TS 36.413 9.2.1.18 GBR QoS Information
Definition: eps-bearer.h:36
uint64_t gbrDl
Guaranteed Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:42
uint64_t gbrUl
Guaranteed Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:43
uint64_t mbrDl
Maximum Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:44
uint64_t mbrUl
Maximum Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:45
static const uint32_t packetSize
Packet size generated at the AP.