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...
const Time UE_MEASUREMENT_REPORT_DELAY
Artificial delay of UE measurements procedure.
std::ostream & operator<<(std::ostream &os, const Angles &a)
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.