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/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-tdtbfq-ff-mac-scheduler", SYSTEM)
 
   68   NS_LOG_INFO (
"creating LenaTestTdTbfqFfMacSchedulerSuite");
 
   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> estThrTdTbfqDl1;
 
  177   estThrTdTbfqDl1.push_back (132000); 
 
  178   estThrTdTbfqDl1.push_back (132000); 
 
  179   estThrTdTbfqDl1.push_back (132000); 
 
  180   estThrTdTbfqDl1.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 (200);
 
  195   packetSize2.push_back (200);
 
  196   packetSize2.push_back (200);
 
  197   packetSize2.push_back (200);
 
  198   std::vector<uint32_t> estThrTdTbfqDl2;
 
  199   estThrTdTbfqDl2.push_back (180232); 
 
  200   estThrTdTbfqDl2.push_back (180232); 
 
  201   estThrTdTbfqDl2.push_back (180232); 
 
  202   estThrTdTbfqDl2.push_back (180232); 
 
  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> estThrTdTbfqDl3;
 
  219   estThrTdTbfqDl3.push_back (132000); 
 
  220   estThrTdTbfqDl3.push_back (232000); 
 
  221   estThrTdTbfqDl3.push_back (332000); 
 
  234   std::ostringstream oss;
 
  235   oss << nUser << 
" UEs, distance " << dist << 
" m";
 
  241   : 
TestCase (BuildNameString (nUser, dist)),
 
  245     m_packetSize (packetSize),
 
  246     m_interval (interval),
 
  247     m_thrRefDl (thrRefDl),
 
  248     m_thrRefUl (thrRefUl),
 
  249     m_errorModelEnabled (errorModelEnabled)
 
  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");
 
  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)
 
  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));
 
  412   double statsStartTime = 0.001; 
 
  413   double statsDuration = 1;
 
  414   double tolerance = 0.1;
 
  430   std::vector <uint64_t> dlDataRxed;
 
  431   for (
int i = 0; i < 
m_nUser; i++)
 
  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_estThrTdTbfqDl (estThrTdTbfqDl),
 
  497     m_errorModelEnabled (errorModelEnabled)
 
  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");
 
  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));
 
  609   for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
 
  613   mbrDl = mbrDl / ueNodes.
GetN (); 
 
  615   for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
 
  631   uint16_t dlPort = 1234;
 
  632   uint16_t ulPort = 2000;
 
  637   for (uint32_t u = 0; u < ueNodes.
GetN (); ++u)
 
  640       serverApps.
Add (dlPacketSinkHelper.
Install (ueNodes.
Get (u))); 
 
  641       serverApps.
Add (ulPacketSinkHelper.
Install (remoteHost));  
 
  645       dlClient.SetAttribute (
"MaxPackets", 
UintegerValue (1000000));
 
  653       clientApps.
Add (dlClient.Install (remoteHost));
 
  660   double statsStartTime = 0.001; 
 
  661   double statsDuration = 1.0;
 
  662   double tolerance = 0.1;
 
  677   NS_LOG_INFO (
"DL - Test with " << m_nUser << 
" user(s)");
 
  678   std::vector <uint64_t> dlDataRxed;
 
  679   for (
int i = 0; i < 
m_nUser; i++)
 
  685       dlDataRxed.push_back (rlcStats->
GetDlRxData (imsi, lcId));
 
  686       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);
 
  689   for (
int i = 0; i < 
m_nUser; i++)