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-fdtbfq-ff-mac-scheduler", SYSTEM)
68 NS_LOG_INFO (
"creating LenaTestFdTbfqFfMacSchedulerSuite");
70 bool errorModel =
false;
166 std::vector<uint16_t> dist1;
168 dist1.push_back (4800);
169 dist1.push_back (6000);
170 dist1.push_back (10000);
171 std::vector<uint16_t> packetSize1;
172 packetSize1.push_back (100);
173 packetSize1.push_back (100);
174 packetSize1.push_back (100);
175 packetSize1.push_back (100);
176 std::vector<uint32_t> estThrFdTbfqDl1;
177 estThrFdTbfqDl1.push_back (132000);
178 estThrFdTbfqDl1.push_back (132000);
179 estThrFdTbfqDl1.push_back (132000);
180 estThrFdTbfqDl1.push_back (132000);
188 std::vector<uint16_t> dist2;
190 dist2.push_back (4800);
191 dist2.push_back (6000);
192 dist2.push_back (10000);
193 std::vector<uint16_t> packetSize2;
194 packetSize2.push_back (300);
195 packetSize2.push_back (300);
196 packetSize2.push_back (300);
197 packetSize2.push_back (300);
198 std::vector<uint32_t> estThrFdTbfqDl2;
199 estThrFdTbfqDl2.push_back (302266);
200 estThrFdTbfqDl2.push_back (302266);
201 estThrFdTbfqDl2.push_back (302266);
202 estThrFdTbfqDl2.push_back (302266);
210 std::vector<uint16_t> dist3;
212 dist3.push_back (4800);
213 dist3.push_back (6000);
214 std::vector<uint16_t> packetSize3;
215 packetSize3.push_back (100);
216 packetSize3.push_back (200);
217 packetSize3.push_back (300);
218 std::vector<uint32_t> estThrFdTbfqDl3;
219 estThrFdTbfqDl3.push_back (132000);
220 estThrFdTbfqDl3.push_back (232000);
221 estThrFdTbfqDl3.push_back (332000);
234 std::ostringstream oss;
235 oss << nUser <<
" UEs, distance " << dist <<
" m";
241 :
TestCase (BuildNameString (nUser, dist)),
244 m_packetSize (packetSize),
245 m_interval (interval),
246 m_thrRefDl (thrRefDl),
247 m_thrRefUl (thrRefUl),
248 m_errorModelEnabled (errorModelEnabled)
271 lteHelper->SetEpcHelper (epcHelper);
275 Ptr<Node> pgw = epcHelper->GetPgwNode ();
279 remoteHostContainer.
Create (1);
282 internet.
Install (remoteHostContainer);
291 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
298 remoteHostStaticRouting->AddNetworkRouteTo (
Ipv4Address (
"7.0.0.0"),
Ipv4Mask (
"255.0.0.0"), 1);
310 lteHelper->SetAttribute (
"PathlossModel",
StringValue (
"ns3::FriisSpectrumPropagationLossModel"));
328 lteHelper->SetSchedulerType (
"ns3::FdTbfqFfMacScheduler");
329 enbDevs = lteHelper->InstallEnbDevice (enbNodes);
330 ueDevs = lteHelper->InstallUeDevice (ueNodes);
335 enbPhy->SetAttribute (
"TxPower",
DoubleValue (30.0));
336 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
339 for (
int i = 0; i <
m_nUser; i++)
345 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
346 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
355 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
360 ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
364 lteHelper->Attach (ueDevs, enbDevs.
Get (0));
367 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
378 lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer,
EpcTft::Default ());
382 uint16_t dlPort = 1234;
383 uint16_t ulPort = 2000;
388 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
391 serverApps.
Add (dlPacketSinkHelper.
Install (ueNodes.
Get (u)));
392 serverApps.
Add (ulPacketSinkHelper.
Install (remoteHost));
396 dlClient.SetAttribute (
"MaxPackets",
UintegerValue (1000000));
404 clientApps.
Add (dlClient.Install (remoteHost));
408 serverApps.
Start (Seconds (0.001));
409 clientApps.
Start (Seconds (0.001));
411 double statsStartTime = 0.001;
412 double statsDuration = 1;
413 double tolerance = 0.1;
416 lteHelper->EnableRlcTraces ();
417 lteHelper->EnableMacTraces ();
419 rlcStats->SetAttribute (
"StartTime",
TimeValue (Seconds (statsStartTime)));
420 rlcStats->SetAttribute (
"EpochDuration",
TimeValue (Seconds (statsDuration)));
429 std::vector <uint64_t> dlDataRxed;
430 for (
int i = 0; i <
m_nUser; i++)
436 uint64_t
data = rlcStats->GetDlRxData (imsi, lcId);
437 dlDataRxed.push_back (data);
438 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)dlDataRxed.at (i) <<
" thr " << (double)dlDataRxed.at (i) / statsDuration <<
" ref " <<
m_thrRefDl);
441 for (
int i = 0; i <
m_nUser; i++)
451 std::vector <uint64_t> ulDataRxed;
452 for (
int i = 0; i <
m_nUser; i++)
458 ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
459 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)ulDataRxed.at (i) <<
" thr " << (double)ulDataRxed.at (i) / statsDuration <<
" ref " <<
m_thrRefUl);
462 for (
int i = 0; i <
m_nUser; i++)
478 std::ostringstream oss;
479 oss <<
"distances (m) = [ " ;
480 for (std::vector<uint16_t>::iterator it = dist.begin (); it != dist.end (); ++it)
490 :
TestCase (BuildNameString (dist.size (), dist)),
491 m_nUser (dist.size ()),
493 m_packetSize (packetSize),
494 m_interval (interval),
495 m_estThrFdTbfqDl (estThrFdTbfqDl),
496 m_errorModelEnabled (errorModelEnabled)
519 lteHelper->SetEpcHelper (epcHelper);
521 Ptr<Node> pgw = epcHelper->GetPgwNode ();
525 remoteHostContainer.
Create (1);
528 internet.
Install (remoteHostContainer);
537 ipv4h.
SetBase (
"1.0.0.0",
"255.0.0.0");
544 remoteHostStaticRouting->AddNetworkRouteTo (
Ipv4Address (
"7.0.0.0"),
Ipv4Mask (
"255.0.0.0"), 1);
550 lteHelper->SetAttribute (
"PathlossModel",
StringValue (
"ns3::FriisSpectrumPropagationLossModel"));
568 lteHelper->SetSchedulerType (
"ns3::FdTbfqFfMacScheduler");
569 enbDevs = lteHelper->InstallEnbDevice (enbNodes);
570 ueDevs = lteHelper->InstallUeDevice (ueNodes);
574 enbPhy->SetAttribute (
"TxPower",
DoubleValue (30.0));
575 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
578 for (
int i = 0; i <
m_nUser; i++)
584 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
585 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
594 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
599 ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
603 lteHelper->Attach (ueDevs, enbDevs.
Get (0));
608 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
612 mbrDl = mbrDl / ueNodes.
GetN ();
614 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
625 lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer,
EpcTft::Default ());
630 uint16_t dlPort = 1234;
631 uint16_t ulPort = 2000;
636 for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
639 serverApps.
Add (dlPacketSinkHelper.
Install (ueNodes.
Get (u)));
640 serverApps.
Add (ulPacketSinkHelper.
Install (remoteHost));
644 dlClient.SetAttribute (
"MaxPackets",
UintegerValue (1000000));
652 clientApps.
Add (dlClient.Install (remoteHost));
656 serverApps.
Start (Seconds (0.001));
657 clientApps.
Start (Seconds (0.001));
659 double statsStartTime = 0.001;
660 double statsDuration = 1.0;
661 double tolerance = 0.1;
664 lteHelper->EnableRlcTraces ();
666 rlcStats->SetAttribute (
"StartTime",
TimeValue (Seconds (statsStartTime)));
667 rlcStats->SetAttribute (
"EpochDuration",
TimeValue (Seconds (statsDuration)));
676 NS_LOG_INFO (
"DL - Test with " << m_nUser <<
" user(s)");
677 std::vector <uint64_t> dlDataRxed;
678 for (
int i = 0; i <
m_nUser; i++)
684 dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
685 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_nUser);
688 for (
int i = 0; i <
m_nUser; i++)
holds a vector of ns3::Application pointers.
static std::string BuildNameString(uint16_t nUser, uint16_t dist)
static Ipv4Address GetAny(void)
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
std::vector< uint32_t > m_estThrFdTbfqDl
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.
virtual ~LenaFdTbfqFfMacSchedulerTestCase1()
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
static LenaTestFdTbfqFfMacSchedulerSuite lenaTestFdTbfqFfMacSchedulerSuite
LenaTestFdTbfqFfMacSchedulerSuite()
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:
std::vector< uint16_t > m_packetSize
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
virtual ~LenaFdTbfqFfMacSchedulerTestCase2()
LenaFdTbfqFfMacSchedulerTestCase1(uint16_t nUser, uint16_t dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool errorModelEnabled)
Build a set of PointToPointNetDevice objects.
static std::string BuildNameString(uint16_t nUser, std::vector< uint16_t > dist)
virtual void DoRun(void)
Implementation to actually run this TestCase.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
ApplicationContainer Install(NodeContainer c)
NS_LOG_COMPONENT_DEFINE("LenaTestFdTbfqFfMacScheduler")
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.
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
virtual void DoRun(void)
Implementation to actually run this TestCase.
This system test program creates different test cases with a single eNB and several UEs...
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.
std::vector< uint16_t > m_dist
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...
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...
LenaFdTbfqFfMacSchedulerTestCase2(std::vector< uint16_t > dist, std::vector< uint32_t > estThrFdTbfqDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled)
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
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.
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.
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.