23 #include "ns3/simulator.h"
26 #include "ns3/epc-helper.h"
27 #include "ns3/epc-enb-application.h"
28 #include "ns3/packet-sink-helper.h"
29 #include "ns3/udp-echo-helper.h"
30 #include "ns3/point-to-point-helper.h"
31 #include "ns3/csma-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/config.h"
41 #include "ns3/eps-bearer.h"
70 std::vector<UeDlTestData>
ues;
82 virtual void DoRun (
void);
101 Ptr<Node> pgw = epcHelper->GetPgwNode ();
106 epcHelper->SetAttribute (
"S1uLinkMtu",
UintegerValue (30000));
110 remoteHostContainer.
Create (1);
113 internet.
Install (remoteHostContainer);
120 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
121 ipv4h.
Assign (internetDevices);
128 remoteHostStaticRouting->AddNetworkRouteTo (
Ipv4Address (
"7.0.0.0"),
Ipv4Mask (
"255.255.255.0"), 1);
134 uint16_t cellIdCounter = 0;
136 for (std::vector<EnbDlTestData>::iterator enbit =
m_enbDlTestData.begin ();
147 uint16_t cellId = ++cellIdCounter;
150 ues.
Create (enbit->ues.size ());
163 epcHelper->AddEnb (enb, enbDevice, cellId);
167 NS_ASSERT_MSG (enbApp != 0,
"cannot retrieve EpcEnbApplication");
169 rrc->SetS1SapProvider (enbApp->GetS1SapProvider ());
170 enbApp->SetS1SapUser (rrc->GetS1SapUser ());
177 for (uint32_t u = 0; u < ues.
GetN (); ++u)
189 uint16_t
port = 1234;
192 apps.
Start (Seconds (1.0));
193 apps.
Stop (Seconds (10.0));
194 enbit->ues[u].serverApp = apps.
Get (0)->GetObject<
PacketSink> ();
196 Time interPacketInterval = Seconds (0.01);
199 client.SetAttribute (
"Interval",
TimeValue (interPacketInterval));
200 client.SetAttribute (
"PacketSize",
UintegerValue (enbit->ues[u].pktSize));
201 apps = client.Install (remoteHost);
202 apps.
Start (Seconds (2.0));
203 apps.
Stop (Seconds (10.0));
204 enbit->ues[u].clientApp = apps.
Get (0);
207 epcHelper->AddUe (ueLteDevice, imsi);
209 enbApp->GetS1SapProvider ()->InitialUeMessage (imsi, (uint16_t) imsi);
216 for (std::vector<EnbDlTestData>::iterator enbit =
m_enbDlTestData.begin ();
220 for (std::vector<UeDlTestData>::iterator ueit = enbit->ues.begin ();
221 ueit < enbit->ues.end ();
224 NS_TEST_ASSERT_MSG_EQ (ueit->serverApp->GetTotalRx (), (ueit->numPkts) * (ueit->pktSize),
"wrong total received bytes");
248 std::vector<EnbDlTestData> v1;
251 e1.
ues.push_back (f1);
256 std::vector<EnbDlTestData> v2;
259 e2.
ues.push_back (f2_1);
261 e2.
ues.push_back (f2_2);
266 std::vector<EnbDlTestData> v3;
274 e3.
ues.push_back (f3_1);
276 e3.
ues.push_back (f3_2);
278 e3.
ues.push_back (f3_2);
279 std::vector<EnbDlTestData> v4;
285 std::vector<EnbDlTestData> v5;
288 e5.
ues.push_back (f5);
292 std::vector<EnbDlTestData> v6;
295 e6.
ues.push_back (f6);
299 std::vector<EnbDlTestData> v7;
302 e7.
ues.push_back (f7);
306 std::vector<EnbDlTestData> v8;
309 e8.
ues.push_back (f8);
holds a vector of ns3::Application pointers.
keep track of time values and allow control of global simulation resolution
static Ipv4Address GetAny(void)
smart pointer class similar to boost::intrusive_ptr
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
NetDeviceContainer Install(NodeContainer c)
a class to represent an Ipv4 address mask
EpcS1uDlTestCase(std::string name, std::vector< EnbDlTestData > v)
create an application which sends a udp packet and waits for an echo of this packet ...
static Ptr< EpcTft > Default()
aggregate IP/TCP/UDP functionality to existing Nodes.
NetDeviceContainer Install(Ptr< Node > node) const
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
uint32_t GetN(void) const
Get the number of Ptr<Node> stored in this container.
uint32_t GetN(void) const
Get the number of Ptr<NetDevice> stored in this container.
Class for representing data rates.
Ptr< Application > GetApplication(uint32_t index) const
UeDlTestData(uint32_t n, uint32_t s)
hold objects of type ns3::Time
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
Ptr< PacketSink > serverApp
static void Destroy(void)
Ptr< Application > clientApp
Access to the Ipv4 forwarding table, interfaces, and configuration.
std::vector< UeDlTestData > ues
virtual ~EpcS1uDlTestCase()
void SetDefault(std::string name, const AttributeValue &value)
keep track of a set of node pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void Install(std::string nodeName) const
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
build a set of CsmaNetDevice objects
#define NS_ASSERT_MSG(condition, message)
ns3::EpcS1uDlTestSuite g_epcS1uDlTestSuiteInstance
Ipv4 addresses are stored in host order in this class.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter...
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
NS_LOG_COMPONENT_DEFINE("PacketLossCounter")
Ptr< Ipv4StaticRouting > GetStaticRouting(Ptr< Ipv4 > ipv4) const
Helper class that adds ns3::Ipv4StaticRouting objects.
hold objects of type ns3::DataRate
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
ApplicationContainer Install(NodeContainer c) const
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)
Receive and consume traffic generated to an IP address and port.
Ptr< T > GetObject(void) const
std::vector< EnbDlTestData > m_enbDlTestData
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
#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.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const