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