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>
38 #include <ns3/eps-bearer.h>
39 #include <ns3/node-container.h>
40 #include <ns3/mobility-helper.h>
41 #include <ns3/net-device-container.h>
42 #include <ns3/lte-ue-net-device.h>
43 #include <ns3/lte-enb-net-device.h>
44 #include <ns3/lte-ue-rrc.h>
45 #include <ns3/lte-helper.h>
46 #include "ns3/string.h"
47 #include "ns3/double.h"
48 #include <ns3/lte-enb-phy.h>
49 #include <ns3/lte-ue-phy.h>
50 #include <ns3/boolean.h>
61 :
TestSuite (
"lte-tta-ff-mac-scheduler", SYSTEM)
63 NS_LOG_INFO (
"creating LenaTestTtaFfMacSchedulerSuite");
65 bool errorModel =
false;
164 std::ostringstream oss;
165 oss << nUser <<
" UEs, distance " << dist <<
" m";
170 :
TestCase (BuildNameString (nUser, dist)),
173 m_thrRefDl (thrRefDl),
174 m_thrRefUl (thrRefUl),
175 m_errorModelEnabled (errorModelEnabled)
226 lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
236 enbPhy->SetAttribute (
"TxPower",
DoubleValue (30.0));
237 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
240 for (
int i = 0; i <
m_nUser; i++)
246 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
247 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
251 double statsStartTime = 0.300;
252 double statsDuration = 0.6;
253 double tolerance = 0.1;
254 Simulator::Stop (Seconds (statsStartTime + statsDuration - 0.000001));
269 std::vector <uint64_t> dlDataRxed;
270 for (
int i = 0; i <
m_nUser; i++)
275 dlDataRxed.push_back (rlcStats->
GetDlRxData (imsi, lcId));
276 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)dlDataRxed.at (i) <<
" thr " << (double)dlDataRxed.at (i) / statsDuration <<
" ref " <<
m_thrRefDl);
285 for (
int i = 0; i <
m_nUser; i++)
287 double throughput = (double)dlDataRxed.at (i) / statsDuration;
288 if (throughput != 0 && found == 0)
293 else if (throughput != 0 && found == 1)
305 std::vector <uint64_t> ulDataRxed;
306 for (
int i = 0; i <
m_nUser; i++)
312 ulDataRxed.push_back (rlcStats->
GetUlRxData (imsi, lcId));
313 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)ulDataRxed.at (i) <<
" thr " << (double)ulDataRxed.at (i) / statsDuration <<
" ref " <<
m_thrRefUl);
321 for (
int i = 0; i <
m_nUser; i++)
325 Simulator::Destroy ();
LenaTtaFfMacSchedulerTestCase(uint16_t nUser, uint16_t dist, double thrRefDl, double thrRefUl, bool errorModelEnabled)
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
NetDeviceContainer InstallEnbDevice(NodeContainer c)
create a set of eNB devices
hold variables of type string
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
#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...
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...
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
void EnableRlcTraces(void)
Enable trace sinks for RLC layer.
virtual void DoRun(void)
Implementation to actually run this TestCase.
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Call ActivateDataRadioBearer (ueDevice, bearer) for each UE device in a given set.
void SetSchedulerType(std::string type)
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.
hold objects of type ns3::Time
uint64_t GetDlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received downlink data bytes.
holds a vector of ns3::NetDevice pointers
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())
static std::string BuildNameString(uint16_t nUser, uint16_t dist)
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
This system test program creates different test cases with a single eNB and several UEs...
void SetPosition(const Vector &position)
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.
uint64_t GetUlRxData(uint64_t imsi, uint8_t lcid)
Gets the number of received uplink data bytes.
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
static LenaTestTtaFfMacSchedulerSuite lenaTestTtaFfMacSchedulerSuite
NS_LOG_COMPONENT_DEFINE("LenaTestTtaFfMacScheduler")
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void EnableMacTraces(void)
Enable trace sinks for MAC layer.
Ptr< LteUePhy > GetPhy(void) const
Hold a floating point type.
void SetAttribute(std::string name, const AttributeValue &value)
The eNodeB device implementation.
Ptr< T > GetObject(void) const
virtual ~LenaTtaFfMacSchedulerTestCase()
LenaTestTtaFfMacSchedulerSuite()
The LteUeNetDevice class implements the UE net device.