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