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