13#include "ns3/boolean.h" 
   14#include "ns3/constant-position-mobility-model.h" 
   15#include "ns3/double.h" 
   17#include "ns3/eps-bearer.h" 
   18#include "ns3/ff-mac-scheduler.h" 
   19#include "ns3/internet-module.h" 
   20#include "ns3/ipv4-global-routing-helper.h" 
   22#include "ns3/lte-enb-net-device.h" 
   23#include "ns3/lte-enb-phy.h" 
   24#include "ns3/lte-helper.h" 
   25#include "ns3/lte-ue-net-device.h" 
   26#include "ns3/lte-ue-phy.h" 
   27#include "ns3/lte-ue-rrc.h" 
   28#include "ns3/mobility-helper.h" 
   29#include "ns3/net-device-container.h" 
   30#include "ns3/network-module.h" 
   31#include "ns3/node-container.h" 
   32#include "ns3/object.h" 
   33#include "ns3/packet-sink-helper.h" 
   34#include "ns3/packet.h" 
   35#include "ns3/point-to-point-epc-helper.h" 
   36#include "ns3/point-to-point-helper.h" 
   38#include "ns3/radio-bearer-stats-calculator.h" 
   39#include "ns3/simulator.h" 
   40#include "ns3/spectrum-error-model.h" 
   41#include "ns3/spectrum-interference.h" 
   42#include "ns3/string.h" 
   44#include "ns3/udp-client-server-helper.h" 
   57    NS_LOG_INFO(
"creating LenaTestPssFfMacSchedulerSuite");
 
   59    bool errorModel = 
false;
 
   85                TestCase::Duration::EXTENSIVE);
 
   87                TestCase::Duration::EXTENSIVE);
 
   89                TestCase::Duration::EXTENSIVE);
 
  112                TestCase::Duration::EXTENSIVE);
 
  114                TestCase::Duration::EXTENSIVE);
 
  116                TestCase::Duration::EXTENSIVE);
 
  139                TestCase::Duration::EXTENSIVE);
 
  141                TestCase::Duration::EXTENSIVE);
 
  143                TestCase::Duration::EXTENSIVE);
 
  165                TestCase::Duration::EXTENSIVE);
 
  167                TestCase::Duration::EXTENSIVE);
 
  169                TestCase::Duration::EXTENSIVE);
 
  176                TestCase::Duration::QUICK);
 
  185    std::vector<double> dist1;
 
  187    dist1.push_back(4800);  
 
  188    dist1.push_back(6000);  
 
  189    dist1.push_back(10000); 
 
  190    std::vector<uint16_t> packetSize1;
 
  191    packetSize1.push_back(100);
 
  192    packetSize1.push_back(100);
 
  193    packetSize1.push_back(100);
 
  194    packetSize1.push_back(100);
 
  195    std::vector<uint32_t> estThrPssDl1;
 
  196    estThrPssDl1.push_back(132000); 
 
  197    estThrPssDl1.push_back(132000); 
 
  198    estThrPssDl1.push_back(132000); 
 
  199    estThrPssDl1.push_back(132000); 
 
  201                TestCase::Duration::QUICK);
 
  210    std::vector<double> dist2;
 
  212    dist2.push_back(4800);  
 
  213    dist2.push_back(6000);  
 
  214    dist2.push_back(10000); 
 
  215    std::vector<uint16_t> packetSize2;
 
  216    packetSize2.push_back(200);
 
  217    packetSize2.push_back(200);
 
  218    packetSize2.push_back(200);
 
  219    packetSize2.push_back(200);
 
  220    std::vector<uint32_t> estThrPssDl2;
 
  221    estThrPssDl2.push_back(230000); 
 
  222    estThrPssDl2.push_back(230000); 
 
  223    estThrPssDl2.push_back(230000); 
 
  224    estThrPssDl2.push_back(230000); 
 
  226                TestCase::Duration::QUICK);
 
  235    std::vector<double> dist3;
 
  237    dist3.push_back(4800); 
 
  238    dist3.push_back(6000); 
 
  239    std::vector<uint16_t> packetSize3;
 
  240    packetSize3.push_back(100);
 
  241    packetSize3.push_back(200);
 
  242    packetSize3.push_back(300);
 
  243    std::vector<uint32_t> estThrPssDl3;
 
  244    estThrPssDl3.push_back(132000); 
 
  245    estThrPssDl3.push_back(232000); 
 
  246    estThrPssDl3.push_back(332000); 
 
  248                TestCase::Duration::QUICK);
 
 
  262    std::ostringstream oss;
 
  263    oss << nUser << 
" UEs, distance " << dist << 
" m";
 
 
  273                                                               bool errorModelEnabled)
 
  274    : 
TestCase(BuildNameString(nUser, dist)),
 
  278      m_interval(interval),
 
  279      m_thrRefDl(thrRefDl),
 
  280      m_thrRefUl(thrRefUl),
 
  281      m_errorModelEnabled(errorModelEnabled)
 
 
  312    lteHelper->SetEpcHelper(epcHelper);
 
  320    remoteHostContainer.
Create(1);
 
  323    internet.Install(remoteHostContainer);
 
  332    ipv4h.
SetBase(
"1.0.0.0", 
"255.0.0.0");
 
  340    remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"), 
Ipv4Mask(
"255.0.0.0"), 1);
 
  353    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  363    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  364    mobility.Install(enbNodes);
 
  365    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  366    mobility.Install(ueNodes);
 
  371    lteHelper->SetSchedulerType(
"ns3::PssFfMacScheduler");
 
  373    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  374    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  378    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  379    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  382    for (
int i = 0; i < 
m_nUser; i++)
 
  386        mm->SetPosition(Vector(
m_dist, 0.0, 0.0));
 
  390        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  394    internet.Install(ueNodes);
 
  405        ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
 
  409    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  424        lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, 
EpcTft::Default());
 
  428    uint16_t dlPort = 1234;
 
  429    uint16_t ulPort = 2000;
 
  440        serverApps.Add(ulPacketSinkHelper.
Install(remoteHost)); 
 
  454        clientApps.Add(dlClient.
Install(remoteHost));
 
  455        clientApps.Add(ulClient.
Install(ueNodes.
Get(u)));
 
  458    serverApps.Start(
Seconds(0.030));
 
  459    clientApps.Start(
Seconds(0.030));
 
  461    double statsStartTime = 0.300; 
 
  462    double statsDuration = 0.6;
 
  463    double tolerance = 0.1;
 
  466    lteHelper->EnableRlcTraces();
 
  467    lteHelper->EnableMacTraces();
 
  479    std::vector<uint64_t> dlDataRxed;
 
  480    for (
int i = 0; i < 
m_nUser; i++)
 
  486        uint64_t 
data = rlcStats->GetDlRxData(imsi, lcId);
 
  487        dlDataRxed.push_back(
data);
 
  488        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)dlDataRxed.at(i)
 
  489                              << 
"  thr " << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " 
  493    for (
int i = 0; i < 
m_nUser; i++)
 
  498                                  " Unfair Throughput!");
 
  506    std::vector<uint64_t> ulDataRxed;
 
  507    for (
int i = 0; i < 
m_nUser; i++)
 
  513        ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
 
  514        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)ulDataRxed.at(i)
 
  515                              << 
"  thr " << (
double)ulDataRxed.at(i) / statsDuration << 
" ref " 
  519    for (
int i = 0; i < 
m_nUser; i++)
 
  524                                  " Unfair Throughput!");
 
 
  534    std::ostringstream oss;
 
  535    oss << 
"distances (m) = [ ";
 
  536    for (
auto it = dist.begin(); it != dist.end(); ++it)
 
 
  545                                                               std::vector<uint32_t> estThrPssDl,
 
  548                                                               bool errorModelEnabled)
 
  549    : 
TestCase(BuildNameString(dist.size(), dist)),
 
  550      m_nUser(dist.size()),
 
  553      m_interval(interval),
 
  554      m_estThrPssDl(estThrPssDl),
 
  555      m_errorModelEnabled(errorModelEnabled)
 
 
  584    lteHelper->SetEpcHelper(epcHelper);
 
  590    remoteHostContainer.
Create(1);
 
  593    internet.Install(remoteHostContainer);
 
  602    ipv4h.
SetBase(
"1.0.0.0", 
"255.0.0.0");
 
  610    remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"), 
Ipv4Mask(
"255.0.0.0"), 1);
 
  615    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  625    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  626    mobility.Install(enbNodes);
 
  627    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  628    mobility.Install(ueNodes);
 
  633    lteHelper->SetSchedulerType(
"ns3::PssFfMacScheduler");
 
  635    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  636    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  640    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  641    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  644    for (
int i = 0; i < 
m_nUser; i++)
 
  648        mm->SetPosition(Vector(
m_dist.at(i), 0.0, 0.0));
 
  652        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  656    internet.Install(ueNodes);
 
  667        ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
 
  671    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  687        lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, 
EpcTft::Default());
 
  691    uint16_t dlPort = 1234;
 
  692    uint16_t ulPort = 2000;
 
  703        serverApps.Add(ulPacketSinkHelper.
Install(remoteHost)); 
 
  717        clientApps.Add(dlClient.
Install(remoteHost));
 
  718        clientApps.Add(ulClient.
Install(ueNodes.
Get(u)));
 
  721    serverApps.Start(
Seconds(0.030));
 
  722    clientApps.Start(
Seconds(0.030));
 
  724    double statsStartTime = 0.04; 
 
  725    double statsDuration = 0.5;
 
  726    double tolerance = 0.1;
 
  729    lteHelper->EnableRlcTraces();
 
  741    std::vector<uint64_t> dlDataRxed;
 
  742    for (
int i = 0; i < 
m_nUser; i++)
 
  748        dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
 
  749        NS_LOG_INFO(
"\tUser " << i << 
" dist " << 
m_dist.at(i) << 
" imsi " << imsi << 
" bytes rxed " 
  750                              << (
double)dlDataRxed.at(i) << 
"  thr " 
  751                              << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " 
  755    for (
int i = 0; i < 
m_nUser; i++)
 
  760                                  " Unfair Throughput!");
 
 
This system test program creates different test cases with a single eNB and several UEs,...
uint16_t m_interval
the interval time in ms
uint16_t m_packetSize
the packet size in bytes
bool m_errorModelEnabled
indicates whether the error model is enabled
double m_thrRefDl
the DL throughput reference value
static std::string BuildNameString(uint16_t nUser, double dist)
Builds the test name string based on provided parameter values.
double m_thrRefUl
the UL throughput reference value
double m_dist
the distance between nodes
uint16_t m_nUser
number of UE nodes
LenaPssFfMacSchedulerTestCase1(uint16_t nUser, double dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool errorModelEnabled)
Constructor.
~LenaPssFfMacSchedulerTestCase1() override
void DoRun() override
Implementation to actually run this TestCase.
Similar to the LenaPssFfMacSchedulerTestCase1 with the difference that UEs are places in such a way t...
bool m_errorModelEnabled
indicates whether the error model is enabled
std::vector< double > m_dist
the distance between nodes
uint16_t m_nUser
number of UE nodes
~LenaPssFfMacSchedulerTestCase2() override
uint16_t m_interval
the interval time in ms
std::vector< uint16_t > m_packetSize
the packet size in bytes
static std::string BuildNameString(uint16_t nUser, std::vector< double > dist)
Builds the test name string based on provided parameter values.
LenaPssFfMacSchedulerTestCase2(std::vector< double > dist, std::vector< uint32_t > estThrPssDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled)
Constructor.
void DoRun() override
Implementation to actually run this TestCase.
std::vector< uint32_t > m_estThrPssDl
the DL estimated throughput PSS
Lena Pss Ff Mac Scheduler Test Suite.
LenaTestPssFfMacSchedulerSuite()
holds a vector of ns3::Application pointers.
ApplicationContainer Install(NodeContainer c)
Install an application on each node of the input container configured with all the attributes set wit...
void SetAttribute(const std::string &name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
AttributeValue implementation for Boolean.
Mobility model for which the current position does not change once it has been set and until it is se...
Class for representing data rates.
AttributeValue implementation for DataRate.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Hold variables of type enum.
static Ptr< EpcTft > Default()
creates a TFT matching any traffic
This class contains the specification of EPS Bearers.
@ GBR_CONV_VOICE
GBR Conversational Voice.
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Ipv4 addresses are stored in host order in this class.
static Ipv4Address GetAny()
Access to the IPv4 forwarding table, interfaces, and configuration.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
a class to represent an Ipv4 address mask
Helper class that adds ns3::Ipv4StaticRouting objects.
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...
The eNodeB device implementation.
The LteUeNetDevice class implements the UE net device.
Helper class used to assign positions and mobility models to nodes.
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
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.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Smart pointer class similar to boost::intrusive_ptr.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static void Run()
Run the simulation.
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Hold variables of type string.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
std::string GetName() const
AttributeValue implementation for Time.
Create a client application which sends UDP packets carrying a 32bit sequence number and a 64 bit tim...
Hold an unsigned integer type.
void SetDefault(std::string name, const AttributeValue &value)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
static LenaTestPssFfMacSchedulerSuite lenaTestPssFfMacSchedulerSuite
Static variable for test initialization.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
#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...
Time Seconds(double value)
Construct a Time in the indicated unit.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static const uint32_t packetSize
Packet size generated at the AP.