14#include "ns3/boolean.h" 
   15#include "ns3/callback.h" 
   16#include "ns3/config.h" 
   17#include "ns3/double.h" 
   19#include "ns3/ff-mac-scheduler.h" 
   20#include "ns3/internet-stack-helper.h" 
   21#include "ns3/ipv4-address-helper.h" 
   22#include "ns3/ipv4-interface-container.h" 
   23#include "ns3/ipv4-static-routing-helper.h" 
   25#include "ns3/lte-common.h" 
   26#include "ns3/lte-enb-net-device.h" 
   27#include "ns3/lte-enb-phy.h" 
   28#include "ns3/lte-enb-rrc.h" 
   29#include "ns3/lte-helper.h" 
   30#include "ns3/lte-ue-net-device.h" 
   31#include "ns3/lte-ue-phy.h" 
   32#include "ns3/lte-ue-rrc.h" 
   33#include "ns3/mobility-helper.h" 
   34#include "ns3/net-device-container.h" 
   35#include "ns3/node-container.h" 
   36#include "ns3/point-to-point-epc-helper.h" 
   37#include "ns3/point-to-point-helper.h" 
   38#include "ns3/simulator.h" 
   39#include "ns3/string.h" 
   55                             uint8_t componentCarrierId)
 
 
   85                TestCase::Duration::EXTENSIVE);
 
   93                TestCase::Duration::EXTENSIVE);
 
  101                TestCase::Duration::EXTENSIVE);
 
  109                TestCase::Duration::EXTENSIVE);
 
  117                TestCase::Duration::EXTENSIVE);
 
  125                TestCase::Duration::EXTENSIVE);
 
  133                TestCase::Duration::EXTENSIVE);
 
  141                TestCase::Duration::EXTENSIVE);
 
  149                TestCase::Duration::EXTENSIVE);
 
  157                TestCase::Duration::EXTENSIVE);
 
  165                TestCase::Duration::QUICK);
 
  173                TestCase::Duration::EXTENSIVE);
 
  181                TestCase::Duration::EXTENSIVE);
 
  189                TestCase::Duration::EXTENSIVE);
 
  197                TestCase::Duration::EXTENSIVE);
 
  205                TestCase::Duration::EXTENSIVE);
 
  213                TestCase::Duration::EXTENSIVE);
 
  221                TestCase::Duration::EXTENSIVE);
 
 
  244      m_rsrpDbmUeServingCell(rsrpDbmUe1),
 
  245      m_rsrpDbmUeNeighborCell(rsrpDbmUe2),
 
  246      m_rsrqDbUeServingCell(rsrqDbUe1),
 
  247      m_rsrqDbUeNeighborCell(rsrqDbUe2)
 
  249    NS_LOG_INFO(
"Test UE Measurements d1 = " << d1 << 
" m. and d2 = " << d2 << 
" m.");
 
 
  266    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  267    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
false));
 
  292    positionAlloc->Add(Vector(0.0, 0.0, 0.0));   
 
  293    positionAlloc->Add(Vector(
m_d2, 
m_d1, 0.0)); 
 
  294    positionAlloc->Add(Vector(0.0, 
m_d1, 0.0));  
 
  295    positionAlloc->Add(Vector(
m_d2, 0.0, 0.0));  
 
  297    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  298    mobility.SetPositionAllocator(positionAlloc);
 
  299    mobility.Install(allNodes);
 
  305    lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
 
  307    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  308    ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
 
  309    ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
 
  312    lteHelper->Attach(ueDevs1, enbDevs.
Get(0));
 
  313    lteHelper->Attach(ueDevs2, enbDevs.
Get(1));
 
  318    lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
 
  319    lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
 
  322        "/NodeList/2/DeviceList/0/ComponentCarrierMapUe/0/LteUePhy/ReportUeMeasurements",
 
  324    Config::Connect(
"/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
  328        "/NodeList/3/DeviceList/0/ComponentCarrierMapUe/0/LteUePhy/ReportUeMeasurements",
 
  330    Config::Connect(
"/NodeList/1/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
  353            NS_LOG_DEBUG(
"UE serving cellId " << cellId << 
" Rxed RSRP " << rsrp << 
" thr " 
  361            NS_LOG_DEBUG(
"UE neighbor cellId " << cellId << 
" Rxed RSRP " << rsrp << 
" thr " 
 
  383                this << 
"Serving Cell: received IMSI " << imsi << 
" CellId " << cellId << 
" RNTI " 
  399                this << 
"Neighbor cell: received IMSI " << imsi << 
" CellId " << cellId << 
" RNTI " 
 
  422operator<<(std::vector<Time>& v, 
const uint64_t& ms)
 
  433operator<<(std::vector<uint8_t>& v, 
const uint8_t& range)
 
  446    std::vector<Time> expectedTime;
 
  447    std::vector<uint8_t> expectedRsrp;
 
  459    expectedTime.clear();
 
  460    expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1040 << 1160 << 1280 << 1400
 
  461                 << 1520 << 1640 << 1760 << 1880 << 2000 << 2120;
 
  462    expectedRsrp.clear();
 
  463    expectedRsrp << 67 << 67 << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51 << 47 << 47
 
  466                    "Piecewise test case 1 - Event A1 with very low threshold",
 
  470                TestCase::Duration::EXTENSIVE);
 
  474    expectedTime.clear();
 
  475    expectedTime << 200 << 320 << 440 << 560 << 680 << 1000 << 1120 << 1240 << 1360 << 2000 << 2120;
 
  476    expectedRsrp.clear();
 
  477    expectedRsrp << 67 << 67 << 57 << 57 << 66 << 66 << 66 << 57 << 57 << 57 << 57;
 
  479                    "Piecewise test case 1 - Event A1 with normal threshold",
 
  483                TestCase::Duration::EXTENSIVE);
 
  487    expectedTime.clear();
 
  488    expectedTime << 264 << 384 << 504 << 624 << 744 << 1064 << 1184 << 1304 << 1424 << 2064 << 2184;
 
  489    expectedRsrp.clear();
 
  490    expectedRsrp << 67 << 67 << 57 << 66 << 66 << 66 << 66 << 57 << 51 << 57 << 57;
 
  492                    "Piecewise test case 1 - Event A1 with short time-to-trigger",
 
  496                TestCase::Duration::QUICK);
 
  500    expectedTime.clear();
 
  501    expectedTime << 328 << 448 << 568 << 688 << 808 << 1128 << 1248 << 1368 << 1488 << 2128;
 
  502    expectedRsrp.clear();
 
  503    expectedRsrp << 67 << 57 << 57 << 66 << 47 << 66 << 57 << 57 << 51 << 57;
 
  505                    "Piecewise test case 1 - Event A1 with long time-to-trigger",
 
  509                TestCase::Duration::EXTENSIVE);
 
  513    expectedTime.clear();
 
  514    expectedTime << 456 << 576 << 696 << 816 << 936 << 1056 << 1176 << 1296 << 1416 << 1536;
 
  515    expectedRsrp.clear();
 
  516    expectedRsrp << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51;
 
  518                    "Piecewise test case 1 - Event A1 with super time-to-trigger",
 
  522                TestCase::Duration::EXTENSIVE);
 
  527    expectedTime.clear();
 
  528    expectedTime << 200 << 320 << 440 << 560 << 680 << 1000 << 1120 << 1240 << 1360 << 1480 << 2200;
 
  529    expectedRsrp.clear();
 
  530    expectedRsrp << 67 << 67 << 57 << 57 << 66 << 66 << 66 << 57 << 57 << 51 << 67;
 
  536        TestCase::Duration::QUICK);
 
  541    expectedTime.clear();
 
  542    expectedRsrp.clear();
 
  544                    "Piecewise test case 1 - Event A1 with very high threshold",
 
  548                TestCase::Duration::TAKES_FOREVER);
 
  555    expectedTime.clear();
 
  556    expectedRsrp.clear();
 
  558                    "Piecewise test case 1 - Event A2 with very low threshold",
 
  562                TestCase::Duration::TAKES_FOREVER);
 
  566    expectedTime.clear();
 
  567    expectedTime << 800 << 920 << 1400 << 1520 << 1640 << 1760 << 1880;
 
  568    expectedRsrp.clear();
 
  569    expectedRsrp << 47 << 47 << 51 << 51 << 47 << 47 << 51;
 
  571                    "Piecewise test case 1 - Event A2 with normal threshold",
 
  575                TestCase::Duration::QUICK);
 
  579    expectedTime.clear();
 
  580    expectedTime << 864 << 984 << 1464 << 1584 << 1704 << 1824 << 1944;
 
  581    expectedRsrp.clear();
 
  582    expectedRsrp << 47 << 47 << 51 << 51 << 47 << 51 << 51;
 
  584                    "Piecewise test case 1 - Event A2 with short time-to-trigger",
 
  588                TestCase::Duration::EXTENSIVE);
 
  592    expectedTime.clear();
 
  593    expectedTime << 928 << 1048 << 1528 << 1648 << 1768 << 1888 << 2008;
 
  594    expectedRsrp.clear();
 
  595    expectedRsrp << 47 << 66 << 51 << 47 << 47 << 51 << 57;
 
  597                    "Piecewise test case 1 - Event A2 with long time-to-trigger",
 
  601                TestCase::Duration::TAKES_FOREVER);
 
  605    expectedTime.clear();
 
  606    expectedTime << 1656 << 1776 << 1896 << 2016 << 2136;
 
  607    expectedRsrp.clear();
 
  608    expectedRsrp << 47 << 47 << 51 << 57 << 57;
 
  610                    "Piecewise test case 1 - Event A2 with super time-to-trigger",
 
  614                TestCase::Duration::QUICK);
 
  619    expectedTime.clear();
 
  620    expectedTime << 800 << 920 << 1600 << 1720 << 1840 << 1960 << 2080;
 
  621    expectedRsrp.clear();
 
  622    expectedRsrp << 47 << 47 << 47 << 47 << 51 << 51 << 57;
 
  628        TestCase::Duration::EXTENSIVE);
 
  633    expectedTime.clear();
 
  634    expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1040 << 1160 << 1280 << 1400
 
  635                 << 1520 << 1640 << 1760 << 1880 << 2000 << 2120;
 
  636    expectedRsrp.clear();
 
  637    expectedRsrp << 67 << 67 << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51 << 47 << 47
 
  640                    "Piecewise test case 1 - Event A2 with very high threshold",
 
  644                TestCase::Duration::EXTENSIVE);
 
  653    expectedTime.clear();
 
  654    expectedRsrp.clear();
 
  664                TestCase::Duration::EXTENSIVE);
 
  674                TestCase::Duration::EXTENSIVE);
 
  685                TestCase::Duration::EXTENSIVE);
 
 
  702    std::vector<Time> expectedTime,
 
  703    std::vector<uint8_t> expectedRsrp)
 
  706      m_expectedTime(expectedTime),
 
  707      m_expectedRsrp(expectedRsrp)
 
  714        NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
 
 
  734    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
  735    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
  758    positionAlloc->Add(Vector(0.0, 0.0, 0.0));   
 
  759    positionAlloc->Add(Vector(100.0, 0.0, 0.0)); 
 
  761    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
  762    mobility.SetPositionAllocator(positionAlloc);
 
  763    mobility.Install(enbNodes);
 
  764    mobility.Install(ueNodes);
 
  773    lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
 
  775    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
  776    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
  783    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
  788    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
  792        "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
  878                              "Report should not have neighboring cells information");
 
  884                              "Reporting should not have occurred at " 
  902                                  "Reporting should not have occurred at this time");
 
  905                                  "The RSRP observed differs with the reference RSRP");
 
 
  947    std::vector<Time> expectedTime;
 
  948    std::vector<uint8_t> expectedRsrp;
 
  965    expectedTime.clear();
 
  966    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
  967    expectedRsrp.clear();
 
  968    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
  970                    "Piecewise test case 2 - Event A1 with very low threshold",
 
  974                TestCase::Duration::EXTENSIVE);
 
  978    expectedTime.clear();
 
  979    expectedTime << 200 << 440 << 680 << 1000 << 1240 << 2000;
 
  980    expectedRsrp.clear();
 
  981    expectedRsrp << 73 << 63 << 72 << 72 << 59 << 59;
 
  983                    "Piecewise test case 2 - Event A1 with normal threshold",
 
  987                TestCase::Duration::TAKES_FOREVER);
 
  991    expectedTime.clear();
 
  992    expectedTime << 200 << 440 << 680 << 1000 << 1240 << 1480 << 2200;
 
  993    expectedRsrp.clear();
 
  994    expectedRsrp << 73 << 63 << 72 << 72 << 59 << 56 << 72;
 
 1000        TestCase::Duration::EXTENSIVE);
 
 1005    expectedTime.clear();
 
 1006    expectedRsrp.clear();
 
 1008                    "Piecewise test case 2 - Event A1 with very high threshold",
 
 1012                TestCase::Duration::TAKES_FOREVER);
 
 1019    expectedTime.clear();
 
 1020    expectedRsrp.clear();
 
 1022                    "Piecewise test case 2 - Event A2 with very low threshold",
 
 1026                TestCase::Duration::TAKES_FOREVER);
 
 1030    expectedTime.clear();
 
 1031    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1032    expectedRsrp.clear();
 
 1033    expectedRsrp << 52 << 56 << 52 << 56;
 
 1035                    "Piecewise test case 2 - Event A2 with normal threshold",
 
 1039                TestCase::Duration::TAKES_FOREVER);
 
 1043    expectedTime.clear();
 
 1044    expectedTime << 800 << 1600 << 1840 << 2080;
 
 1045    expectedRsrp.clear();
 
 1046    expectedRsrp << 52 << 52 << 56 << 59;
 
 1052        TestCase::Duration::EXTENSIVE);
 
 1057    expectedTime.clear();
 
 1058    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1059    expectedRsrp.clear();
 
 1060    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
 1062                    "Piecewise test case 2 - Event A2 with very high threshold",
 
 1066                TestCase::Duration::TAKES_FOREVER);
 
 1074    expectedTime.clear();
 
 1075    expectedTime << 800 << 1600;
 
 1076    expectedRsrp.clear();
 
 1077    expectedRsrp << 52 << 52;
 
 1079                    "Piecewise test case 2 - Event A3 with positive offset",
 
 1083                TestCase::Duration::QUICK);
 
 1087    expectedTime.clear();
 
 1088    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1089    expectedRsrp.clear();
 
 1090    expectedRsrp << 52 << 56 << 52 << 56;
 
 1096        TestCase::Duration::EXTENSIVE);
 
 1100    expectedTime.clear();
 
 1101    expectedTime << 960 << 1560 << 1800 << 2040;
 
 1102    expectedRsrp.clear();
 
 1103    expectedRsrp << 52 << 56 << 56 << 59;
 
 1105                    "Piecewise test case 2 - Event A3 with short time-to-trigger",
 
 1109                TestCase::Duration::EXTENSIVE);
 
 1113    expectedTime.clear();
 
 1114    expectedTime << 1720 << 1960 << 2200;
 
 1115    expectedRsrp.clear();
 
 1116    expectedRsrp << 52 << 56 << 72;
 
 1118                    "Piecewise test case 2 - Event A3 with super time-to-trigger",
 
 1122                TestCase::Duration::QUICK);
 
 1128    expectedTime.clear();
 
 1129    expectedTime << 800 << 1000 << 1600 << 1840 << 2080 << 2200;
 
 1130    expectedRsrp.clear();
 
 1131    expectedRsrp << 52 << 72 << 52 << 56 << 59 << 72;
 
 1137        TestCase::Duration::QUICK);
 
 1143    expectedTime.clear();
 
 1144    expectedTime << 400 << 800 << 1200 << 1440 << 1680 << 1920 << 2160;
 
 1145    expectedRsrp.clear();
 
 1146    expectedRsrp << 63 << 52 << 59 << 56 << 52 << 56 << 59;
 
 1148                    "Piecewise test case 2 - Event A3 with negative offset",
 
 1152                TestCase::Duration::EXTENSIVE);
 
 1160    expectedTime.clear();
 
 1161    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1162    expectedRsrp.clear();
 
 1163    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
 1165                    "Piecewise test case 2 - Event A4 with very low threshold",
 
 1169                TestCase::Duration::QUICK);
 
 1173    expectedTime.clear();
 
 1174    expectedTime << 400 << 800 << 1400 << 1640 << 1880;
 
 1175    expectedRsrp.clear();
 
 1176    expectedRsrp << 63 << 52 << 56 << 52 << 56;
 
 1178                    "Piecewise test case 2 - Event A4 with normal threshold",
 
 1182                TestCase::Duration::EXTENSIVE);
 
 1186    expectedTime.clear();
 
 1187    expectedTime << 560 << 960 << 1560 << 1800 << 2040;
 
 1188    expectedRsrp.clear();
 
 1189    expectedRsrp << 63 << 52 << 56 << 56 << 59;
 
 1191                    "Piecewise test case 2 - Event A4 with short time-to-trigger",
 
 1195                TestCase::Duration::QUICK);
 
 1199    expectedTime.clear();
 
 1200    expectedTime << 1720 << 1960 << 2200;
 
 1201    expectedRsrp.clear();
 
 1202    expectedRsrp << 52 << 56 << 72;
 
 1204                    "Piecewise test case 2 - Event A4 with super time-to-trigger",
 
 1208                TestCase::Duration::TAKES_FOREVER);
 
 1213    expectedTime.clear();
 
 1214    expectedTime << 400 << 800 << 1600 << 1840 << 2080;
 
 1215    expectedRsrp.clear();
 
 1216    expectedRsrp << 63 << 52 << 52 << 56 << 59;
 
 1222        TestCase::Duration::QUICK);
 
 1227    expectedTime.clear();
 
 1228    expectedRsrp.clear();
 
 1230                    "Piecewise test case 2 - Event A4 with very high threshold",
 
 1234                TestCase::Duration::TAKES_FOREVER);
 
 1243    expectedTime.clear();
 
 1244    expectedRsrp.clear();
 
 1246                    "Piecewise test case 2 - Event A5 with low-low threshold",
 
 1250                TestCase::Duration::EXTENSIVE);
 
 1255                    "Piecewise test case 2 - Event A5 with low-normal threshold",
 
 1259                TestCase::Duration::TAKES_FOREVER);
 
 1264                    "Piecewise test case 2 - Event A5 with low-high threshold",
 
 1268                TestCase::Duration::TAKES_FOREVER);
 
 1273    expectedTime.clear();
 
 1274    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1275    expectedRsrp.clear();
 
 1276    expectedRsrp << 52 << 56 << 52 << 56;
 
 1278                    "Piecewise test case 2 - Event A5 with normal-low threshold",
 
 1282                TestCase::Duration::EXTENSIVE);
 
 1286    expectedTime.clear();
 
 1287    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1288    expectedRsrp.clear();
 
 1289    expectedRsrp << 52 << 56 << 52 << 56;
 
 1291                    "Piecewise test case 2 - Event A5 with normal-normal threshold",
 
 1295                TestCase::Duration::EXTENSIVE);
 
 1299    expectedTime.clear();
 
 1300    expectedTime << 960 << 1560 << 1800 << 2040;
 
 1301    expectedRsrp.clear();
 
 1302    expectedRsrp << 52 << 56 << 56 << 59;
 
 1304                    "Piecewise test case 2 - Event A5 with short time-to-trigger",
 
 1308                TestCase::Duration::TAKES_FOREVER);
 
 1312    expectedTime.clear();
 
 1313    expectedTime << 1720 << 1960 << 2200;
 
 1314    expectedRsrp.clear();
 
 1315    expectedRsrp << 52 << 56 << 72;
 
 1317                    "Piecewise test case 2 - Event A5 with super time-to-trigger",
 
 1321                TestCase::Duration::QUICK);
 
 1326    expectedTime.clear();
 
 1327    expectedTime << 800 << 1600 << 1840 << 2080;
 
 1328    expectedRsrp.clear();
 
 1329    expectedRsrp << 52 << 52 << 56 << 59;
 
 1335        TestCase::Duration::QUICK);
 
 1340    expectedTime.clear();
 
 1341    expectedRsrp.clear();
 
 1343                    "Piecewise test case 2 - Event A5 with normal-high threshold",
 
 1347                TestCase::Duration::TAKES_FOREVER);
 
 1352    expectedTime.clear();
 
 1353    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1354    expectedRsrp.clear();
 
 1355    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
 1357                    "Piecewise test case 2 - Event A5 with high-low threshold",
 
 1361                TestCase::Duration::EXTENSIVE);
 
 1365    expectedTime.clear();
 
 1366    expectedTime << 400 << 800 << 1400 << 1640 << 1880;
 
 1367    expectedRsrp.clear();
 
 1368    expectedRsrp << 63 << 52 << 56 << 52 << 56;
 
 1370                    "Piecewise test case 2 - Event A5 with high-normal threshold",
 
 1374                TestCase::Duration::TAKES_FOREVER);
 
 1378    expectedTime.clear();
 
 1379    expectedRsrp.clear();
 
 1381                    "Piecewise test case 2 - Event A5 with high-high threshold",
 
 1385                TestCase::Duration::EXTENSIVE);
 
 
 1402    std::vector<Time> expectedTime,
 
 1403    std::vector<uint8_t> expectedRsrp)
 
 1406      m_expectedTime(expectedTime),
 
 1407      m_expectedRsrp(expectedRsrp)
 
 1414        NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
 
 
 1434    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
 1435    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
 1458    positionAlloc->Add(Vector(0.0, 0.0, 0.0));   
 
 1459    positionAlloc->Add(Vector(600.0, 0.0, 0.0)); 
 
 1460    positionAlloc->Add(Vector(50.0, 0.0, 0.0));  
 
 1462    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 1463    mobility.SetPositionAllocator(positionAlloc);
 
 1464    mobility.Install(enbNodes);
 
 1465    mobility.Install(ueNodes);
 
 1474    lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
 
 1476    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
 1477    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
 1485    enbRrc2->SetAttribute(
"AdmitHandoverRequest", 
BooleanValue(
false));
 
 1488    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
 1493    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
 1497        "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
 1560    std::string context,
 
 1578        this << 
" Serving cellId=" << cellId
 
 1591                              "Unexpected report content");
 
 1597                              "Unexpected report content");
 
 1603                              "Report contains cgi-info, which is not supported");
 
 1606                              "Report does not contain measured RSRP result");
 
 1609                              "Report does not contain measured RSRQ result");
 
 1610        NS_LOG_DEBUG(
this << 
" Neighbour cellId=" << it->physCellId
 
 1611                          << 
" rsrp=" << (uint16_t)it->rsrpResult << 
" (" 
 1613                          << 
" rsrq=" << (uint16_t)it->rsrqResult << 
" (" 
 1641                          "Reporting should not have occurred at this time");
 
 1644                          "The RSRP observed differs with the reference RSRP");
 
 
 1682    : 
TestSuite(
"lte-ue-measurements-piecewise-3", 
Type::SYSTEM)
 
 1684    std::vector<Time> expectedTime;
 
 1705    expectedTime.clear();
 
 1706    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1711                TestCase::Duration::QUICK);
 
 
 1727    std::vector<Time> expectedTime)
 
 1730      m_expectedTime(expectedTime)
 
 
 1750    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
 1751    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
 1776    positionAlloc->Add(Vector(0.0, 0.0, 0.0));       
 
 1777    positionAlloc->Add(Vector(200.0, 0.0, 0.0));     
 
 1778    positionAlloc->Add(Vector(1000700.0, 0.0, 0.0)); 
 
 1779    positionAlloc->Add(Vector(50.0, 0.0, 0.0));      
 
 1781    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 1782    mobility.SetPositionAllocator(positionAlloc);
 
 1783    mobility.Install(enbNodes);
 
 1784    mobility.Install(ueNodes);
 
 1793    lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
 
 1795    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
 1796    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
 1804    enbRrc2->SetAttribute(
"AdmitHandoverRequest", 
BooleanValue(
false));
 
 1806    enbRrc3->SetAttribute(
"AdmitHandoverRequest", 
BooleanValue(
false));
 
 1809    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
 1814    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
 1818        "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
 1850    std::string context,
 
 1868        this << 
" Serving cellId=" << cellId
 
 1881                              "Unexpected report content");
 
 1887                              "Unexpected report content");
 
 1892            NS_ASSERT(it.physCellId == 2 || it.physCellId == 3);
 
 1895                                  "Report contains cgi-info, which is not supported");
 
 1898                                  "Report does not contain measured RSRP result");
 
 1901                                  "Report does not contain measured RSRQ result");
 
 1902            NS_LOG_DEBUG(
this << 
" Neighbour cellId=" << it.physCellId
 
 1903                              << 
" rsrp=" << (uint16_t)it.rsrpResult << 
" (" 
 1905                              << 
" rsrq=" << (uint16_t)it.rsrqResult << 
" (" 
 1914                          "Reporting should not have occurred at " << 
Simulator::Now().GetSeconds()
 
 1928                          "Reporting should not have occurred at this time");
 
 
 1947    std::list<LteRrcSap::ReportConfigEutra> sourceConfigList;
 
 1948    std::list<LteRrcSap::ReportConfigEutra> targetConfigList;
 
 1949    std::vector<Time> expectedTime;
 
 1950    std::vector<uint8_t> expectedRsrp;
 
 1959    sourceConfigList.push_back(sourceConfig);
 
 1968    targetConfigList.push_back(targetConfig);
 
 1975    expectedTime.clear();
 
 1976    expectedTime << 200 << 680 << 1200 << 1440 << 1680 << 1920;
 
 1977    expectedRsrp.clear();
 
 1978    expectedRsrp << 55 << 55 << 53 << 53 << 53 << 53;
 
 1986        TestCase::Duration::TAKES_FOREVER);
 
 1991    expectedTime.clear();
 
 1992    expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1200 << 1840;
 
 1993    expectedRsrp.clear();
 
 1994    expectedRsrp << 55 << 55 << 55 << 55 << 55 << 55 << 55 << 53 << 53;
 
 2002        TestCase::Duration::QUICK);
 
 2008    sourceConfigList.front().threshold1.range = 54;
 
 2009    sourceConfigList.front().threshold2.range = 54;
 
 2010    sourceConfigList.front().a3Offset = 1;
 
 2011    targetConfigList.front().threshold1.range = 54;
 
 2012    targetConfigList.front().threshold2.range = 54;
 
 2013    targetConfigList.front().a3Offset = 1;
 
 2018    expectedTime.clear();
 
 2019    expectedTime << 200 << 440 << 680 << 920 << 1200 << 1440 << 1680 << 1920;
 
 2020    expectedRsrp.clear();
 
 2021    expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53;
 
 2028                TestCase::Duration::EXTENSIVE);
 
 2033    expectedTime.clear();
 
 2034    expectedRsrp.clear();
 
 2041                TestCase::Duration::TAKES_FOREVER);
 
 2046    expectedTime.clear();
 
 2047    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2048    expectedRsrp.clear();
 
 2049    expectedRsrp << 53 << 53 << 53 << 53;
 
 2056                TestCase::Duration::TAKES_FOREVER);
 
 2061    expectedTime.clear();
 
 2062    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2063    expectedRsrp.clear();
 
 2064    expectedRsrp << 53 << 53 << 53 << 53;
 
 2071                TestCase::Duration::QUICK);
 
 2076    expectedTime.clear();
 
 2077    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2078    expectedRsrp.clear();
 
 2079    expectedRsrp << 53 << 53 << 53 << 53;
 
 2086                TestCase::Duration::EXTENSIVE);
 
 2091    expectedTime.clear();
 
 2092    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2093    expectedRsrp.clear();
 
 2094    expectedRsrp << 53 << 53 << 53 << 53;
 
 2101                TestCase::Duration::TAKES_FOREVER);
 
 2106    expectedTime.clear();
 
 2107    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2108    expectedRsrp.clear();
 
 2109    expectedRsrp << 53 << 53 << 53 << 53;
 
 2116                TestCase::Duration::TAKES_FOREVER);
 
 2121    expectedTime.clear();
 
 2122    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2123    expectedRsrp.clear();
 
 2124    expectedRsrp << 53 << 53 << 53 << 53;
 
 2131                TestCase::Duration::EXTENSIVE);
 
 2135    sourceConfigList.front().threshold1.range = 52;
 
 2136    targetConfigList.front().threshold1.range = 56;
 
 2141    expectedTime.clear();
 
 2142    expectedTime << 200 << 440 << 680 << 920;
 
 2143    expectedRsrp.clear();
 
 2144    expectedRsrp << 55 << 55 << 55 << 55;
 
 2152        TestCase::Duration::EXTENSIVE);
 
 2157    expectedTime.clear();
 
 2158    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2159    expectedRsrp.clear();
 
 2160    expectedRsrp << 53 << 53 << 53 << 53;
 
 2168        TestCase::Duration::QUICK);
 
 2172    sourceConfigList.front().a3Offset = -30;
 
 2174    targetConfigList.front().a3Offset = 30;
 
 2175    expectedTime.clear();
 
 2176    expectedTime << 200 << 440 << 680 << 920;
 
 2177    expectedRsrp.clear();
 
 2178    expectedRsrp << 55 << 55 << 55 << 55;
 
 2186        TestCase::Duration::QUICK);
 
 2191    expectedTime.clear();
 
 2192    expectedTime << 200 << 440 << 680 << 920;
 
 2193    expectedRsrp.clear();
 
 2194    expectedRsrp << 55 << 55 << 55 << 55;
 
 2202        TestCase::Duration::EXTENSIVE);
 
 2206    sourceConfigList.front().threshold2.range = 52;
 
 2208    targetConfigList.front().threshold2.range = 56;
 
 2209    expectedTime.clear();
 
 2210    expectedRsrp.clear();
 
 2218        TestCase::Duration::EXTENSIVE);
 
 2223    sourceConfigList.front().a3Offset = 1;
 
 2224    sourceConfigList.front().threshold1.range = 0;
 
 2225    sourceConfigList.front().threshold2.range = 0;
 
 2227    targetConfigList.front().a3Offset = 1;
 
 2228    targetConfigList.front().threshold1.range = 0;
 
 2229    targetConfigList.front().threshold2.range = 0;
 
 2232    sourceConfigList.front().timeToTrigger = 1024;
 
 2233    targetConfigList.front().timeToTrigger = 100;
 
 2234    expectedTime.clear();
 
 2235    expectedTime << 1300 << 1540 << 1780;
 
 2236    expectedRsrp.clear();
 
 2237    expectedRsrp << 53 << 53 << 53;
 
 2244                TestCase::Duration::QUICK);
 
 2247    sourceConfigList.front().timeToTrigger = 1024;
 
 2248    targetConfigList.front().timeToTrigger = 640;
 
 2249    expectedTime.clear();
 
 2250    expectedTime << 1224 << 1464 << 1704 << 1944 << 2840 << 3080 << 3320 << 3560 << 3800 << 4040;
 
 2251    expectedRsrp.clear();
 
 2252    expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53 << 53 << 53;
 
 2259                TestCase::Duration::EXTENSIVE);
 
 
 2275    std::list<LteRrcSap::ReportConfigEutra> sourceConfigList,
 
 2276    std::list<LteRrcSap::ReportConfigEutra> targetConfigList,
 
 2277    std::vector<Time> expectedTime,
 
 2278    std::vector<uint8_t> expectedRsrp,
 
 2281      m_sourceConfigList(sourceConfigList),
 
 2282      m_targetConfigList(targetConfigList),
 
 2283      m_expectedTime(expectedTime),
 
 2284      m_expectedRsrp(expectedRsrp),
 
 2285      m_duration(duration)
 
 2292        NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
 
 
 2313    lteHelper->SetEpcHelper(epcHelper);
 
 2314    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
 2315    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
 2336    positionAlloc->Add(Vector(0.0, 0.0, 0.0));   
 
 2337    positionAlloc->Add(Vector(900.0, 0.0, 0.0)); 
 
 2338    positionAlloc->Add(Vector(400.0, 0.0, 0.0)); 
 
 2340    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 2341    mobility.SetPositionAllocator(positionAlloc);
 
 2342    mobility.Install(enbNodes);
 
 2343    mobility.Install(ueNodes);
 
 2346    Ptr<Node> pgw = epcHelper->GetPgwNode();
 
 2350    remoteHostContainer.
Create(1);
 
 2353    internet.Install(remoteHostContainer);
 
 2362    ipv4h.
SetBase(
"1.0.0.0", 
"255.0.0.0");
 
 2369    remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"), 
Ipv4Mask(
"255.0.0.0"), 1);
 
 2380    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
 2381    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
 2392        measId = enbRrc1->AddUeMeasReportConfig(*itReportConfig).at(0);
 
 2400        measId = enbRrc2->AddUeMeasReportConfig(*itReportConfig).at(0);
 
 2405    internet.Install(ueNodes);
 
 2416        ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
 
 2420    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
 2423    lteHelper->AddX2Interface(enbNodes);
 
 2427        "/NodeList/3/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 2432        "/NodeList/4/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
 2461    std::string context,
 
 2470    bool isCorrectMeasId;
 
 2476    else if (cellId == 2)
 
 2486    if (!isCorrectMeasId)
 
 2494        this << 
" Serving cellId=" << cellId
 
 2507                              "Unexpected report content");
 
 2513                              "Unexpected report content");
 
 2520                              "Report contains cgi-info, which is not supported");
 
 2523                              "Report does not contain measured RSRP result");
 
 2526                              "Report does not contain measured RSRQ result");
 
 2527        NS_LOG_DEBUG(
this << 
" Neighbour cellId=" << it->physCellId
 
 2528                          << 
" rsrp=" << (uint16_t)it->rsrpResult << 
" (" 
 2530                          << 
" rsrq=" << (uint16_t)it->rsrqResult << 
" (" 
 2558                          "Reporting should not have occurred at this time");
 
 2561                          "The RSRP observed differs with the reference RSRP");
 
 
Testing UE measurements in LTE with simulation of 2 eNodeB and 1 UE in a handover configuration.
~LteUeMeasurementsHandoverTestCase() override
std::vector< uint8_t >::iterator m_itExpectedRsrp
Pointer to the element of m_expectedRsrp which is expected to occur next in the simulation.
std::vector< Time > m_expectedTime
The list of expected time when measurement reports are received by eNodeB.
std::list< LteRrcSap::ReportConfigEutra > m_sourceConfigList
The list of active report triggering configuration for the source eNodeB.
void DoRun() override
Setup the simulation with the intended UE measurement reporting configuration, run it,...
std::set< uint8_t > m_expectedTargetCellMeasId
The list of measurement identities being tested in the target cell.
LteUeMeasurementsHandoverTestCase(std::string name, std::list< LteRrcSap::ReportConfigEutra > sourceConfigList, std::list< LteRrcSap::ReportConfigEutra > targetConfigList, std::vector< Time > expectedTime, std::vector< uint8_t > expectedRsrp, Time duration)
Constructor.
void RecvMeasurementReportCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport report)
Triggers when either one of the eNodeBs receives measurement report from UE, then perform verificatio...
void DoTeardown() override
Runs at the end of the simulation, verifying that all expected measurement reports have been examined...
Time m_duration
Duration of simulation.
std::vector< Time >::iterator m_itExpectedTime
Pointer to the element of m_expectedTime which is expected to occur next in the simulation.
std::list< LteRrcSap::ReportConfigEutra > m_targetConfigList
The list of active report triggering configuration for the target eNodeB.
std::set< uint8_t > m_expectedSourceCellMeasId
The list of measurement identities being tested in the source cell.
std::vector< uint8_t > m_expectedRsrp
The list of expected values of RSRP (in 3GPP range unit) from the measurement reports received.
Test suite for generating calls to UE measurements test case ns3::LteUeMeasurementsHandoverTestCase.
LteUeMeasurementsHandoverTestSuite()
Testing UE measurements in LTE with simulation of 1 eNodeB and 1 UE in piecewise configuration and 12...
std::vector< Time > m_expectedTime
The list of expected time when measurement reports are received by eNodeB.
void TeleportVeryFar()
Teleport far function.
LteRrcSap::ReportConfigEutra m_config
The active report triggering configuration.
uint8_t m_expectedMeasId
The measurement identity being tested.
LteUeMeasurementsPiecewiseTestCase1(std::string name, LteRrcSap::ReportConfigEutra config, std::vector< Time > expectedTime, std::vector< uint8_t > expectedRsrp)
Constructor.
std::vector< Time >::iterator m_itExpectedTime
Pointer to the element of m_expectedTime which is expected to occur next in the simulation.
~LteUeMeasurementsPiecewiseTestCase1() override
void TeleportFar()
Teleport far function.
Ptr< MobilityModel > m_ueMobility
the mobility model
void TeleportVeryNear()
Teleport very near function.
void TeleportNear()
Teleport near function.
std::vector< uint8_t > m_expectedRsrp
The list of expected values of RSRP (in 3GPP range unit) from the measurement reports received.
void DoTeardown() override
Runs at the end of the simulation, verifying that all expected measurement reports have been examined...
std::vector< uint8_t >::iterator m_itExpectedRsrp
Pointer to the element of m_expectedRsrp which is expected to occur next in the simulation.
void RecvMeasurementReportCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport report)
Triggers when eNodeB receives measurement report from UE, then perform verification on it.
void DoRun() override
Setup the simulation with the intended UE measurement reporting configuration, run it,...
Testing UE measurements in LTE with simulation of 2 eNodeB and 1 UE in piecewise configuration and 24...
Ptr< MobilityModel > m_ueMobility
the mobility model
~LteUeMeasurementsPiecewiseTestCase2() override
std::vector< Time >::iterator m_itExpectedTime
Pointer to the element of m_expectedTime which is expected to occur next in the simulation.
void TeleportVeryNear()
Teleport very near function.
std::vector< uint8_t > m_expectedRsrp
The list of expected values of RSRP (in 3GPP range unit) from the measurement reports received.
void DoTeardown() override
Runs at the end of the simulation, verifying that all expected measurement reports have been examined...
LteUeMeasurementsPiecewiseTestCase2(std::string name, LteRrcSap::ReportConfigEutra config, std::vector< Time > expectedTime, std::vector< uint8_t > expectedRsrp)
Constructor.
LteRrcSap::ReportConfigEutra m_config
The active report triggering configuration.
void TeleportFar()
Teleport far function.
void DoRun() override
Setup the simulation with the intended UE measurement reporting configuration, run it,...
void RecvMeasurementReportCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport report)
Triggers when eNodeB receives measurement report from UE, then perform verification on it.
void TeleportVeryFar()
Teleport very far function.
void TeleportNear()
Teleport near function.
std::vector< uint8_t >::iterator m_itExpectedRsrp
Pointer to the element of m_expectedRsrp which is expected to occur next in the simulation.
uint8_t m_expectedMeasId
The measurement identity being tested.
std::vector< Time > m_expectedTime
The list of expected time when measurement reports are received by eNodeB.
Testing UE measurements in LTE with simulation of 3 eNodeB and 1 UE in piecewise configuration and 24...
Ptr< MobilityModel > m_enbMobility
the mobility model
LteUeMeasurementsPiecewiseTestCase3(std::string name, LteRrcSap::ReportConfigEutra config, std::vector< Time > expectedTime)
Constructor.
void DoTeardown() override
Runs at the end of the simulation, verifying that all expected measurement reports have been examined...
void DoRun() override
Setup the simulation with the intended UE measurement reporting configuration, run it,...
~LteUeMeasurementsPiecewiseTestCase3() override
void RecvMeasurementReportCallback(std::string context, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport report)
Triggers when eNodeB receives measurement report from UE, then perform verification on it.
LteRrcSap::ReportConfigEutra m_config
The active report triggering configuration.
uint8_t m_expectedMeasId
The measurement identity being tested.
std::vector< Time > m_expectedTime
The list of expected time when measurement reports are received by eNodeB.
void TeleportEnbNear()
Teleport the eNb near function.
std::vector< Time >::iterator m_itExpectedTime
Pointer to the element of m_expectedTime which is expected to occur next in the simulation.
Test suite for generating calls to UE measurements test case ns3::LteUeMeasurementsPiecewiseTestCase1...
LteUeMeasurementsPiecewiseTestSuite1()
Test suite for generating calls to UE measurements test case ns3::LteUeMeasurementsPiecewiseTestCase2...
LteUeMeasurementsPiecewiseTestSuite2()
Test suite for generating calls to UE measurements test case ns3::LteUeMeasurementsPiecewiseTestCase3...
LteUeMeasurementsPiecewiseTestSuite3()
Test that UE measurements calculation works properly in a scenario with 2 eNodeBs and 2UEs.
double m_d1
distance between UE and ENB node pair
double m_rsrqDbUeServingCell
RSRQ in dBm UE 1.
double m_rsrpDbmUeServingCell
RSRP in dBm UE 1.
LteUeMeasurementsTestCase(std::string name, double d1, double d2, double rsrpDbmUe1, double rsrpDbmUe2, double rsrqDbUe1, double rsrqDbUe2)
Constructor.
void ReportUeMeasurements(uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell)
Report UE measurements function.
void DoRun() override
Implementation to actually run this TestCase.
double m_rsrqDbUeNeighborCell
RSRQ in dBm UE 2.
double m_d2
distance between UE and other ENB node
double m_rsrpDbmUeNeighborCell
RSRP in dBm UE 2.
~LteUeMeasurementsTestCase() override
void RecvMeasurementReport(uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport meas)
Reeive measurement report function.
Test that UE Measurements (see 36.214) calculation works fine in a multi-cell interference scenario.
LteUeMeasurementsTestSuite()
AttributeValue implementation for Boolean.
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.
This class contains the specification of EPS Bearers.
@ GBR_CONV_VOICE
GBR Conversational Voice.
static uint8_t Dbm2RsrpRange(double dbm)
convert an RSRP value in dBm to the corresponding range as per 3GPP TS 36.133 section 9....
static double RsrpRange2Dbm(uint8_t range)
converts an RSRP range to dBm as per 3GPP TS 36.133 section 9.1.4 RSRP Measurement Report Mapping
static double RsrqRange2Db(uint8_t range)
converts an RSRQ range to dB as per 3GPP TS 36.133 section 9.1.7 RSRQ Measurement Report Mapping
static uint8_t Db2RsrqRange(double db)
convert an RSRQ value in dB to the corresponding range as per 3GPP TS 36.133 section 9....
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.
Access to the IPv4 forwarding table, interfaces, and configuration.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
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.
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
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.
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 EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
static Time Now()
Return the current simulation virtual time.
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 GetName() const
Simulation virtual time values and global simulation resolution.
int64_t GetMilliSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
AttributeValue implementation for Time.
Hold an unsigned integer type.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
void SetDefault(std::string name, const AttributeValue &value)
void Connect(std::string path, const CallbackBase &cb)
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#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 LteUeMeasurementsPiecewiseTestSuite2 lteUeMeasurementsPiecewiseTestSuite2
Static variable for test initialization.
static LteUeMeasurementsHandoverTestSuite lteUeMeasurementsHandoverTestSuite
Static variable for test initialization.
static LteUeMeasurementsTestSuite lteUeMeasurementsTestSuite
Static variable for test initialization.
static LteUeMeasurementsPiecewiseTestSuite1 lteUeMeasurementsPiecewiseTestSuite1
Static variable for test initialization.
static LteUeMeasurementsPiecewiseTestSuite3 lteUeMeasurementsPiecewiseTestSuite3
Static variable for test initialization.
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
#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.
void ReportUeMeasurementsCallback(LteUeMeasurementsTestCase *testcase, std::string path, uint16_t rnti, uint16_t cellId, double rsrp, double rsrq, bool servingCell, uint8_t componentCarrierId)
void RecvMeasurementReportCallback(LteUeMeasurementsTestCase *testcase, std::string path, uint64_t imsi, uint16_t cellId, uint16_t rnti, LteRrcSap::MeasurementReport meas)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
std::ostream & operator<<(std::ostream &os, const Angles &a)
const Time UE_MEASUREMENT_REPORT_DELAY
Artificial delay of UE measurements procedure.
uint8_t rsrqResult
the RSRQ result
uint8_t rsrpResult
the RSRP result
bool haveMeasResultNeighCells
have measure result neighbor cells
std::list< MeasResultEutra > measResultListEutra
measure result list eutra
MeasResultPCell measResultPCell
measurement result primary cell
MeasurementReport structure.
MeasResults measResults
measure results
Specifies criteria for triggering of an E-UTRA measurement reporting event.
bool reportOnLeave
Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving c...
enum ns3::LteRrcSap::ReportConfigEutra::@62 eventId
Event enumeration.
enum ns3::LteRrcSap::ReportConfigEutra::@61 triggerType
Trigger enumeration.
uint8_t hysteresis
Parameter used within the entry and leave condition of an event triggered reporting condition.
@ RSRP
Reference Signal Received Power.
@ EVENT_A2
Event A2: Serving becomes worse than absolute threshold.
@ EVENT_A3
Event A3: Neighbour becomes amount of offset better than PCell.
@ EVENT_A4
Event A4: Neighbour becomes better than absolute threshold.
@ EVENT_A1
Event A1: Serving becomes better than absolute threshold.
@ EVENT_A5
Event A5: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another abso...
enum ns3::LteRrcSap::ReportConfigEutra::@65 reportInterval
Report interval enumeration.
ThresholdEutra threshold2
Threshold for event A5.
enum ns3::LteRrcSap::ReportConfigEutra::@63 triggerQuantity
Trigger type enumeration.
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
int8_t a3Offset
Offset value for Event A3.
uint16_t timeToTrigger
Time during which specific criteria for the event needs to be met in order to trigger a measurement r...
@ THRESHOLD_RSRP
RSRP is used for the threshold.
enum ns3::LteRrcSap::ThresholdEutra::@60 choice
Threshold enumeration.
uint8_t range
Value range used in RSRP/RSRQ threshold.