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"
42 #include "lte-test-entities.h"
62 UeDlTestData::UeDlTestData (uint32_t n, uint32_t s)
70 std::vector<UeDlTestData> ues;
82 virtual void DoRun (
void);
83 std::vector<EnbDlTestData> m_enbDlTestData;
87 EpcS1uDlTestCase::EpcS1uDlTestCase (std::string name, std::vector<EnbDlTestData> v)
93 EpcS1uDlTestCase::~EpcS1uDlTestCase ()
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 ();
137 enbit < m_enbDlTestData.end ();
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;
194 enbit->ues[u].serverApp = apps.
Get (0)->GetObject<
PacketSink> ();
199 client.SetAttribute (
"Interval",
TimeValue (interPacketInterval));
200 client.SetAttribute (
"PacketSize",
UintegerValue (enbit->ues[u].pktSize));
201 apps = client.Install (remoteHost);
204 enbit->ues[u].clientApp = apps.
Get (0);
207 epcHelper->AddUe (ueLteDevice, imsi);
208 epcHelper->ActivateEpsBearer (ueLteDevice, imsi,
EpcTft::Default (),
EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT));
209 enbApp->GetS1SapProvider ()->InitialUeMessage (imsi, (uint16_t) imsi);
216 for (std::vector<EnbDlTestData>::iterator enbit = m_enbDlTestData.begin ();
217 enbit < m_enbDlTestData.end ();
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");
243 } g_epcS1uDlTestSuiteInstance;
245 EpcS1uDlTestSuite::EpcS1uDlTestSuite ()
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.
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
create an application which sends a udp packet and waits for an echo of this packet ...
static Ptr< EpcTft > Default()
#define NS_LOG_COMPONENT_DEFINE(name)
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
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...
static void Destroy(void)
Access to the Ipv4 forwarding table, interfaces, and configuration.
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 test case.
void Install(std::string nodeName) const
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
build a set of CsmaNetDevice objects
#define NS_ASSERT_MSG(condition, message)
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...
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
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
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const