23 #include "ns3/simulator.h"
26 #include "ns3/point-to-point-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"
71 std::vector<UeDlTestData>
ues;
83 virtual void DoRun (
void);
102 Ptr<Node> pgw = epcHelper->GetPgwNode ();
107 epcHelper->SetAttribute (
"S1uLinkMtu",
UintegerValue (30000));
111 remoteHostContainer.
Create (1);
114 internet.
Install (remoteHostContainer);
121 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
122 ipv4h.
Assign (internetDevices);
129 remoteHostStaticRouting->AddNetworkRouteTo (
Ipv4Address (
"7.0.0.0"),
Ipv4Mask (
"255.255.255.0"), 1);
135 uint16_t cellIdCounter = 0;
137 for (std::vector<EnbDlTestData>::iterator enbit =
m_enbDlTestData.begin ();
148 uint16_t cellId = ++cellIdCounter;
151 ues.
Create (enbit->ues.size ());
164 epcHelper->AddEnb (enb, enbDevice, cellId);
168 NS_ASSERT_MSG (enbApp != 0,
"cannot retrieve EpcEnbApplication");
170 rrc->SetS1SapProvider (enbApp->GetS1SapProvider ());
171 enbApp->SetS1SapUser (rrc->GetS1SapUser ());
178 for (uint32_t u = 0; u < ues.
GetN (); ++u)
190 uint16_t
port = 1234;
193 apps.
Start (Seconds (1.0));
194 apps.
Stop (Seconds (10.0));
195 enbit->ues[u].serverApp = apps.
Get (0)->GetObject<
PacketSink> ();
197 Time interPacketInterval = Seconds (0.01);
200 client.SetAttribute (
"Interval",
TimeValue (interPacketInterval));
201 client.SetAttribute (
"PacketSize",
UintegerValue (enbit->ues[u].pktSize));
202 apps = client.Install (remoteHost);
203 apps.
Start (Seconds (2.0));
204 apps.
Stop (Seconds (10.0));
205 enbit->ues[u].clientApp = apps.
Get (0);
208 epcHelper->AddUe (ueLteDevice, imsi);
210 enbApp->GetS1SapProvider ()->InitialUeMessage (imsi, (uint16_t) imsi);
217 for (std::vector<EnbDlTestData>::iterator enbit =
m_enbDlTestData.begin ();
221 for (std::vector<UeDlTestData>::iterator ueit = enbit->ues.begin ();
222 ueit < enbit->ues.end ();
225 NS_TEST_ASSERT_MSG_EQ (ueit->serverApp->GetTotalRx (), (ueit->numPkts) * (ueit->pktSize),
"wrong total received bytes");
249 std::vector<EnbDlTestData> v1;
252 e1.
ues.push_back (f1);
257 std::vector<EnbDlTestData> v2;
260 e2.
ues.push_back (f2_1);
262 e2.
ues.push_back (f2_2);
267 std::vector<EnbDlTestData> v3;
275 e3.
ues.push_back (f3_1);
277 e3.
ues.push_back (f3_2);
279 e3.
ues.push_back (f3_2);
280 std::vector<EnbDlTestData> v4;
286 std::vector<EnbDlTestData> v5;
289 e5.
ues.push_back (f5);
293 std::vector<EnbDlTestData> v6;
296 e6.
ues.push_back (f6);
300 std::vector<EnbDlTestData> v7;
303 e7.
ues.push_back (f7);
307 std::vector<EnbDlTestData> v8;
310 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
NS_LOG_COMPONENT_DEFINE("GrantedTimeWindowMpiInterface")
holds a vector of std::pair of Ptr and interface index.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr 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()
creates a TFT matching any traffic
static void Run(void)
Run the simulation until one of:
aggregate IP/TCP/UDP functionality to existing Nodes.
NetDeviceContainer Install(Ptr< Node > node) const
This method creates an ns3::CsmaChannel with the attributes configured by CsmaHelper::SetChannelAttri...
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)
Set an attribute value to be propagated to each NetDevice created by the helper.
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
Class for representing data rates.
This class contains the specification of EPS Bearers.
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
Test that the S1-U interface implementation works correctly.
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)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
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
stored in this container at a given index.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
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...
This application is installed inside eNBs and provides the bridge functionality for user data plane p...
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
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 that adds ns3::Ipv4StaticRouting objects.
hold objects of type ns3::DataRate
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
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.
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