27 #include <ns3/object.h>
28 #include <ns3/spectrum-interference.h>
29 #include <ns3/spectrum-error-model.h>
32 #include <ns3/simulator.h>
33 #include <ns3/packet.h>
35 #include "ns3/radio-bearer-stats-calculator.h"
36 #include <ns3/constant-position-mobility-model.h>
37 #include <ns3/eps-bearer.h>
38 #include <ns3/node-container.h>
39 #include <ns3/mobility-helper.h>
40 #include <ns3/net-device-container.h>
41 #include <ns3/lte-ue-net-device.h>
42 #include <ns3/lte-enb-net-device.h>
43 #include <ns3/lte-ue-rrc.h>
44 #include <ns3/lte-helper.h>
45 #include "ns3/string.h"
46 #include "ns3/double.h"
47 #include <ns3/lte-enb-phy.h>
48 #include <ns3/lte-ue-phy.h>
49 #include <ns3/boolean.h>
52 #include "ns3/point-to-point-epc-helper.h"
53 #include "ns3/network-module.h"
54 #include "ns3/ipv4-global-routing-helper.h"
55 #include "ns3/internet-module.h"
56 #include "ns3/applications-module.h"
57 #include "ns3/point-to-point-helper.h"
66 :
TestSuite (
"lte-pss-ff-mac-scheduler", SYSTEM)
68 NS_LOG_INFO (
"creating LenaTestPssFfMacSchedulerSuite");
70 bool errorModel =
false;
167 std::vector<uint16_t> dist1;
169 dist1.push_back (4800);
170 dist1.push_back (6000);
171 dist1.push_back (10000);
172 std::vector<uint16_t> packetSize1;
173 packetSize1.push_back (100);
174 packetSize1.push_back (100);
175 packetSize1.push_back (100);
176 packetSize1.push_back (100);
177 std::vector<uint32_t> estThrPssDl1;
178 estThrPssDl1.push_back (132000);
179 estThrPssDl1.push_back (132000);
180 estThrPssDl1.push_back (132000);
181 estThrPssDl1.push_back (132000);
189 std::vector<uint16_t> dist2;
191 dist2.push_back (4800);
192 dist2.push_back (6000);
193 dist2.push_back (10000);
194 std::vector<uint16_t> packetSize2;
195 packetSize2.push_back (200);
196 packetSize2.push_back (200);
197 packetSize2.push_back (200);
198 packetSize2.push_back (200);
199 std::vector<uint32_t> estThrPssDl2;
200 estThrPssDl2.push_back (230000);
201 estThrPssDl2.push_back (230000);
202 estThrPssDl2.push_back (230000);
203 estThrPssDl2.push_back (230000);
211 std::vector<uint16_t> dist3;
213 dist3.push_back (4800);
214 dist3.push_back (6000);
215 std::vector<uint16_t> packetSize3;
216 packetSize3.push_back (100);
217 packetSize3.push_back (200);
218 packetSize3.push_back (300);
219 std::vector<uint32_t> estThrPssDl3;
220 estThrPssDl3.push_back (132000);
221 estThrPssDl3.push_back (232000);
222 estThrPssDl3.push_back (332000);
235 std::ostringstream oss;
236 oss << nUser <<
" UEs, distance " << dist <<
" m";
242 :
TestCase (BuildNameString (nUser, dist)),
245 m_packetSize (packetSize),
246 m_interval (interval),
247 m_thrRefDl (thrRefDl),
248 m_thrRefUl (thrRefUl),
249 m_errorModelEnabled (errorModelEnabled)
276 Ptr<Node> pgw = epcHelper->GetPgwNode ();
280 remoteHostContainer.
Create (1);
283 internet.
Install (remoteHostContainer);
292 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
336 enbPhy->SetAttribute (
"TxPower",
DoubleValue (30.0));
337 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
340 for (
int i = 0; i <
m_nUser; i++)
346 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
347 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
356 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
361 ueStaticRouting->
SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
365 lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
368 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
383 uint16_t dlPort = 1234;
384 uint16_t ulPort = 2000;
389 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
392 serverApps.
Add (dlPacketSinkHelper.
Install (ueNodes.
Get (u)));
393 serverApps.
Add (ulPacketSinkHelper.
Install (remoteHost));
397 dlClient.SetAttribute (
"MaxPackets",
UintegerValue (1000000));
405 clientApps.
Add (dlClient.Install (remoteHost));
412 double statsStartTime = 0.04;
413 double statsDuration = 0.5;
414 double tolerance = 0.1;
415 Simulator::Stop (
Seconds (statsStartTime + statsDuration - 0.0001));
430 std::vector <uint64_t> dlDataRxed;
431 for (
int i = 0; i <
m_nUser; i++)
438 dlDataRxed.push_back (data);
439 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)dlDataRxed.at (i) <<
" thr " << (double)dlDataRxed.at (i) / statsDuration <<
" ref " <<
m_thrRefDl);
442 for (
int i = 0; i <
m_nUser; i++)
452 std::vector <uint64_t> ulDataRxed;
453 for (
int i = 0; i <
m_nUser; i++)
459 ulDataRxed.push_back (rlcStats->
GetUlRxData (imsi, lcId));
460 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)ulDataRxed.at (i) <<
" thr " << (double)ulDataRxed.at (i) / statsDuration <<
" ref " <<
m_thrRefUl);
463 for (
int i = 0; i <
m_nUser; i++)
467 Simulator::Destroy ();
479 std::ostringstream oss;
480 oss <<
"distances (m) = [ " ;
481 for (std::vector<uint16_t>::iterator it = dist.begin (); it != dist.end (); ++it)
491 :
TestCase (BuildNameString (dist.size (), dist)),
492 m_nUser (dist.size ()),
494 m_packetSize (packetSize),
495 m_interval (interval),
496 m_estThrPssDl (estThrPssDl),
497 m_errorModelEnabled (errorModelEnabled)
522 Ptr<Node> pgw = epcHelper->GetPgwNode ();
526 remoteHostContainer.
Create (1);
529 internet.
Install (remoteHostContainer);
538 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
575 enbPhy->SetAttribute (
"TxPower",
DoubleValue (30.0));
576 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
579 for (
int i = 0; i <
m_nUser; i++)
585 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
586 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
595 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
600 ueStaticRouting->
SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
604 lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
608 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
624 uint16_t dlPort = 1234;
625 uint16_t ulPort = 2000;
630 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
633 serverApps.
Add (dlPacketSinkHelper.
Install (ueNodes.
Get (u)));
634 serverApps.
Add (ulPacketSinkHelper.
Install (remoteHost));
638 dlClient.SetAttribute (
"MaxPackets",
UintegerValue (1000000));
646 clientApps.
Add (dlClient.Install (remoteHost));
653 double statsStartTime = 0.04;
654 double statsDuration = 0.5;
655 double tolerance = 0.1;
656 Simulator::Stop (
Seconds (statsStartTime + statsDuration - 0.0001));
670 NS_LOG_INFO (
"DL - Test with " << m_nUser <<
" user(s)");
671 std::vector <uint64_t> dlDataRxed;
672 for (
int i = 0; i <
m_nUser; i++)
678 dlDataRxed.push_back (rlcStats->
GetDlRxData (imsi, lcId));
679 NS_LOG_INFO (
"\tUser " << i <<
" dist " <<
m_dist.at (i) <<
" imsi " << imsi <<
" bytes rxed " << (double)dlDataRxed.at (i) <<
" thr " << (double)dlDataRxed.at (i) / statsDuration <<
" ref " <<
m_estThrPssDl.at (i));
682 for (
int i = 0; i <
m_nUser; i++)
687 Simulator::Destroy ();
holds a vector of ns3::Application pointers.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
AttributeValue implementation for Boolean.
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
virtual ~LenaPssFfMacSchedulerTestCase2()
holds a vector of std::pair of Ptr and interface index.
void SetDefaultRoute(Ipv4Address nextHop, uint32_t interface, uint32_t metric=0)
Add a default route to the static routing table.
Hold variables of type string.
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
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container. ...
virtual void DoRun(void)
Implementation to actually run this TestCase.
Ptr< LteEnbPhy > GetPhy(void) const
Mobility model for which the current position does not change once it has been set and until it is se...
std::vector< uint16_t > m_packetSize
std::vector< uint32_t > m_estThrPssDl
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
aggregate IP/TCP/UDP functionality to existing Nodes.
static std::string BuildNameString(uint16_t nUser, std::vector< uint16_t > dist)
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
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.
uint8_t ActivateDedicatedEpsBearer(NetDeviceContainer ueDevices, EpsBearer bearer, Ptr< EpcTft > tft)
Activate a dedicated EPS bearer on a given set of UE devices.
ApplicationContainer Install(NodeContainer c)
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
LenaPssFfMacSchedulerTestCase1(uint16_t nUser, uint16_t dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool errorModelEnabled)
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.
This system test program creates different test cases with a single eNB and several UEs...
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
AttributeValue implementation for Time.
uint64_t GetDlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received downlink data bytes.
Hold an unsigned integer type.
static LenaTestPssFfMacSchedulerSuite lenaTestPssFfMacSchedulerSuite
LenaPssFfMacSchedulerTestCase2(std::vector< uint16_t > dist, std::vector< uint32_t > estThrPssDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled)
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...
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
Access to the Ipv4 forwarding table, interfaces, and configuration.
LenaTestPssFfMacSchedulerSuite()
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
virtual void DoRun(void)
Implementation to actually run this TestCase.
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())
std::vector< uint16_t > m_dist
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
void SetPosition(const Vector &position)
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
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.
uint64_t GetUlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received uplink data bytes.
Ipv4 addresses are stored in host order in this class.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
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 SetEpcHelper(Ptr< EpcHelper > h)
Set the EpcHelper to be used to setup the EPC network in conjunction with the setup of the LTE radio ...
Helper class that adds ns3::Ipv4StaticRouting objects.
AttributeValue implementation for DataRate.
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetDefault(std::string name, const AttributeValue &value)
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
std::string GetName(void) const
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
static std::string BuildNameString(uint16_t nUser, uint16_t dist)
virtual ~LenaPssFfMacSchedulerTestCase1()
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
static const uint32_t packetSize
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
Ptr< LteUePhy > GetPhy(void) const
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
The eNodeB device implementation.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
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
The LteUeNetDevice class implements the UE net device.