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",
 
 
  879                              "Report should not have neighboring cells information");
 
  885                              "Reporting should not have occurred at " 
  903                                  "Reporting should not have occurred at this time");
 
  906                                  "The RSRP observed differs with the reference RSRP");
 
 
  950    std::vector<Time> expectedTime;
 
  951    std::vector<uint8_t> expectedRsrp;
 
  968    expectedTime.clear();
 
  969    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
  970    expectedRsrp.clear();
 
  971    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
  973                    "Piecewise test case 2 - Event A1 with very low threshold",
 
  977                TestCase::Duration::EXTENSIVE);
 
  981    expectedTime.clear();
 
  982    expectedTime << 200 << 440 << 680 << 1000 << 1240 << 2000;
 
  983    expectedRsrp.clear();
 
  984    expectedRsrp << 73 << 63 << 72 << 72 << 59 << 59;
 
  986                    "Piecewise test case 2 - Event A1 with normal threshold",
 
  990                TestCase::Duration::TAKES_FOREVER);
 
  994    expectedTime.clear();
 
  995    expectedTime << 200 << 440 << 680 << 1000 << 1240 << 1480 << 2200;
 
  996    expectedRsrp.clear();
 
  997    expectedRsrp << 73 << 63 << 72 << 72 << 59 << 56 << 72;
 
 1003        TestCase::Duration::EXTENSIVE);
 
 1008    expectedTime.clear();
 
 1009    expectedRsrp.clear();
 
 1011                    "Piecewise test case 2 - Event A1 with very high threshold",
 
 1015                TestCase::Duration::TAKES_FOREVER);
 
 1022    expectedTime.clear();
 
 1023    expectedRsrp.clear();
 
 1025                    "Piecewise test case 2 - Event A2 with very low threshold",
 
 1029                TestCase::Duration::TAKES_FOREVER);
 
 1033    expectedTime.clear();
 
 1034    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1035    expectedRsrp.clear();
 
 1036    expectedRsrp << 52 << 56 << 52 << 56;
 
 1038                    "Piecewise test case 2 - Event A2 with normal threshold",
 
 1042                TestCase::Duration::TAKES_FOREVER);
 
 1046    expectedTime.clear();
 
 1047    expectedTime << 800 << 1600 << 1840 << 2080;
 
 1048    expectedRsrp.clear();
 
 1049    expectedRsrp << 52 << 52 << 56 << 59;
 
 1055        TestCase::Duration::EXTENSIVE);
 
 1060    expectedTime.clear();
 
 1061    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1062    expectedRsrp.clear();
 
 1063    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
 1065                    "Piecewise test case 2 - Event A2 with very high threshold",
 
 1069                TestCase::Duration::TAKES_FOREVER);
 
 1077    expectedTime.clear();
 
 1078    expectedTime << 800 << 1600;
 
 1079    expectedRsrp.clear();
 
 1080    expectedRsrp << 52 << 52;
 
 1082                    "Piecewise test case 2 - Event A3 with positive offset",
 
 1086                TestCase::Duration::QUICK);
 
 1090    expectedTime.clear();
 
 1091    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1092    expectedRsrp.clear();
 
 1093    expectedRsrp << 52 << 56 << 52 << 56;
 
 1099        TestCase::Duration::EXTENSIVE);
 
 1103    expectedTime.clear();
 
 1104    expectedTime << 960 << 1560 << 1800 << 2040;
 
 1105    expectedRsrp.clear();
 
 1106    expectedRsrp << 52 << 56 << 56 << 59;
 
 1108                    "Piecewise test case 2 - Event A3 with short time-to-trigger",
 
 1112                TestCase::Duration::EXTENSIVE);
 
 1116    expectedTime.clear();
 
 1117    expectedTime << 1720 << 1960 << 2200;
 
 1118    expectedRsrp.clear();
 
 1119    expectedRsrp << 52 << 56 << 72;
 
 1121                    "Piecewise test case 2 - Event A3 with super time-to-trigger",
 
 1125                TestCase::Duration::QUICK);
 
 1131    expectedTime.clear();
 
 1132    expectedTime << 800 << 1000 << 1600 << 1840 << 2080 << 2200;
 
 1133    expectedRsrp.clear();
 
 1134    expectedRsrp << 52 << 72 << 52 << 56 << 59 << 72;
 
 1140        TestCase::Duration::QUICK);
 
 1146    expectedTime.clear();
 
 1147    expectedTime << 400 << 800 << 1200 << 1440 << 1680 << 1920 << 2160;
 
 1148    expectedRsrp.clear();
 
 1149    expectedRsrp << 63 << 52 << 59 << 56 << 52 << 56 << 59;
 
 1151                    "Piecewise test case 2 - Event A3 with negative offset",
 
 1155                TestCase::Duration::EXTENSIVE);
 
 1163    expectedTime.clear();
 
 1164    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1165    expectedRsrp.clear();
 
 1166    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
 1168                    "Piecewise test case 2 - Event A4 with very low threshold",
 
 1172                TestCase::Duration::QUICK);
 
 1176    expectedTime.clear();
 
 1177    expectedTime << 400 << 800 << 1400 << 1640 << 1880;
 
 1178    expectedRsrp.clear();
 
 1179    expectedRsrp << 63 << 52 << 56 << 52 << 56;
 
 1181                    "Piecewise test case 2 - Event A4 with normal threshold",
 
 1185                TestCase::Duration::EXTENSIVE);
 
 1189    expectedTime.clear();
 
 1190    expectedTime << 560 << 960 << 1560 << 1800 << 2040;
 
 1191    expectedRsrp.clear();
 
 1192    expectedRsrp << 63 << 52 << 56 << 56 << 59;
 
 1194                    "Piecewise test case 2 - Event A4 with short time-to-trigger",
 
 1198                TestCase::Duration::QUICK);
 
 1202    expectedTime.clear();
 
 1203    expectedTime << 1720 << 1960 << 2200;
 
 1204    expectedRsrp.clear();
 
 1205    expectedRsrp << 52 << 56 << 72;
 
 1207                    "Piecewise test case 2 - Event A4 with super time-to-trigger",
 
 1211                TestCase::Duration::TAKES_FOREVER);
 
 1216    expectedTime.clear();
 
 1217    expectedTime << 400 << 800 << 1600 << 1840 << 2080;
 
 1218    expectedRsrp.clear();
 
 1219    expectedRsrp << 63 << 52 << 52 << 56 << 59;
 
 1225        TestCase::Duration::QUICK);
 
 1230    expectedTime.clear();
 
 1231    expectedRsrp.clear();
 
 1233                    "Piecewise test case 2 - Event A4 with very high threshold",
 
 1237                TestCase::Duration::TAKES_FOREVER);
 
 1246    expectedTime.clear();
 
 1247    expectedRsrp.clear();
 
 1249                    "Piecewise test case 2 - Event A5 with low-low threshold",
 
 1253                TestCase::Duration::EXTENSIVE);
 
 1258                    "Piecewise test case 2 - Event A5 with low-normal threshold",
 
 1262                TestCase::Duration::TAKES_FOREVER);
 
 1267                    "Piecewise test case 2 - Event A5 with low-high threshold",
 
 1271                TestCase::Duration::TAKES_FOREVER);
 
 1276    expectedTime.clear();
 
 1277    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1278    expectedRsrp.clear();
 
 1279    expectedRsrp << 52 << 56 << 52 << 56;
 
 1281                    "Piecewise test case 2 - Event A5 with normal-low threshold",
 
 1285                TestCase::Duration::EXTENSIVE);
 
 1289    expectedTime.clear();
 
 1290    expectedTime << 800 << 1400 << 1640 << 1880;
 
 1291    expectedRsrp.clear();
 
 1292    expectedRsrp << 52 << 56 << 52 << 56;
 
 1294                    "Piecewise test case 2 - Event A5 with normal-normal threshold",
 
 1298                TestCase::Duration::EXTENSIVE);
 
 1302    expectedTime.clear();
 
 1303    expectedTime << 960 << 1560 << 1800 << 2040;
 
 1304    expectedRsrp.clear();
 
 1305    expectedRsrp << 52 << 56 << 56 << 59;
 
 1307                    "Piecewise test case 2 - Event A5 with short time-to-trigger",
 
 1311                TestCase::Duration::TAKES_FOREVER);
 
 1315    expectedTime.clear();
 
 1316    expectedTime << 1720 << 1960 << 2200;
 
 1317    expectedRsrp.clear();
 
 1318    expectedRsrp << 52 << 56 << 72;
 
 1320                    "Piecewise test case 2 - Event A5 with super time-to-trigger",
 
 1324                TestCase::Duration::QUICK);
 
 1329    expectedTime.clear();
 
 1330    expectedTime << 800 << 1600 << 1840 << 2080;
 
 1331    expectedRsrp.clear();
 
 1332    expectedRsrp << 52 << 52 << 56 << 59;
 
 1338        TestCase::Duration::QUICK);
 
 1343    expectedTime.clear();
 
 1344    expectedRsrp.clear();
 
 1346                    "Piecewise test case 2 - Event A5 with normal-high threshold",
 
 1350                TestCase::Duration::TAKES_FOREVER);
 
 1355    expectedTime.clear();
 
 1356    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1357    expectedRsrp.clear();
 
 1358    expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
 
 1360                    "Piecewise test case 2 - Event A5 with high-low threshold",
 
 1364                TestCase::Duration::EXTENSIVE);
 
 1368    expectedTime.clear();
 
 1369    expectedTime << 400 << 800 << 1400 << 1640 << 1880;
 
 1370    expectedRsrp.clear();
 
 1371    expectedRsrp << 63 << 52 << 56 << 52 << 56;
 
 1373                    "Piecewise test case 2 - Event A5 with high-normal threshold",
 
 1377                TestCase::Duration::TAKES_FOREVER);
 
 1381    expectedTime.clear();
 
 1382    expectedRsrp.clear();
 
 1384                    "Piecewise test case 2 - Event A5 with high-high threshold",
 
 1388                TestCase::Duration::EXTENSIVE);
 
 
 1405    std::vector<Time> expectedTime,
 
 1406    std::vector<uint8_t> expectedRsrp)
 
 1409      m_expectedTime(expectedTime),
 
 1410      m_expectedRsrp(expectedRsrp)
 
 1417        NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
 
 
 1437    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
 1438    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
 1461    positionAlloc->Add(Vector(0.0, 0.0, 0.0));   
 
 1462    positionAlloc->Add(Vector(600.0, 0.0, 0.0)); 
 
 1463    positionAlloc->Add(Vector(50.0, 0.0, 0.0));  
 
 1465    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 1466    mobility.SetPositionAllocator(positionAlloc);
 
 1467    mobility.Install(enbNodes);
 
 1468    mobility.Install(ueNodes);
 
 1477    lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
 
 1479    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
 1480    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
 1488    enbRrc2->SetAttribute(
"AdmitHandoverRequest", 
BooleanValue(
false));
 
 1491    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
 1496    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
 1500        "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
 1564    std::string context,
 
 1582        this << 
" Serving cellId=" << cellId
 
 1595                              "Unexpected report content");
 
 1601                              "Unexpected report content");
 
 1607                              "Report contains cgi-info, which is not supported");
 
 1610                              "Report does not contain measured RSRP result");
 
 1613                              "Report does not contain measured RSRQ result");
 
 1614        NS_LOG_DEBUG(
this << 
" Neighbour cellId=" << it->physCellId
 
 1615                          << 
" rsrp=" << (uint16_t)it->rsrpResult << 
" (" 
 1617                          << 
" rsrq=" << (uint16_t)it->rsrqResult << 
" (" 
 1646                          "Reporting should not have occurred at this time");
 
 1649                          "The RSRP observed differs with the reference RSRP");
 
 
 1688    : 
TestSuite(
"lte-ue-measurements-piecewise-3", 
Type::SYSTEM)
 
 1690    std::vector<Time> expectedTime;
 
 1711    expectedTime.clear();
 
 1712    expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
 
 1717                TestCase::Duration::QUICK);
 
 
 1733    std::vector<Time> expectedTime)
 
 1736      m_expectedTime(expectedTime)
 
 
 1756    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
 1757    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
 1782    positionAlloc->Add(Vector(0.0, 0.0, 0.0));       
 
 1783    positionAlloc->Add(Vector(200.0, 0.0, 0.0));     
 
 1784    positionAlloc->Add(Vector(1000700.0, 0.0, 0.0)); 
 
 1785    positionAlloc->Add(Vector(50.0, 0.0, 0.0));      
 
 1787    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 1788    mobility.SetPositionAllocator(positionAlloc);
 
 1789    mobility.Install(enbNodes);
 
 1790    mobility.Install(ueNodes);
 
 1799    lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
 
 1801    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
 1802    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
 1810    enbRrc2->SetAttribute(
"AdmitHandoverRequest", 
BooleanValue(
false));
 
 1812    enbRrc3->SetAttribute(
"AdmitHandoverRequest", 
BooleanValue(
false));
 
 1815    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
 1820    lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
 
 1824        "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
 1857    std::string context,
 
 1875        this << 
" Serving cellId=" << cellId
 
 1888                              "Unexpected report content");
 
 1894                              "Unexpected report content");
 
 1899            NS_ASSERT(it.physCellId == 2 || it.physCellId == 3);
 
 1902                                  "Report contains cgi-info, which is not supported");
 
 1905                                  "Report does not contain measured RSRP result");
 
 1908                                  "Report does not contain measured RSRQ result");
 
 1909            NS_LOG_DEBUG(
this << 
" Neighbour cellId=" << it.physCellId
 
 1910                              << 
" rsrp=" << (uint16_t)it.rsrpResult << 
" (" 
 1912                              << 
" rsrq=" << (uint16_t)it.rsrqResult << 
" (" 
 1922                          "Reporting should not have occurred at " << 
Simulator::Now().GetSeconds()
 
 1936                          "Reporting should not have occurred at this time");
 
 
 1956    std::list<LteRrcSap::ReportConfigEutra> sourceConfigList;
 
 1957    std::list<LteRrcSap::ReportConfigEutra> targetConfigList;
 
 1958    std::vector<Time> expectedTime;
 
 1959    std::vector<uint8_t> expectedRsrp;
 
 1968    sourceConfigList.push_back(sourceConfig);
 
 1977    targetConfigList.push_back(targetConfig);
 
 1984    expectedTime.clear();
 
 1985    expectedTime << 200 << 680 << 1200 << 1440 << 1680 << 1920;
 
 1986    expectedRsrp.clear();
 
 1987    expectedRsrp << 55 << 55 << 53 << 53 << 53 << 53;
 
 1995        TestCase::Duration::TAKES_FOREVER);
 
 2000    expectedTime.clear();
 
 2001    expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1200 << 1840;
 
 2002    expectedRsrp.clear();
 
 2003    expectedRsrp << 55 << 55 << 55 << 55 << 55 << 55 << 55 << 53 << 53;
 
 2011        TestCase::Duration::QUICK);
 
 2017    sourceConfigList.front().threshold1.range = 54;
 
 2018    sourceConfigList.front().threshold2.range = 54;
 
 2019    sourceConfigList.front().a3Offset = 1;
 
 2020    targetConfigList.front().threshold1.range = 54;
 
 2021    targetConfigList.front().threshold2.range = 54;
 
 2022    targetConfigList.front().a3Offset = 1;
 
 2027    expectedTime.clear();
 
 2028    expectedTime << 200 << 440 << 680 << 920 << 1200 << 1440 << 1680 << 1920;
 
 2029    expectedRsrp.clear();
 
 2030    expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53;
 
 2037                TestCase::Duration::EXTENSIVE);
 
 2042    expectedTime.clear();
 
 2043    expectedRsrp.clear();
 
 2050                TestCase::Duration::TAKES_FOREVER);
 
 2055    expectedTime.clear();
 
 2056    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2057    expectedRsrp.clear();
 
 2058    expectedRsrp << 53 << 53 << 53 << 53;
 
 2065                TestCase::Duration::TAKES_FOREVER);
 
 2070    expectedTime.clear();
 
 2071    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2072    expectedRsrp.clear();
 
 2073    expectedRsrp << 53 << 53 << 53 << 53;
 
 2080                TestCase::Duration::QUICK);
 
 2085    expectedTime.clear();
 
 2086    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2087    expectedRsrp.clear();
 
 2088    expectedRsrp << 53 << 53 << 53 << 53;
 
 2095                TestCase::Duration::EXTENSIVE);
 
 2100    expectedTime.clear();
 
 2101    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2102    expectedRsrp.clear();
 
 2103    expectedRsrp << 53 << 53 << 53 << 53;
 
 2110                TestCase::Duration::TAKES_FOREVER);
 
 2115    expectedTime.clear();
 
 2116    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2117    expectedRsrp.clear();
 
 2118    expectedRsrp << 53 << 53 << 53 << 53;
 
 2125                TestCase::Duration::TAKES_FOREVER);
 
 2130    expectedTime.clear();
 
 2131    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2132    expectedRsrp.clear();
 
 2133    expectedRsrp << 53 << 53 << 53 << 53;
 
 2140                TestCase::Duration::EXTENSIVE);
 
 2144    sourceConfigList.front().threshold1.range = 52;
 
 2145    targetConfigList.front().threshold1.range = 56;
 
 2150    expectedTime.clear();
 
 2151    expectedTime << 200 << 440 << 680 << 920;
 
 2152    expectedRsrp.clear();
 
 2153    expectedRsrp << 55 << 55 << 55 << 55;
 
 2161        TestCase::Duration::EXTENSIVE);
 
 2166    expectedTime.clear();
 
 2167    expectedTime << 1200 << 1440 << 1680 << 1920;
 
 2168    expectedRsrp.clear();
 
 2169    expectedRsrp << 53 << 53 << 53 << 53;
 
 2177        TestCase::Duration::QUICK);
 
 2181    sourceConfigList.front().a3Offset = -30;
 
 2183    targetConfigList.front().a3Offset = 30;
 
 2184    expectedTime.clear();
 
 2185    expectedTime << 200 << 440 << 680 << 920;
 
 2186    expectedRsrp.clear();
 
 2187    expectedRsrp << 55 << 55 << 55 << 55;
 
 2195        TestCase::Duration::QUICK);
 
 2200    expectedTime.clear();
 
 2201    expectedTime << 200 << 440 << 680 << 920;
 
 2202    expectedRsrp.clear();
 
 2203    expectedRsrp << 55 << 55 << 55 << 55;
 
 2211        TestCase::Duration::EXTENSIVE);
 
 2215    sourceConfigList.front().threshold2.range = 52;
 
 2217    targetConfigList.front().threshold2.range = 56;
 
 2218    expectedTime.clear();
 
 2219    expectedRsrp.clear();
 
 2227        TestCase::Duration::EXTENSIVE);
 
 2232    sourceConfigList.front().a3Offset = 1;
 
 2233    sourceConfigList.front().threshold1.range = 0;
 
 2234    sourceConfigList.front().threshold2.range = 0;
 
 2236    targetConfigList.front().a3Offset = 1;
 
 2237    targetConfigList.front().threshold1.range = 0;
 
 2238    targetConfigList.front().threshold2.range = 0;
 
 2241    sourceConfigList.front().timeToTrigger = 1024;
 
 2242    targetConfigList.front().timeToTrigger = 100;
 
 2243    expectedTime.clear();
 
 2244    expectedTime << 1300 << 1540 << 1780;
 
 2245    expectedRsrp.clear();
 
 2246    expectedRsrp << 53 << 53 << 53;
 
 2253                TestCase::Duration::QUICK);
 
 2256    sourceConfigList.front().timeToTrigger = 1024;
 
 2257    targetConfigList.front().timeToTrigger = 640;
 
 2258    expectedTime.clear();
 
 2259    expectedTime << 1224 << 1464 << 1704 << 1944 << 2840 << 3080 << 3320 << 3560 << 3800 << 4040;
 
 2260    expectedRsrp.clear();
 
 2261    expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53 << 53 << 53;
 
 2268                TestCase::Duration::EXTENSIVE);
 
 
 2284    std::list<LteRrcSap::ReportConfigEutra> sourceConfigList,
 
 2285    std::list<LteRrcSap::ReportConfigEutra> targetConfigList,
 
 2286    std::vector<Time> expectedTime,
 
 2287    std::vector<uint8_t> expectedRsrp,
 
 2290      m_sourceConfigList(sourceConfigList),
 
 2291      m_targetConfigList(targetConfigList),
 
 2292      m_expectedTime(expectedTime),
 
 2293      m_expectedRsrp(expectedRsrp),
 
 2294      m_duration(duration)
 
 2301        NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
 
 
 2322    lteHelper->SetEpcHelper(epcHelper);
 
 2323    lteHelper->SetAttribute(
"PathlossModel", 
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
 
 2324    lteHelper->SetAttribute(
"UseIdealRrc", 
BooleanValue(
true));
 
 2345    positionAlloc->Add(Vector(0.0, 0.0, 0.0));   
 
 2346    positionAlloc->Add(Vector(900.0, 0.0, 0.0)); 
 
 2347    positionAlloc->Add(Vector(400.0, 0.0, 0.0)); 
 
 2349    mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
 
 2350    mobility.SetPositionAllocator(positionAlloc);
 
 2351    mobility.Install(enbNodes);
 
 2352    mobility.Install(ueNodes);
 
 2355    Ptr<Node> pgw = epcHelper->GetPgwNode();
 
 2359    remoteHostContainer.
Create(1);
 
 2362    internet.Install(remoteHostContainer);
 
 2371    ipv4h.
SetBase(
"1.0.0.0", 
"255.0.0.0");
 
 2378    remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"), 
Ipv4Mask(
"255.0.0.0"), 1);
 
 2389    enbDevs = lteHelper->InstallEnbDevice(enbNodes);
 
 2390    ueDevs = lteHelper->InstallUeDevice(ueNodes);
 
 2401        measId = enbRrc1->AddUeMeasReportConfig(*itReportConfig).at(0);
 
 2409        measId = enbRrc2->AddUeMeasReportConfig(*itReportConfig).at(0);
 
 2414    internet.Install(ueNodes);
 
 2425        ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
 
 2429    lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
 
 2432    lteHelper->AddX2Interface(enbNodes);
 
 2436        "/NodeList/3/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 2441        "/NodeList/4/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
 
 
 2471    std::string context,
 
 2480    bool isCorrectMeasId;
 
 2486    else if (cellId == 2)
 
 2496    if (!isCorrectMeasId)
 
 2504        this << 
" Serving cellId=" << cellId
 
 2517                              "Unexpected report content");
 
 2523                              "Unexpected report content");
 
 2530                              "Report contains cgi-info, which is not supported");
 
 2533                              "Report does not contain measured RSRP result");
 
 2536                              "Report does not contain measured RSRQ result");
 
 2537        NS_LOG_DEBUG(
this << 
" Neighbour cellId=" << it->physCellId
 
 2538                          << 
" rsrp=" << (uint16_t)it->rsrpResult << 
" (" 
 2540                          << 
" rsrq=" << (uint16_t)it->rsrqResult << 
" (" 
 2569                          "Reporting should not have occurred at this time");
 
 2572                          "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.