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 
47 using namespace ns3;
48 
49 NS_LOG_COMPONENT_DEFINE ("LteEpcE2eData");
50 
51 
57 struct BearerTestData
59 {
67  BearerTestData (uint32_t n, uint32_t s, double i);
68 
69  uint32_t numPkts;
70  uint32_t pktSize;
72 
75 
78 };
79 
80  BearerTestData::BearerTestData (uint32_t n, uint32_t s, double i)
81  : numPkts (n),
82  pktSize (s),
83  interPacketInterval (Seconds (i))
84 {
85 }
86 
88 struct UeTestData
89 {
90  std::vector<BearerTestData> bearers;
91 };
92 
95 {
96  std::vector<UeTestData> ues;
97 };
98 
99 
109 {
110 public:
117  LteEpcE2eDataTestCase (std::string name, std::vector<EnbTestData> v);
118  virtual ~LteEpcE2eDataTestCase ();
119 
120 private:
121  virtual void DoRun (void);
122  std::vector<EnbTestData> m_enbTestData;
123 };
124 
125 
126 LteEpcE2eDataTestCase::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 
137 void
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
169  PointToPointHelper p2ph;
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 
382 {
383 public:
385 
387 
389  : TestSuite ("lte-epc-e2e-data", SYSTEM)
390 {
391  std::vector<EnbTestData> v1;
392  EnbTestData e1;
393  UeTestData u1;
394  BearerTestData f1 (1, 100, 0.01);
395  u1.bearers.push_back (f1);
396  e1.ues.push_back (u1);
397  v1.push_back (e1);
398  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE", v1), TestCase::QUICK);
399 
400  std::vector<EnbTestData> v2;
401  EnbTestData e2;
402  UeTestData u2_1;
403  BearerTestData f2_1 (1, 100, 0.01);
404  u2_1.bearers.push_back (f2_1);
405  e2.ues.push_back (u2_1);
406  UeTestData u2_2;
407  BearerTestData f2_2 (2, 200, 0.01);
408  u2_2.bearers.push_back (f2_2);
409  e2.ues.push_back (u2_2);
410  v2.push_back (e2);
411  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 2UEs", v2), TestCase::EXTENSIVE);
412 
413  std::vector<EnbTestData> v3;
414  v3.push_back (e1);
415  v3.push_back (e2);
416  AddTestCase (new LteEpcE2eDataTestCase ("2 eNBs", v3), TestCase::EXTENSIVE);
417 
418  EnbTestData e4;
419  UeTestData u4_1;
420  BearerTestData f4_1 (3, 50, 0.01);
421  u4_1.bearers.push_back (f4_1);
422  e4.ues.push_back (u4_1);
423  UeTestData u4_2;
424  BearerTestData f4_2 (5, 1400, 0.01);
425  u4_2.bearers.push_back (f4_2);
426  e4.ues.push_back (u4_2);
427  UeTestData u4_3;
428  BearerTestData f4_3 (1, 12, 0.01);
429  u4_3.bearers.push_back (f4_3);
430  e4.ues.push_back (u4_3);
431  std::vector<EnbTestData> v4;
432  v4.push_back (e4);
433  v4.push_back (e1);
434  v4.push_back (e2);
435  AddTestCase (new LteEpcE2eDataTestCase ("3 eNBs", v4), TestCase::EXTENSIVE);
436 
437  EnbTestData e5;
438  UeTestData u5;
439  BearerTestData f5 (5, 1000, 0.01);
440  u5.bearers.push_back (f5);
441  e5.ues.push_back (u5);
442  std::vector<EnbTestData> v5;
443  v5.push_back (e5);
444  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with 1000 byte packets", v5), TestCase::EXTENSIVE);
445 
446 
447  EnbTestData e6;
448  UeTestData u6;
449  BearerTestData f6 (5, 1400, 0.01);
450  u6.bearers.push_back (f6);
451  e6.ues.push_back (u6);
452  std::vector<EnbTestData> v6;
453  v6.push_back (e6);
454  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with 1400 byte packets", v6), TestCase::EXTENSIVE);
455 
456  EnbTestData e7;
457  UeTestData u7;
458  BearerTestData f7_1 (1, 1400, 0.01);
459  u7.bearers.push_back (f7_1);
460  BearerTestData f7_2 (1, 100, 0.01);
461  u7.bearers.push_back (f7_2);
462  e7.ues.push_back (u7);
463  std::vector<EnbTestData> v7;
464  v7.push_back (e7);
465  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with 2 bearers", v7), TestCase::EXTENSIVE);
466 
467  EnbTestData e8;
468  UeTestData u8;
469  BearerTestData f8 (50, 8000, 0.02); // watch out for ns3::LteRlcUm::MaxTxBufferSize
470  u8.bearers.push_back (f8);
471  e8.ues.push_back (u8);
472  std::vector<EnbTestData> v8;
473  v8.push_back (e8);
474  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with fragmentation", v8), TestCase::EXTENSIVE);
475 
476 
477  EnbTestData e9;
478  UeTestData u9;
479  BearerTestData f9 (1000, 20, 0.0001);
480  u9.bearers.push_back (f9);
481  e9.ues.push_back (u9);
482  std::vector<EnbTestData> v9;
483  v9.push_back (e9);
484  AddTestCase (new LteEpcE2eDataTestCase ("1 eNB, 1UE with aggregation", v9), TestCase::EXTENSIVE);
485 
486 
487 }
holds a vector of ns3::Application pointers.
uint8_t Add(PacketFilter f)
add a PacketFilter to the Traffic Flow Template
Definition: epc-tft.cc:240
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
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 "...
UeTestData structure.
AttributeValue implementation for Boolean.
Definition: boolean.h:36
Test that the S1-U interface implementation works correctly.
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.
Iterator End(void) const
Get an iterator which indicates past-the-last NetDevice in the container.
Hold variables of type string.
Definition: string.h:41
void Set(std::string path, const AttributeValue &value)
Definition: config.cc:805
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
EnbTestData structure.
Create an application which sends a UDP packet and waits for an echo of this packet.
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:961
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:204
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.
std::vector< EnbTestData > m_enbTestData
the ENB test data
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
virtual void DoRun(void)
Implementation to actually run this TestCase.
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:1069
static Vector GetPosition(Ptr< Node > node)
Definition: wifi-ap.cc:96
Class for representing data rates.
Definition: data-rate.h:88
void EnablePdcpTraces(void)
Enable trace sinks for PDCP layer.
Definition: lte-helper.cc:1579
Keep track of the current position and velocity of an object.
AttributeValue implementation for Time.
Definition: nstime.h:1124
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
Iterator Begin(void) const
Get an iterator which refers to the first NetDevice in the container.
Hold an unsigned integer type.
Definition: uinteger.h:44
#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:168
holds a vector of ns3::NetDevice pointers
Ptr< Application > ulClientApp
the UL client app
std::vector< BearerTestData > bearers
the bearer test data
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
std::vector< UeTestData > ues
the list of UEs
Ptr< PacketSink > ulServerApp
the UL server app
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
uint16_t remotePortEnd
end of the port number range of the remote host
Definition: epc-tft.h:138
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Ptr< Application > dlClientApp
the DL client app
LteEpcE2eDataTestCase(std::string name, std::vector< EnbTestData > v)
Constructor.
uint32_t pktSize
the packet size
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())
Test that e2e packet flow is correct.
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:91
Time interPacketInterval
the inter packet interval time
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:785
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:489
Ptr< RadioBearerStatsCalculator > GetPdcpStats(void)
Definition: lte-helper.cc:1587
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.
#define NS_ABORT_IF(cond)
Abnormal program termination if a condition is true.
Definition: abort.h:77
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
LteEpcE2eDataTestSuite g_lteEpcE2eDataTestSuite
the test suite
Helper class that adds ns3::Ipv4StaticRouting objects.
AttributeValue implementation for DataRate.
Definition: data-rate.h:242
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition: test.cc:430
std::vector< Ptr< NetDevice > >::const_iterator Iterator
NetDevice container iterator.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1062
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:810
Ptr< PacketSink > dlServerApp
the DL server app
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
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.
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
Receive and consume traffic generated to an IP address and port.
Definition: packet-sink.h:68
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
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
BearerTestData(uint32_t n, uint32_t s, double i)
Constructor.
uint32_t numPkts
the number of packets
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
uint16_t remotePortStart
start of the port number range of the remote host
Definition: epc-tft.h:137
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.
Implement the data structure representing a TrafficFlowTemplate Packet Filter.
Definition: epc-tft.h:74
uint16_t localPortStart
start of the port number range of the UE
Definition: epc-tft.h:139