15#include "ns3/boolean.h" 
   16#include "ns3/constant-position-mobility-model.h" 
   17#include "ns3/double.h" 
   19#include "ns3/eps-bearer.h" 
   20#include "ns3/ff-mac-scheduler.h" 
   21#include "ns3/internet-module.h" 
   22#include "ns3/ipv4-global-routing-helper.h" 
   24#include "ns3/lte-enb-net-device.h" 
   25#include "ns3/lte-enb-phy.h" 
   26#include "ns3/lte-helper.h" 
   27#include "ns3/lte-ue-net-device.h" 
   28#include "ns3/lte-ue-phy.h" 
   29#include "ns3/lte-ue-rrc.h" 
   30#include "ns3/mobility-helper.h" 
   31#include "ns3/net-device-container.h" 
   32#include "ns3/network-module.h" 
   33#include "ns3/node-container.h" 
   34#include "ns3/object.h" 
   35#include "ns3/packet-sink-helper.h" 
   36#include "ns3/packet.h" 
   37#include "ns3/point-to-point-epc-helper.h" 
   38#include "ns3/point-to-point-helper.h" 
   40#include "ns3/radio-bearer-stats-calculator.h" 
   41#include "ns3/simulator.h" 
   42#include "ns3/spectrum-error-model.h" 
   43#include "ns3/spectrum-interference.h" 
   44#include "ns3/string.h" 
   46#include "ns3/udp-client-server-helper.h" 
   59    NS_LOG_INFO(
"creating LenaTestCqaFfMacSchedulerSuite");
 
   61    bool errorModel = 
false;
 
   87                TestCase::Duration::EXTENSIVE);
 
   89                TestCase::Duration::EXTENSIVE);
 
   91                TestCase::Duration::EXTENSIVE);
 
  114                TestCase::Duration::EXTENSIVE);
 
  116                TestCase::Duration::EXTENSIVE);
 
  118                TestCase::Duration::EXTENSIVE);
 
  141                TestCase::Duration::EXTENSIVE);
 
  143                TestCase::Duration::EXTENSIVE);
 
  145                TestCase::Duration::EXTENSIVE);
 
  167                TestCase::Duration::EXTENSIVE);
 
  169                TestCase::Duration::EXTENSIVE);
 
  171                TestCase::Duration::EXTENSIVE);
 
  178                TestCase::Duration::QUICK);
 
  187    std::vector<double> dist1;
 
  189    dist1.push_back(4800);  
 
  190    dist1.push_back(6000);  
 
  191    dist1.push_back(10000); 
 
  192    std::vector<uint16_t> packetSize1;
 
  193    packetSize1.push_back(100);
 
  194    packetSize1.push_back(100);
 
  195    packetSize1.push_back(100);
 
  196    packetSize1.push_back(100);
 
  197    std::vector<uint32_t> estThrCqaDl1;
 
  198    estThrCqaDl1.push_back(132000); 
 
  199    estThrCqaDl1.push_back(132000); 
 
  200    estThrCqaDl1.push_back(132000); 
 
  201    estThrCqaDl1.push_back(132000); 
 
  203                TestCase::Duration::QUICK);
 
  212    std::vector<double> dist2;
 
  214    dist2.push_back(4800);  
 
  215    dist2.push_back(6000);  
 
  216    dist2.push_back(10000); 
 
  217    std::vector<uint16_t> packetSize2;
 
  218    packetSize2.push_back(200);
 
  219    packetSize2.push_back(200);
 
  220    packetSize2.push_back(200);
 
  221    packetSize2.push_back(200);
 
  222    std::vector<uint32_t> estThrCqaDl2;
 
  223    estThrCqaDl2.push_back(230000); 
 
  224    estThrCqaDl2.push_back(230000); 
 
  225    estThrCqaDl2.push_back(230000); 
 
  226    estThrCqaDl2.push_back(230000); 
 
  228                TestCase::Duration::QUICK);
 
  237    std::vector<double> dist3;
 
  239    dist3.push_back(4800); 
 
  240    dist3.push_back(6000); 
 
  241    std::vector<uint16_t> packetSize3;
 
  242    packetSize3.push_back(100);
 
  243    packetSize3.push_back(200);
 
  244    packetSize3.push_back(300);
 
  245    std::vector<uint32_t> estThrCqaDl3;
 
  246    estThrCqaDl3.push_back(132000); 
 
  247    estThrCqaDl3.push_back(232000); 
 
  248    estThrCqaDl3.push_back(332000); 
 
  250                TestCase::Duration::QUICK);
 
 
  264    std::ostringstream oss;
 
  265    oss << nUser << 
" UEs, distance " << dist << 
" m";
 
 
  275                                                               bool errorModelEnabled)
 
  276    : 
TestCase(BuildNameString(nUser, dist)),
 
  280      m_interval(interval),
 
  281      m_thrRefDl(thrRefDl),
 
  282      m_thrRefUl(thrRefUl),
 
  283      m_errorModelEnabled(errorModelEnabled)
 
 
  314    lteHelper->SetEpcHelper(epcHelper);
 
  322    remoteHostContainer.
Create(1);
 
  325    internet.Install(remoteHostContainer);
 
  334    ipv4h.
SetBase(
"1.0.0.0", 
"255.0.0.0");
 
  342    remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"), 
Ipv4Mask(
"255.0.0.0"), 1);
 
  355    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  365    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  366    mobility.Install(enbNodes);
 
  367    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  368    mobility.Install(ueNodes);
 
  373    lteHelper->SetSchedulerType(
"ns3::CqaFfMacScheduler");
 
  375    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  376    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  380    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  381    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  384    for (
int i = 0; i < 
m_nUser; i++)
 
  388        mm->SetPosition(Vector(
m_dist, 0.0, 0.0));
 
  392        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  396    internet.Install(ueNodes);
 
  407        ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
 
  411    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  426        lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, 
EpcTft::Default());
 
  430    uint16_t dlPort = 1234;
 
  431    uint16_t ulPort = 2000;
 
  442        serverApps.Add(ulPacketSinkHelper.
Install(remoteHost)); 
 
  456        clientApps.Add(dlClient.
Install(remoteHost));
 
  457        clientApps.Add(ulClient.
Install(ueNodes.
Get(u)));
 
  460    serverApps.Start(
Seconds(0.030));
 
  461    clientApps.Start(
Seconds(0.030));
 
  463    double statsStartTime = 0.300; 
 
  464    double statsDuration = 0.6;
 
  465    double tolerance = 0.1;
 
  468    lteHelper->EnableRlcTraces();
 
  469    lteHelper->EnableMacTraces();
 
  477    std::vector<uint64_t> dlDataRxed;
 
  478    for (
int i = 0; i < 
m_nUser; i++)
 
  484        uint64_t 
data = rlcStats->GetDlRxData(imsi, lcId);
 
  485        dlDataRxed.push_back(
data);
 
  486        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)dlDataRxed.at(i)
 
  487                              << 
"  thr " << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " 
  491    for (
int i = 0; i < 
m_nUser; i++)
 
  496                                  " Unfair Throughput!");
 
  504    std::vector<uint64_t> ulDataRxed;
 
  505    for (
int i = 0; i < 
m_nUser; i++)
 
  511        ulDataRxed.push_back(rlcStats->GetUlRxData(imsi, lcId));
 
  512        NS_LOG_INFO(
"\tUser " << i << 
" imsi " << imsi << 
" bytes rxed " << (
double)ulDataRxed.at(i)
 
  513                              << 
"  thr " << (
double)ulDataRxed.at(i) / statsDuration << 
" ref " 
  517    for (
int i = 0; i < 
m_nUser; i++)
 
  522                                  " Unfair Throughput!");
 
 
  532    std::ostringstream oss;
 
  533    oss << 
"distances (m) = [ ";
 
  534    for (
auto it = dist.begin(); it != dist.end(); ++it)
 
 
  543                                                               std::vector<uint32_t> estThrCqaDl,
 
  546                                                               bool errorModelEnabled)
 
  547    : 
TestCase(BuildNameString(dist.size(), dist)),
 
  548      m_nUser(dist.size()),
 
  551      m_interval(interval),
 
  552      m_estThrCqaDl(estThrCqaDl),
 
  553      m_errorModelEnabled(errorModelEnabled)
 
 
  582    lteHelper->SetEpcHelper(epcHelper);
 
  588    remoteHostContainer.
Create(1);
 
  591    internet.Install(remoteHostContainer);
 
  600    ipv4h.
SetBase(
"1.0.0.0", 
"255.0.0.0");
 
  608    remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"), 
Ipv4Mask(
"255.0.0.0"), 1);
 
  613    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  623    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  624    mobility.Install(enbNodes);
 
  625    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  626    mobility.Install(ueNodes);
 
  631    lteHelper->SetSchedulerType(
"ns3::CqaFfMacScheduler");
 
  633    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  634    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  638    enbPhy->SetAttribute(
"TxPower", 
DoubleValue(30.0));
 
  639    enbPhy->SetAttribute(
"NoiseFigure", 
DoubleValue(5.0));
 
  642    for (
int i = 0; i < 
m_nUser; i++)
 
  646        mm->SetPosition(Vector(
m_dist.at(i), 0.0, 0.0));
 
  650        uePhy->SetAttribute(
"NoiseFigure", 
DoubleValue(9.0));
 
  654    internet.Install(ueNodes);
 
  665        ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
 
  669    lteHelper->Attach(ueDevs, enbDevs.
Get(0));
 
  685        lteHelper->ActivateDedicatedEpsBearer(ueDevice, bearer, 
EpcTft::Default());
 
  689    uint16_t dlPort = 1234;
 
  690    uint16_t ulPort = 2000;
 
  701        serverApps.Add(ulPacketSinkHelper.
Install(remoteHost)); 
 
  715        clientApps.Add(dlClient.
Install(remoteHost));
 
  716        clientApps.Add(ulClient.
Install(ueNodes.
Get(u)));
 
  719    serverApps.Start(
Seconds(0.030));
 
  720    clientApps.Start(
Seconds(0.030));
 
  722    double statsStartTime = 0.04; 
 
  723    double statsDuration = 0.5;
 
  724    double tolerance = 0.1;
 
  727    lteHelper->EnableRlcTraces();
 
  740    std::vector<uint64_t> dlDataRxed;
 
  741    for (
int i = 0; i < 
m_nUser; i++)
 
  747        dlDataRxed.push_back(rlcStats->GetDlRxData(imsi, lcId));
 
  748        NS_LOG_INFO(
"\tUser " << i << 
" dist " << 
m_dist.at(i) << 
" imsi " << imsi << 
" bytes rxed " 
  749                              << (
double)dlDataRxed.at(i) << 
"  thr " 
  750                              << (
double)dlDataRxed.at(i) / statsDuration << 
" ref " 
  754    for (
int i = 0; i < 
m_nUser; i++)
 
  759                                  " Unfair Throughput!");
 
 
This is a system test program.
double m_dist
distance between the nodes
~LenaCqaFfMacSchedulerTestCase1() override
uint16_t m_interval
interval time in ms
double m_thrRefUl
estimated uplink throughput
uint16_t m_nUser
number of UE nodes
void DoRun() override
Implementation to actually run this TestCase.
uint16_t m_packetSize
packet size in bytes
LenaCqaFfMacSchedulerTestCase1(uint16_t nUser, double dist, double thrRefDl, double thrRefUl, uint16_t packetSize, uint16_t interval, bool errorModelEnabled)
Constructor.
double m_thrRefDl
estimated downlink throughput
static std::string BuildNameString(uint16_t nUser, double dist)
Builds the test name string based on provided parameter values.
bool m_errorModelEnabled
whether error model is enabled
This is a system test program.
uint16_t m_nUser
number of UE nodes
bool m_errorModelEnabled
whether the error model is enabled
uint16_t m_interval
UDP interval time in ms.
static std::string BuildNameString(uint16_t nUser, std::vector< double > dist)
Builds the test name string based on provided parameter values.
std::vector< double > m_dist
distance between the nodes
~LenaCqaFfMacSchedulerTestCase2() override
LenaCqaFfMacSchedulerTestCase2(std::vector< double > dist, std::vector< uint32_t > estThrCqaDl, std::vector< uint16_t > packetSize, uint16_t interval, bool errorModelEnabled)
Constructor.
std::vector< uint16_t > m_packetSize
packet size in bytes
std::vector< uint32_t > m_estThrCqaDl
estimated throughput CQA DL
void DoRun() override
Implementation to actually run this TestCase.
The test suite for testing CQA scheduler functionality.
LenaTestCqaFfMacSchedulerSuite()
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 LenaTestCqaFfMacSchedulerSuite lenaTestCqaFfMacSchedulerSuite
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.