A Discrete-Event Network Simulator
API
test-lte-epc-e2e-data.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: Nicola Baldo <nbaldo@cttc.es>
19 */
20
21
22
23#include "ns3/simulator.h"
24#include "ns3/log.h"
25#include "ns3/test.h"
26#include "ns3/lte-helper.h"
27#include "ns3/point-to-point-epc-helper.h"
28#include "ns3/packet-sink-helper.h"
29#include "ns3/udp-client-server-helper.h"
30#include "ns3/udp-echo-helper.h"
31#include "ns3/point-to-point-helper.h"
32#include "ns3/internet-stack-helper.h"
33#include "ns3/ipv4-address-helper.h"
34#include "ns3/inet-socket-address.h"
35#include "ns3/packet-sink.h"
36#include <ns3/ipv4-static-routing-helper.h>
37#include <ns3/ipv4-static-routing.h>
38#include "ns3/boolean.h"
39#include "ns3/uinteger.h"
40#include "ns3/double.h"
41#include "ns3/abort.h"
42#include "ns3/mobility-helper.h"
43
44
45
46
47using namespace ns3;
48
49NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData");
50
51
59{
67 BearerTestData (uint32_t n, uint32_t s, double i);
68
72
75
78};
79
81 : numPkts (n),
82 pktSize (s),
83 interPacketInterval (Seconds (i))
84{
85}
86
89{
90 std::vector<BearerTestData> bearers;
91};
92
95{
96 std::vector<UeTestData> ues;
97};
98
99
109{
110public:
117 LteEpcE2eDataTestCase (std::string name, std::vector<EnbTestData> v);
118 virtual ~LteEpcE2eDataTestCase ();
119
120private:
121 virtual void DoRun (void);
122 std::vector<EnbTestData> m_enbTestData;
123};
124
125
126LteEpcE2eDataTestCase::LteEpcE2eDataTestCase (std::string name, std::vector<EnbTestData> v)
127 : TestCase (name),
128 m_enbTestData (v)
129{
130 NS_LOG_FUNCTION (this << name);
131}
132
134{
135}
136
137void
139{
140 NS_LOG_FUNCTION (this << GetName ());
141 Config::Reset ();
142 Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
143 Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
144 Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
145
146 Config::SetDefault ("ns3::RadioBearerStatsCalculator::DlPdcpOutputFilename", StringValue (CreateTempDirFilename ("DlPdcpStats.txt")));
147 Config::SetDefault ("ns3::RadioBearerStatsCalculator::UlPdcpOutputFilename", StringValue (CreateTempDirFilename ("UlPdcpStats.txt")));
148
149 Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
150 Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
151 lteHelper->SetEpcHelper (epcHelper);
152
153 lteHelper->SetAttribute("PathlossModel",
154 StringValue("ns3::FriisPropagationLossModel"));
155
156 // allow jumbo frames on the S1-U link
157 epcHelper->SetAttribute ("S1uLinkMtu", UintegerValue (30000));
158
159 Ptr<Node> pgw = epcHelper->GetPgwNode ();
160
161 // Create a single RemoteHost
162 NodeContainer remoteHostContainer;
163 remoteHostContainer.Create (1);
164 Ptr<Node> remoteHost = remoteHostContainer.Get (0);
165 InternetStackHelper internet;
166 internet.Install (remoteHostContainer);
167
168 // Create the internet
170 p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
171 p2ph.SetDeviceAttribute ("Mtu", UintegerValue (30000)); // jumbo frames here as well
172 p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
173 NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
174 Ipv4AddressHelper ipv4h;
175 ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
176 Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
177 Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
178
179 // setup default gateway for the remote hosts
180 Ipv4StaticRoutingHelper ipv4RoutingHelper;
181 Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
182
183 // hardcoded UE addresses for now
184 remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.255.255.0"), 1);
185
186
187 NodeContainer enbs;
188 enbs.Create (m_enbTestData.size ());
189 MobilityHelper enbMobility;
190 enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
191 enbMobility.SetPositionAllocator ("ns3::GridPositionAllocator",
192 "MinX", DoubleValue (0.0),
193 "MinY", DoubleValue (0.0),
194 "DeltaX", DoubleValue (10000.0),
195 "DeltaY", DoubleValue (10000.0),
196 "GridWidth", UintegerValue (3),
197 "LayoutType", StringValue ("RowFirst"));
198 enbMobility.Install (enbs);
199 NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbs);
200 NetDeviceContainer::Iterator enbLteDevIt = enbLteDevs.Begin ();
201
202 uint16_t ulPort = 1000;
203
204 for (std::vector<EnbTestData>::iterator enbit = m_enbTestData.begin ();
205 enbit < m_enbTestData.end ();
206 ++enbit, ++enbLteDevIt)
207 {
208 NS_ABORT_IF (enbLteDevIt == enbLteDevs.End ());
209
210
211
212 NodeContainer ues;
213 ues.Create (enbit->ues.size ());
214 Vector enbPosition = (*enbLteDevIt)->GetNode ()->GetObject<MobilityModel> ()->GetPosition ();
215 MobilityHelper ueMobility;
216 ueMobility.SetPositionAllocator ("ns3::UniformDiscPositionAllocator",
217 "X", DoubleValue (enbPosition.x),
218 "Y", DoubleValue (enbPosition.y),
219 "rho", DoubleValue (100.0));
220 ueMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
221 ueMobility.Install (ues);
222 NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ues);
223
224 // we install the IP stack on the UEs
225 InternetStackHelper internet;
226 internet.Install (ues);
227
228 // assign IP address to UEs, and install applications
229 for (uint32_t u = 0; u < ues.GetN (); ++u)
230 {
231
232 Ptr<Node> ue = ues.Get (u);
233 Ptr<NetDevice> ueLteDevice = ueLteDevs.Get (u);
234 Ipv4InterfaceContainer ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevice));
235 // set the default gateway for the UE
236 Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ue->GetObject<Ipv4> ());
237 ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
238
239
240 // we can now attach the UE, which will also activate the default EPS bearer
241 lteHelper->Attach (ueLteDevice, *enbLteDevIt);
242
243
244 uint16_t dlPort = 2000;
245 for (uint32_t b = 0; b < enbit->ues.at (u).bearers.size (); ++b)
246 {
247 BearerTestData& bearerTestData = enbit->ues.at (u).bearers.at (b);
248
249 { // Downlink
250 ++dlPort;
251 PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
252 ApplicationContainer apps = packetSinkHelper.Install (ue);
253 apps.Start (Seconds (0.04));
254 bearerTestData.dlServerApp = apps.Get (0)->GetObject<PacketSink> ();
255
256 UdpEchoClientHelper client (ueIpIface.GetAddress (0), dlPort);
257 client.SetAttribute ("MaxPackets", UintegerValue (bearerTestData.numPkts));
258 client.SetAttribute ("Interval", TimeValue (bearerTestData.interPacketInterval));
259 client.SetAttribute ("PacketSize", UintegerValue (bearerTestData.pktSize));
260 apps = client.Install (remoteHost);
261 apps.Start (Seconds (0.04));
262 bearerTestData.dlClientApp = apps.Get (0);
263 }
264
265 { // Uplink
266 ++ulPort;
267 PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
268 ApplicationContainer apps = packetSinkHelper.Install (remoteHost);
269 apps.Start (Seconds (0.8));
270 bearerTestData.ulServerApp = apps.Get (0)->GetObject<PacketSink> ();
271
272 UdpEchoClientHelper client (remoteHostAddr, ulPort);
273 client.SetAttribute ("MaxPackets", UintegerValue (bearerTestData.numPkts));
274 client.SetAttribute ("Interval", TimeValue (bearerTestData.interPacketInterval));
275 client.SetAttribute ("PacketSize", UintegerValue (bearerTestData.pktSize));
276 apps = client.Install (ue);
277 apps.Start (Seconds (0.8));
278 bearerTestData.ulClientApp = apps.Get (0);
279 }
280
281 EpsBearer epsBearer (EpsBearer::NGBR_VOICE_VIDEO_GAMING);
282
283 Ptr<EpcTft> tft = Create<EpcTft> ();
285 dlpf.localPortStart = dlPort;
286 dlpf.localPortEnd = dlPort;
287 tft->Add (dlpf);
289 ulpf.remotePortStart = ulPort;
290 ulpf.remotePortEnd = ulPort;
291 tft->Add (ulpf);
292
293 // all data will go over the dedicated bearer instead of the default EPS bearer
294 lteHelper->ActivateDedicatedEpsBearer (ueLteDevice, epsBearer, tft);
295 }
296 }
297
298 }
299
300 Config::Set ("/NodeList/*/DeviceList/*/LteEnbRrc/UeMap/*/RadioBearerMap/*/LteRlc/MaxTxBufferSize",
301 UintegerValue (2 * 1024 * 1024));
302 Config::Set ("/NodeList/*/DeviceList/*/LteUeRrc/RadioBearerMap/*/LteRlc/MaxTxBufferSize",
303 UintegerValue (2 * 1024 * 1024));
304
305
306 double statsStartTime = 0.040; // need to allow for RRC connection establishment + SRS
307 double statsDuration = 2.0;
308
309 lteHelper->EnablePdcpTraces ();
310
311 lteHelper->GetPdcpStats ()->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
312 lteHelper->GetPdcpStats ()->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
313
314
315 Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.0001));
316 Simulator::Run ();
317
318 uint64_t imsiCounter = 0;
319
320 for (std::vector<EnbTestData>::iterator enbit = m_enbTestData.begin ();
321 enbit < m_enbTestData.end ();
322 ++enbit)
323 {
324 for (std::vector<UeTestData>::iterator ueit = enbit->ues.begin ();
325 ueit < enbit->ues.end ();
326 ++ueit)
327 {
328 uint64_t imsi = ++imsiCounter;
329 for (uint32_t b = 0; b < ueit->bearers.size (); ++b)
330 {
331 // LCID 0, 1, 2 are for SRBs
332 // LCID 3 is (at the moment) the Default EPS bearer, and is unused in this test program
333 uint8_t lcid = b+4;
334 uint32_t expectedPkts = ueit->bearers.at (b).numPkts;
335 uint32_t expectedBytes = (ueit->bearers.at (b).numPkts) * (ueit->bearers.at (b).pktSize);
336 uint32_t txPktsPdcpDl = lteHelper->GetPdcpStats ()->GetDlTxPackets (imsi, lcid);
337 uint32_t rxPktsPdcpDl = lteHelper->GetPdcpStats ()->GetDlRxPackets (imsi, lcid);
338 uint32_t txPktsPdcpUl = lteHelper->GetPdcpStats ()->GetUlTxPackets (imsi, lcid);
339 uint32_t rxPktsPdcpUl = lteHelper->GetPdcpStats ()->GetUlRxPackets (imsi, lcid);
340 uint32_t rxBytesDl = ueit->bearers.at (b).dlServerApp->GetTotalRx ();
341 uint32_t rxBytesUl = ueit->bearers.at (b).ulServerApp->GetTotalRx ();
342
343
344 NS_TEST_ASSERT_MSG_EQ (txPktsPdcpDl,
345 expectedPkts,
346 "wrong TX PDCP packets in downlink for IMSI=" << imsi << " LCID=" << (uint16_t) lcid);
347
348 NS_TEST_ASSERT_MSG_EQ (rxPktsPdcpDl,
349 expectedPkts,
350 "wrong RX PDCP packets in downlink for IMSI=" << imsi << " LCID=" << (uint16_t) lcid);
351 NS_TEST_ASSERT_MSG_EQ (txPktsPdcpUl,
352 expectedPkts,
353 "wrong TX PDCP packets in uplink for IMSI=" << imsi << " LCID=" << (uint16_t) lcid);
354 NS_TEST_ASSERT_MSG_EQ (rxPktsPdcpUl,
355 expectedPkts,
356 "wrong RX PDCP packets in uplink for IMSI=" << imsi << " LCID=" << (uint16_t) lcid);
357
358 NS_TEST_ASSERT_MSG_EQ (rxBytesDl,
359 expectedBytes,
360 "wrong total received bytes in downlink");
361 NS_TEST_ASSERT_MSG_EQ (rxBytesUl,
362 expectedBytes,
363 "wrong total received bytes in uplink");
364 }
365 }
366 }
367
368 Simulator::Destroy ();
369}
370
371
372
373
374
381{
382public:
384
386
388 : TestSuite ("lte-epc-e2e-data", SYSTEM)
389{
390 std::vector<EnbTestData> v1;
391 EnbTestData e1;
392 UeTestData u1;
393 BearerTestData f1 (1, 100, 0.01);
394 u1.bearers.push_back (f1);
395 e1.ues.push_back (u1);
396 v1.push_back (e1);
397 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE", v1), TestCase::QUICK);
398
399 std::vector<EnbTestData> v2;
400 EnbTestData e2;
401 UeTestData u2_1;
402 BearerTestData f2_1 (1, 100, 0.01);
403 u2_1.bearers.push_back (f2_1);
404 e2.ues.push_back (u2_1);
405 UeTestData u2_2;
406 BearerTestData f2_2 (2, 200, 0.01);
407 u2_2.bearers.push_back (f2_2);
408 e2.ues.push_back (u2_2);
409 v2.push_back (e2);
410 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 2UEs", v2), TestCase::EXTENSIVE);
411
412 std::vector<EnbTestData> v3;
413 v3.push_back (e1);
414 v3.push_back (e2);
415 AddTestCase (new LteEpcE2eDataTestCase ("2 eNBs", v3), TestCase::EXTENSIVE);
416
417 EnbTestData e4;
418 UeTestData u4_1;
419 BearerTestData f4_1 (3, 50, 0.01);
420 u4_1.bearers.push_back (f4_1);
421 e4.ues.push_back (u4_1);
422 UeTestData u4_2;
423 BearerTestData f4_2 (5, 1400, 0.01);
424 u4_2.bearers.push_back (f4_2);
425 e4.ues.push_back (u4_2);
426 UeTestData u4_3;
427 BearerTestData f4_3 (1, 12, 0.01);
428 u4_3.bearers.push_back (f4_3);
429 e4.ues.push_back (u4_3);
430 std::vector<EnbTestData> v4;
431 v4.push_back (e4);
432 v4.push_back (e1);
433 v4.push_back (e2);
434 AddTestCase (new LteEpcE2eDataTestCase ("3 eNBs", v4), TestCase::EXTENSIVE);
435
436 EnbTestData e5;
437 UeTestData u5;
438 BearerTestData f5 (5, 1000, 0.01);
439 u5.bearers.push_back (f5);
440 e5.ues.push_back (u5);
441 std::vector<EnbTestData> v5;
442 v5.push_back (e5);
443 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with 1000 byte packets", v5), TestCase::EXTENSIVE);
444
445
446 EnbTestData e6;
447 UeTestData u6;
448 BearerTestData f6 (5, 1400, 0.01);
449 u6.bearers.push_back (f6);
450 e6.ues.push_back (u6);
451 std::vector<EnbTestData> v6;
452 v6.push_back (e6);
453 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with 1400 byte packets", v6), TestCase::EXTENSIVE);
454
455 EnbTestData e7;
456 UeTestData u7;
457 BearerTestData f7_1 (1, 1400, 0.01);
458 u7.bearers.push_back (f7_1);
459 BearerTestData f7_2 (1, 100, 0.01);
460 u7.bearers.push_back (f7_2);
461 e7.ues.push_back (u7);
462 std::vector<EnbTestData> v7;
463 v7.push_back (e7);
464 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with 2 bearers", v7), TestCase::EXTENSIVE);
465
466 EnbTestData e8;
467 UeTestData u8;
468 BearerTestData f8 (50, 8000, 0.02); // watch out for ns3::LteRlcUm::MaxTxBufferSize
469 u8.bearers.push_back (f8);
470 e8.ues.push_back (u8);
471 std::vector<EnbTestData> v8;
472 v8.push_back (e8);
473 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with fragmentation", v8), TestCase::EXTENSIVE);
474
475
476 EnbTestData e9;
477 UeTestData u9;
478 BearerTestData f9 (1000, 20, 0.0001);
479 u9.bearers.push_back (f9);
480 e9.ues.push_back (u9);
481 std::vector<EnbTestData> v9;
482 v9.push_back (e9);
483 AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with aggregation", v9), TestCase::EXTENSIVE);
484
485
486}
Test that e2e packet flow is correct.
LteEpcE2eDataTestCase(std::string name, std::vector< EnbTestData > v)
Constructor.
virtual void DoRun(void)
Implementation to actually run this TestCase.
std::vector< EnbTestData > m_enbTestData
the ENB test data
Test that the S1-U interface implementation works correctly.
holds a vector of ns3::Application pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:41
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:92
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:41
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:77
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:256
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...
Ptr< RadioBearerStatsCalculator > GetPdcpStats(void)
Definition: lte-helper.cc:1586
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
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:474
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
Definition: lte-helper.cc:959
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:489
void EnablePdcpTraces(void)
Enable trace sinks for PDCP layer.
Definition: lte-helper.cc:1578
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:1068
Helper class used to assign positions and mobility models to nodes.
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
Keep track of the current position and velocity of an object.
holds a vector of ns3::NetDevice pointers
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
Iterator End(void) const
Get an iterator which indicates past-the-last NetDevice in the container.
Iterator Begin(void) const
Get an iterator which refers to the first NetDevice in the container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
virtual Ipv4Address GetUeDefaultGatewayAddress()
virtual Ptr< Node > GetPgwNode() const
Get the PGW node.
virtual Ipv4InterfaceContainer AssignUeIpv4Address(NetDeviceContainer ueDevices)
Assign IPv4 addresses to UE devices.
keep track of a set of node pointers.
uint32_t GetN(void) 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:256
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:470
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...
Receive and consume traffic generated to an IP address and port.
Definition: packet-sink.h:72
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:41
encapsulates test code
Definition: test.h:994
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:430
std::string GetName(void) const
Definition: test.cc:370
A suite of tests to run.
Definition: test.h:1188
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
AttributeValue implementation for Time.
Definition: nstime.h:1308
Create an application which sends a UDP packet and waits for an echo of this packet.
Hold an unsigned integer type.
Definition: uinteger.h:44
void Reset(void)
Reset the initial value of every attribute as well as the value of every global to what they were bef...
Definition: config.cc:820
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:849
void Set(std::string path, const AttributeValue &value)
Definition: config.cc:839
#define NS_ABORT_IF(cond)
Abnormal program termination if a condition is true.
Definition: abort.h:77
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
LteEpcE2eDataTestSuite g_lteEpcE2eDataTestSuite
the test suite
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:141
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Time interPacketInterval
the inter packet interval time
uint32_t numPkts
the number of packets
uint32_t pktSize
the packet size
BearerTestData(uint32_t n, uint32_t s, double i)
Constructor.
Ptr< PacketSink > dlServerApp
the DL server app
Ptr< Application > ulClientApp
the UL client app
Ptr< PacketSink > ulServerApp
the UL server app
Ptr< Application > dlClientApp
the DL client app
EnbTestData structure.
std::vector< UeTestData > ues
the list of UEs
UeTestData structure.
std::vector< BearerTestData > bearers
the bearer test data
Implement the data structure representing a TrafficFlowTemplate Packet Filter.
Definition: epc-tft.h:75
uint16_t localPortEnd
end of the port number range of the UE
Definition: epc-tft.h:140
uint16_t remotePortEnd
end of the port number range of the remote host
Definition: epc-tft.h:138
uint16_t remotePortStart
start of the port number range of the remote host
Definition: epc-tft.h:137
uint16_t localPortStart
start of the port number range of the UE
Definition: epc-tft.h:139
static Vector GetPosition(Ptr< Node > node)
Definition: wifi-ap.cc:96
uint32_t pktSize
packet size used for the simulation (in bytes)
Definition: wifi-bianchi.cc:89