A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
test-lte-epc-e2e-data.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: Nicola Baldo <nbaldo@cttc.es>
18 */
19
20#include "ns3/abort.h"
21#include "ns3/boolean.h"
22#include "ns3/double.h"
23#include "ns3/inet-socket-address.h"
24#include "ns3/internet-stack-helper.h"
25#include "ns3/ipv4-address-helper.h"
26#include "ns3/log.h"
27#include "ns3/lte-helper.h"
28#include "ns3/mobility-helper.h"
29#include "ns3/packet-sink-helper.h"
30#include "ns3/packet-sink.h"
31#include "ns3/point-to-point-epc-helper.h"
32#include "ns3/point-to-point-helper.h"
33#include "ns3/simulator.h"
34#include "ns3/test.h"
35#include "ns3/udp-client-server-helper.h"
36#include "ns3/udp-echo-helper.h"
37#include "ns3/uinteger.h"
38#include <ns3/ipv4-static-routing-helper.h>
39#include <ns3/ipv4-static-routing.h>
40
41using namespace ns3;
42
43NS_LOG_COMPONENT_DEFINE("LteEpcE2eData");
44
45/**
46 * \ingroup lte-test
47 */
48
49/// BearerTestData structure
51{
52 /**
53 * Constructor
54 *
55 * \param n the number of packets
56 * \param s the packet size
57 * \param i the inter packet interval in seconds
58 */
59 BearerTestData(uint32_t n, uint32_t s, double i);
60
61 uint32_t numPkts; ///< the number of packets
62 uint32_t pktSize; ///< the packet size
63 Time interPacketInterval; ///< the inter packet interval time
64
65 Ptr<PacketSink> dlServerApp; ///< the DL server app
66 Ptr<Application> dlClientApp; ///< the DL client app
67
68 Ptr<PacketSink> ulServerApp; ///< the UL server app
69 Ptr<Application> ulClientApp; ///< the UL client app
70};
71
73 : numPkts(n),
74 pktSize(s),
75 interPacketInterval(Seconds(i))
76{
77}
78
79/// UeTestData structure
81{
82 std::vector<BearerTestData> bearers; ///< the bearer test data
83};
84
85/// EnbTestData structure
87{
88 std::vector<UeTestData> ues; ///< the list of UEs
89};
90
91/**
92 * \ingroup lte-test
93 *
94 * \brief Test that e2e packet flow is correct. Compares the data send and the
95 * data received. Test uses mostly the PDCP stats to check the performance.
96 */
97
99{
100 public:
101 /**
102 * Constructor
103 *
104 * \param name the reference name
105 * \param v the ENB test data
106 */
107 LteEpcE2eDataTestCase(std::string name, std::vector<EnbTestData> v);
108 ~LteEpcE2eDataTestCase() override;
109
110 private:
111 void DoRun() override;
112 std::vector<EnbTestData> m_enbTestData; ///< the ENB test data
113};
114
115LteEpcE2eDataTestCase::LteEpcE2eDataTestCase(std::string name, std::vector<EnbTestData> v)
116 : TestCase(name),
117 m_enbTestData(v)
118{
119 NS_LOG_FUNCTION(this << name);
120}
121
123{
124}
125
126void
128{
129 NS_LOG_FUNCTION(this << GetName());
131 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
132 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
133 Config::SetDefault("ns3::LteHelper::UseIdealRrc", BooleanValue(true));
134
135 Config::SetDefault("ns3::RadioBearerStatsCalculator::DlPdcpOutputFilename",
136 StringValue(CreateTempDirFilename("DlPdcpStats.txt")));
137 Config::SetDefault("ns3::RadioBearerStatsCalculator::UlPdcpOutputFilename",
138 StringValue(CreateTempDirFilename("UlPdcpStats.txt")));
139
140 Ptr<LteHelper> lteHelper = CreateObject<LteHelper>();
141 Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper>();
142 lteHelper->SetEpcHelper(epcHelper);
143
144 lteHelper->SetAttribute("PathlossModel", StringValue("ns3::FriisPropagationLossModel"));
145
146 // allow jumbo frames on the S1-U link
147 epcHelper->SetAttribute("S1uLinkMtu", UintegerValue(30000));
148
149 Ptr<Node> pgw = epcHelper->GetPgwNode();
150
151 // Create a single RemoteHost
152 NodeContainer remoteHostContainer;
153 remoteHostContainer.Create(1);
154 Ptr<Node> remoteHost = remoteHostContainer.Get(0);
155 InternetStackHelper internet;
156 internet.Install(remoteHostContainer);
157
158 // Create the internet
160 p2ph.SetDeviceAttribute("DataRate", DataRateValue(DataRate("100Gb/s")));
161 p2ph.SetDeviceAttribute("Mtu", UintegerValue(30000)); // jumbo frames here as well
162 p2ph.SetChannelAttribute("Delay", TimeValue(Seconds(0.010)));
163 NetDeviceContainer internetDevices = p2ph.Install(pgw, remoteHost);
164 Ipv4AddressHelper ipv4h;
165 ipv4h.SetBase("1.0.0.0", "255.0.0.0");
166 Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign(internetDevices);
167 Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress(1);
168
169 // setup default gateway for the remote hosts
170 Ipv4StaticRoutingHelper ipv4RoutingHelper;
171 Ptr<Ipv4StaticRouting> remoteHostStaticRouting =
172 ipv4RoutingHelper.GetStaticRouting(remoteHost->GetObject<Ipv4>());
173
174 // hardcoded UE addresses for now
175 remoteHostStaticRouting->AddNetworkRouteTo(Ipv4Address("7.0.0.0"),
176 Ipv4Mask("255.255.255.0"),
177 1);
178
179 NodeContainer enbs;
180 enbs.Create(m_enbTestData.size());
181 MobilityHelper enbMobility;
182 enbMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
183 enbMobility.SetPositionAllocator("ns3::GridPositionAllocator",
184 "MinX",
185 DoubleValue(0.0),
186 "MinY",
187 DoubleValue(0.0),
188 "DeltaX",
189 DoubleValue(10000.0),
190 "DeltaY",
191 DoubleValue(10000.0),
192 "GridWidth",
193 UintegerValue(3),
194 "LayoutType",
195 StringValue("RowFirst"));
196 enbMobility.Install(enbs);
197 NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice(enbs);
198 auto enbLteDevIt = enbLteDevs.Begin();
199
200 uint16_t ulPort = 1000;
201
202 for (auto enbit = m_enbTestData.begin(); enbit < m_enbTestData.end(); ++enbit, ++enbLteDevIt)
203 {
204 NS_ABORT_IF(enbLteDevIt == enbLteDevs.End());
205
206 NodeContainer ues;
207 ues.Create(enbit->ues.size());
208 Vector enbPosition = (*enbLteDevIt)->GetNode()->GetObject<MobilityModel>()->GetPosition();
209 MobilityHelper ueMobility;
210 ueMobility.SetPositionAllocator("ns3::UniformDiscPositionAllocator",
211 "X",
212 DoubleValue(enbPosition.x),
213 "Y",
214 DoubleValue(enbPosition.y),
215 "rho",
216 DoubleValue(100.0));
217 ueMobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
218 ueMobility.Install(ues);
219 NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice(ues);
220
221 // we install the IP stack on the UEs
222 InternetStackHelper internet;
223 internet.Install(ues);
224
225 // assign IP address to UEs, and install applications
226 for (uint32_t u = 0; u < ues.GetN(); ++u)
227 {
228 Ptr<Node> ue = ues.Get(u);
229 Ptr<NetDevice> ueLteDevice = ueLteDevs.Get(u);
230 Ipv4InterfaceContainer ueIpIface =
231 epcHelper->AssignUeIpv4Address(NetDeviceContainer(ueLteDevice));
232 // set the default gateway for the UE
233 Ptr<Ipv4StaticRouting> ueStaticRouting =
234 ipv4RoutingHelper.GetStaticRouting(ue->GetObject<Ipv4>());
235 ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
236
237 // we can now attach the UE, which will also activate the default EPS bearer
238 lteHelper->Attach(ueLteDevice, *enbLteDevIt);
239
240 uint16_t dlPort = 2000;
241 for (uint32_t b = 0; b < enbit->ues.at(u).bearers.size(); ++b)
242 {
243 BearerTestData& bearerTestData = enbit->ues.at(u).bearers.at(b);
244
245 { // Downlink
246 ++dlPort;
247 PacketSinkHelper packetSinkHelper(
248 "ns3::UdpSocketFactory",
250 ApplicationContainer apps = packetSinkHelper.Install(ue);
251 apps.Start(Seconds(0.04));
252 bearerTestData.dlServerApp = apps.Get(0)->GetObject<PacketSink>();
253
254 UdpEchoClientHelper client(ueIpIface.GetAddress(0), dlPort);
255 client.SetAttribute("MaxPackets", UintegerValue(bearerTestData.numPkts));
256 client.SetAttribute("Interval", TimeValue(bearerTestData.interPacketInterval));
257 client.SetAttribute("PacketSize", UintegerValue(bearerTestData.pktSize));
258 apps = client.Install(remoteHost);
259 apps.Start(Seconds(0.04));
260 bearerTestData.dlClientApp = apps.Get(0);
261 }
262
263 { // Uplink
264 ++ulPort;
265 PacketSinkHelper packetSinkHelper(
266 "ns3::UdpSocketFactory",
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
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
300 "/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 double statsStartTime = 0.040; // need to allow for RRC connection establishment + SRS
306 double statsDuration = 2.0;
307
308 lteHelper->EnablePdcpTraces();
309
310 lteHelper->GetPdcpStats()->SetAttribute("StartTime", TimeValue(Seconds(statsStartTime)));
311 lteHelper->GetPdcpStats()->SetAttribute("EpochDuration", TimeValue(Seconds(statsDuration)));
312
313 Simulator::Stop(Seconds(statsStartTime + statsDuration - 0.0001));
315
316 uint64_t imsiCounter = 0;
317
318 for (auto enbit = m_enbTestData.begin(); enbit < m_enbTestData.end(); ++enbit)
319 {
320 for (auto ueit = enbit->ues.begin(); ueit < enbit->ues.end(); ++ueit)
321 {
322 uint64_t imsi = ++imsiCounter;
323 for (uint32_t b = 0; b < ueit->bearers.size(); ++b)
324 {
325 // LCID 0, 1, 2 are for SRBs
326 // LCID 3 is (at the moment) the Default EPS bearer, and is unused in this test
327 // program
328 uint8_t lcid = b + 4;
329 uint32_t expectedPkts = ueit->bearers.at(b).numPkts;
330 uint32_t expectedBytes =
331 (ueit->bearers.at(b).numPkts) * (ueit->bearers.at(b).pktSize);
332 uint32_t txPktsPdcpDl = lteHelper->GetPdcpStats()->GetDlTxPackets(imsi, lcid);
333 uint32_t rxPktsPdcpDl = lteHelper->GetPdcpStats()->GetDlRxPackets(imsi, lcid);
334 uint32_t txPktsPdcpUl = lteHelper->GetPdcpStats()->GetUlTxPackets(imsi, lcid);
335 uint32_t rxPktsPdcpUl = lteHelper->GetPdcpStats()->GetUlRxPackets(imsi, lcid);
336 uint32_t rxBytesDl = ueit->bearers.at(b).dlServerApp->GetTotalRx();
337 uint32_t rxBytesUl = ueit->bearers.at(b).ulServerApp->GetTotalRx();
338
339 NS_TEST_ASSERT_MSG_EQ(txPktsPdcpDl,
340 expectedPkts,
341 "wrong TX PDCP packets in downlink for IMSI="
342 << imsi << " LCID=" << (uint16_t)lcid);
343
344 NS_TEST_ASSERT_MSG_EQ(rxPktsPdcpDl,
345 expectedPkts,
346 "wrong RX PDCP packets in downlink for IMSI="
347 << imsi << " LCID=" << (uint16_t)lcid);
348 NS_TEST_ASSERT_MSG_EQ(txPktsPdcpUl,
349 expectedPkts,
350 "wrong TX PDCP packets in uplink for IMSI="
351 << imsi << " LCID=" << (uint16_t)lcid);
352 NS_TEST_ASSERT_MSG_EQ(rxPktsPdcpUl,
353 expectedPkts,
354 "wrong RX PDCP packets in uplink for IMSI="
355 << imsi << " LCID=" << (uint16_t)lcid);
356
357 NS_TEST_ASSERT_MSG_EQ(rxBytesDl,
358 expectedBytes,
359 "wrong total received bytes in downlink");
360 NS_TEST_ASSERT_MSG_EQ(rxBytesUl,
361 expectedBytes,
362 "wrong total received bytes in uplink");
363 }
364 }
365 }
366
368}
369
370/**
371 * \ingroup lte-test
372 *
373 * \brief Test that the S1-U interface implementation works correctly
374 */
376{
377 public:
379
380} g_lteEpcE2eDataTestSuite; ///< the test suite
381
383 : TestSuite("lte-epc-e2e-data", Type::SYSTEM)
384{
385 std::vector<EnbTestData> v1;
386 EnbTestData e1;
387 UeTestData u1;
388 BearerTestData f1(1, 100, 0.01);
389 u1.bearers.push_back(f1);
390 e1.ues.push_back(u1);
391 v1.push_back(e1);
392 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 1UE", v1), TestCase::Duration::QUICK);
393
394 std::vector<EnbTestData> v2;
395 EnbTestData e2;
396 UeTestData u2_1;
397 BearerTestData f2_1(1, 100, 0.01);
398 u2_1.bearers.push_back(f2_1);
399 e2.ues.push_back(u2_1);
400 UeTestData u2_2;
401 BearerTestData f2_2(2, 200, 0.01);
402 u2_2.bearers.push_back(f2_2);
403 e2.ues.push_back(u2_2);
404 v2.push_back(e2);
405 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 2UEs", v2), TestCase::Duration::EXTENSIVE);
406
407 std::vector<EnbTestData> v3;
408 v3.push_back(e1);
409 v3.push_back(e2);
410 AddTestCase(new LteEpcE2eDataTestCase("2 eNBs", v3), TestCase::Duration::EXTENSIVE);
411
412 EnbTestData e4;
413 UeTestData u4_1;
414 BearerTestData f4_1(3, 50, 0.01);
415 u4_1.bearers.push_back(f4_1);
416 e4.ues.push_back(u4_1);
417 UeTestData u4_2;
418 BearerTestData f4_2(5, 1400, 0.01);
419 u4_2.bearers.push_back(f4_2);
420 e4.ues.push_back(u4_2);
421 UeTestData u4_3;
422 BearerTestData f4_3(1, 12, 0.01);
423 u4_3.bearers.push_back(f4_3);
424 e4.ues.push_back(u4_3);
425 std::vector<EnbTestData> v4;
426 v4.push_back(e4);
427 v4.push_back(e1);
428 v4.push_back(e2);
429 AddTestCase(new LteEpcE2eDataTestCase("3 eNBs", v4), TestCase::Duration::EXTENSIVE);
430
431 EnbTestData e5;
432 UeTestData u5;
433 BearerTestData f5(5, 1000, 0.01);
434 u5.bearers.push_back(f5);
435 e5.ues.push_back(u5);
436 std::vector<EnbTestData> v5;
437 v5.push_back(e5);
438 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 1UE with 1000 byte packets", v5),
439 TestCase::Duration::EXTENSIVE);
440
441 EnbTestData e6;
442 UeTestData u6;
443 BearerTestData f6(5, 1400, 0.01);
444 u6.bearers.push_back(f6);
445 e6.ues.push_back(u6);
446 std::vector<EnbTestData> v6;
447 v6.push_back(e6);
448 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 1UE with 1400 byte packets", v6),
449 TestCase::Duration::EXTENSIVE);
450
451 EnbTestData e7;
452 UeTestData u7;
453 BearerTestData f7_1(1, 1400, 0.01);
454 u7.bearers.push_back(f7_1);
455 BearerTestData f7_2(1, 100, 0.01);
456 u7.bearers.push_back(f7_2);
457 e7.ues.push_back(u7);
458 std::vector<EnbTestData> v7;
459 v7.push_back(e7);
460 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 1UE with 2 bearers", v7),
461 TestCase::Duration::EXTENSIVE);
462
463 EnbTestData e8;
464 UeTestData u8;
465 BearerTestData f8(50, 8000, 0.02); // watch out for ns3::LteRlcUm::MaxTxBufferSize
466 u8.bearers.push_back(f8);
467 e8.ues.push_back(u8);
468 std::vector<EnbTestData> v8;
469 v8.push_back(e8);
470 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 1UE with fragmentation", v8),
471 TestCase::Duration::EXTENSIVE);
472
473 EnbTestData e9;
474 UeTestData u9;
475 BearerTestData f9(1000, 20, 0.0001);
476 u9.bearers.push_back(f9);
477 e9.ues.push_back(u9);
478 std::vector<EnbTestData> v9;
479 v9.push_back(e9);
480 AddTestCase(new LteEpcE2eDataTestCase("1 eNB, 1UE with aggregation", v9),
481 TestCase::Duration::EXTENSIVE);
482}
Test that e2e packet flow is correct.
LteEpcE2eDataTestCase(std::string name, std::vector< EnbTestData > v)
Constructor.
void DoRun() override
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.
void Start(Time start) const
Start all of the Applications in this container at the start time given as a parameter.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
AttributeValue implementation for Boolean.
Definition: boolean.h:37
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
Definition: data-rate.h:296
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
@ NGBR_VOICE_VIDEO_GAMING
Non-GBR Voice, Video, Interactive Streaming.
Definition: eps-bearer.h:123
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:42
static Ipv4Address GetAny()
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:80
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:257
Helper class that adds ns3::Ipv4StaticRouting objects.
Ptr< Ipv4StaticRouting > GetStaticRouting(Ptr< Ipv4 > ipv4) const
Try and find the static routing protocol as either the main routing protocol or in the list of routin...
Helper class used to assign positions and mobility models to nodes.
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void SetMobilityModel(std::string type, Ts &&... args)
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
Iterator Begin() const
Get an iterator which refers to the first NetDevice in the container.
Iterator End() const
Get an iterator which indicates past-the-last NetDevice in the container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
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.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition: object.h:522
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
Receive and consume traffic generated to an IP address and port.
Definition: packet-sink.h:75
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)
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
Hold variables of type string.
Definition: string.h:56
encapsulates test code
Definition: test.h:1061
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:438
std::string GetName() const
Definition: test.cc:373
A suite of tests to run.
Definition: test.h:1268
Type
Type of test.
Definition: test.h:1275
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
AttributeValue implementation for Time.
Definition: nstime.h:1413
Create an application which sends a UDP packet and waits for an echo of this packet.
Hold an unsigned integer type.
Definition: uinteger.h:45
void Reset()
Reset the initial value of every attribute as well as the value of every global to what they were bef...
Definition: config.cc:859
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:894
void Set(std::string path, const AttributeValue &value)
Definition: config.cc:880
#define NS_ABORT_IF(cond)
Abnormal program termination if a condition is true.
Definition: abort.h:76
#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 ",...
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:145
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1326
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:71
uint16_t localPortEnd
end of the port number range of the UE
Definition: epc-tft.h:132
uint16_t remotePortEnd
end of the port number range of the remote host
Definition: epc-tft.h:130
uint16_t remotePortStart
start of the port number range of the remote host
Definition: epc-tft.h:129
uint16_t localPortStart
start of the port number range of the UE
Definition: epc-tft.h:131
uint32_t pktSize
packet size used for the simulation (in bytes)