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)
272 lteHelper->SetEpcHelper (epcHelper);
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");
299 remoteHostStaticRouting->AddNetworkRouteTo (
Ipv4Address (
"7.0.0.0"),
Ipv4Mask (
"255.0.0.0"), 1);
311 lteHelper->SetAttribute (
"PathlossModel",
StringValue (
"ns3::FriisSpectrumPropagationLossModel"));
329 lteHelper->SetSchedulerType (
"ns3::PssFfMacScheduler");
330 enbDevs = lteHelper->InstallEnbDevice (enbNodes);
331 ueDevs = lteHelper->InstallUeDevice (ueNodes);
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)
379 lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer,
EpcTft::Default ());
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));
409 serverApps.
Start (Seconds (0.030));
410 clientApps.
Start (Seconds (0.030));
412 double statsStartTime = 0.04;
413 double statsDuration = 0.5;
414 double tolerance = 0.1;
417 lteHelper->EnableRlcTraces ();
418 lteHelper->EnableMacTraces ();
420 rlcStats->SetAttribute (
"StartTime",
TimeValue (Seconds (statsStartTime)));
421 rlcStats->SetAttribute (
"EpochDuration",
TimeValue (Seconds (statsDuration)));
430 std::vector <uint64_t> dlDataRxed;
431 for (
int i = 0; i <
m_nUser; i++)
437 uint64_t
data = rlcStats->GetDlRxData (imsi, lcId);
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++)
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)
520 lteHelper->SetEpcHelper (epcHelper);
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");
545 remoteHostStaticRouting->AddNetworkRouteTo (
Ipv4Address (
"7.0.0.0"),
Ipv4Mask (
"255.0.0.0"), 1);
551 lteHelper->SetAttribute (
"PathlossModel",
StringValue (
"ns3::FriisSpectrumPropagationLossModel"));
569 lteHelper->SetSchedulerType (
"ns3::PssFfMacScheduler");
570 enbDevs = lteHelper->InstallEnbDevice (enbNodes);
571 ueDevs = lteHelper->InstallUeDevice (ueNodes);
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)
619 lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer,
EpcTft::Default ());
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));
650 serverApps.
Start (Seconds (0.030));
651 clientApps.
Start (Seconds (0.030));
653 double statsStartTime = 0.04;
654 double statsDuration = 0.5;
655 double tolerance = 0.1;
658 lteHelper->EnableRlcTraces ();
660 rlcStats->SetAttribute (
"StartTime",
TimeValue (Seconds (statsStartTime)));
661 rlcStats->SetAttribute (
"EpochDuration",
TimeValue (Seconds (statsDuration)));
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++)
holds a vector of ns3::Application pointers.
static Ipv4Address GetAny(void)
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
static std::string BuildNameString(uint16_t nUser, std::vector< uint16_t > dist)
std::vector< uint16_t > m_packetSize
This system test program creates different test cases with a single eNB and several UEs...
holds a vector of std::pair of Ptr and interface index.
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)
#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...
a class to represent an Ipv4 address mask
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container. ...
Mobility model for which the current position does not change once it has been set and until it is se...
static Ptr< EpcTft > Default()
creates a TFT matching any traffic
static void Run(void)
Run the simulation until one of:
virtual void DoRun(void)
Implementation to actually run this TestCase.
aggregate IP/TCP/UDP functionality to existing Nodes.
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.
static std::string BuildNameString(uint16_t nUser, uint16_t dist)
ApplicationContainer Install(NodeContainer c)
virtual ~LenaPssFfMacSchedulerTestCase1()
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
NS_LOG_COMPONENT_DEFINE("LenaTestPssFfMacScheduler")
Class for representing data rates.
This class contains the specification of EPS Bearers.
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
hold objects of type ns3::Time
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
LenaTestPssFfMacSchedulerSuite()
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)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
Access to the Ipv4 forwarding table, interfaces, and configuration.
void SetAttribute(std::string name, const AttributeValue &value)
Record an attribute to be set in each Application after it is is created.
void SetDefault(std::string name, const AttributeValue &value)
keep track of a set of node pointers.
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())
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
std::vector< uint32_t > m_estThrPssDl
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Helper class used to assign positions and mobility models to nodes.
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...
virtual ~LenaPssFfMacSchedulerTestCase2()
Helper class that adds ns3::Ipv4StaticRouting objects.
hold objects of type ns3::DataRate
static void Stop(void)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
LenaPssFfMacSchedulerTestCase2(std::vector< uint16_t > dist, std::vector< uint32_t > estThrPssDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled)
virtual void DoRun(void)
Implementation to actually run this TestCase.
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.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
std::vector< uint16_t > m_dist
static LenaTestPssFfMacSchedulerSuite lenaTestPssFfMacSchedulerSuite
LenaPssFfMacSchedulerTestCase1(uint16_t nUser, uint16_t dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool errorModelEnabled)
Hold a floating point type.
The eNodeB device implementation.
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
The LteUeNetDevice class implements the UE net device.