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,
1579 this <<
" Serving cellId=" << cellId
1592 "Unexpected report content");
1598 "Unexpected report content");
1604 "Report contains cgi-info, which is not supported");
1607 "Report does not contain measured RSRP result");
1610 "Report does not contain measured RSRQ result");
1611 NS_LOG_DEBUG(
this <<
" Neighbour cellId=" << it->physCellId
1612 <<
" rsrp=" << (uint16_t)it->rsrpResult <<
" ("
1614 <<
" rsrq=" << (uint16_t)it->rsrqResult <<
" ("
1623 "Reporting should not have occurred at "
1641 "Reporting should not have occurred at this time");
1644 "The RSRP observed differs with the reference RSRP");
1687 :
TestSuite(
"lte-ue-measurements-piecewise-3",
Type::SYSTEM)
1689 std::vector<Time> expectedTime;
1710 expectedTime.clear();
1711 expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
1716 TestCase::Duration::QUICK);
1732 std::vector<Time> expectedTime)
1735 m_expectedTime(expectedTime)
1755 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
1756 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
true));
1781 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1782 positionAlloc->Add(Vector(200.0, 0.0, 0.0));
1783 positionAlloc->Add(Vector(1000700.0, 0.0, 0.0));
1784 positionAlloc->Add(Vector(50.0, 0.0, 0.0));
1786 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1787 mobility.SetPositionAllocator(positionAlloc);
1788 mobility.Install(enbNodes);
1789 mobility.Install(ueNodes);
1798 lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
1800 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
1801 ueDevs = lteHelper->InstallUeDevice(ueNodes);
1809 enbRrc2->SetAttribute(
"AdmitHandoverRequest",
BooleanValue(
false));
1811 enbRrc3->SetAttribute(
"AdmitHandoverRequest",
BooleanValue(
false));
1814 lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
1819 lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
1823 "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
1856 std::string context,
1871 this <<
" Serving cellId=" << cellId
1884 "Unexpected report content");
1890 "Unexpected report content");
1895 NS_ASSERT(it.physCellId == 2 || it.physCellId == 3);
1898 "Report contains cgi-info, which is not supported");
1901 "Report does not contain measured RSRP result");
1904 "Report does not contain measured RSRQ result");
1906 this <<
" Neighbour cellId=" << it.physCellId
1907 <<
" rsrp=" << (uint16_t)it.rsrpResult <<
" ("
1909 <<
" rsrq=" << (uint16_t)it.rsrqResult <<
" ("
1919 "Reporting should not have occurred at "
1930 "Reporting should not have occurred at this time");
1954 std::list<LteRrcSap::ReportConfigEutra> sourceConfigList;
1955 std::list<LteRrcSap::ReportConfigEutra> targetConfigList;
1956 std::vector<Time> expectedTime;
1957 std::vector<uint8_t> expectedRsrp;
1966 sourceConfigList.push_back(sourceConfig);
1975 targetConfigList.push_back(targetConfig);
1982 expectedTime.clear();
1983 expectedTime << 200 << 680 << 1200 << 1440 << 1680 << 1920;
1984 expectedRsrp.clear();
1985 expectedRsrp << 55 << 55 << 53 << 53 << 53 << 53;
1993 TestCase::Duration::TAKES_FOREVER);
1998 expectedTime.clear();
1999 expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1200 << 1840;
2000 expectedRsrp.clear();
2001 expectedRsrp << 55 << 55 << 55 << 55 << 55 << 55 << 55 << 53 << 53;
2009 TestCase::Duration::QUICK);
2015 sourceConfigList.front().threshold1.range = 54;
2016 sourceConfigList.front().threshold2.range = 54;
2017 sourceConfigList.front().a3Offset = 1;
2018 targetConfigList.front().threshold1.range = 54;
2019 targetConfigList.front().threshold2.range = 54;
2020 targetConfigList.front().a3Offset = 1;
2025 expectedTime.clear();
2026 expectedTime << 200 << 440 << 680 << 920 << 1200 << 1440 << 1680 << 1920;
2027 expectedRsrp.clear();
2028 expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53;
2035 TestCase::Duration::EXTENSIVE);
2040 expectedTime.clear();
2041 expectedRsrp.clear();
2048 TestCase::Duration::TAKES_FOREVER);
2053 expectedTime.clear();
2054 expectedTime << 1200 << 1440 << 1680 << 1920;
2055 expectedRsrp.clear();
2056 expectedRsrp << 53 << 53 << 53 << 53;
2063 TestCase::Duration::TAKES_FOREVER);
2068 expectedTime.clear();
2069 expectedTime << 1200 << 1440 << 1680 << 1920;
2070 expectedRsrp.clear();
2071 expectedRsrp << 53 << 53 << 53 << 53;
2078 TestCase::Duration::QUICK);
2083 expectedTime.clear();
2084 expectedTime << 1200 << 1440 << 1680 << 1920;
2085 expectedRsrp.clear();
2086 expectedRsrp << 53 << 53 << 53 << 53;
2093 TestCase::Duration::EXTENSIVE);
2098 expectedTime.clear();
2099 expectedTime << 1200 << 1440 << 1680 << 1920;
2100 expectedRsrp.clear();
2101 expectedRsrp << 53 << 53 << 53 << 53;
2108 TestCase::Duration::TAKES_FOREVER);
2113 expectedTime.clear();
2114 expectedTime << 1200 << 1440 << 1680 << 1920;
2115 expectedRsrp.clear();
2116 expectedRsrp << 53 << 53 << 53 << 53;
2123 TestCase::Duration::TAKES_FOREVER);
2128 expectedTime.clear();
2129 expectedTime << 1200 << 1440 << 1680 << 1920;
2130 expectedRsrp.clear();
2131 expectedRsrp << 53 << 53 << 53 << 53;
2138 TestCase::Duration::EXTENSIVE);
2142 sourceConfigList.front().threshold1.range = 52;
2143 targetConfigList.front().threshold1.range = 56;
2148 expectedTime.clear();
2149 expectedTime << 200 << 440 << 680 << 920;
2150 expectedRsrp.clear();
2151 expectedRsrp << 55 << 55 << 55 << 55;
2159 TestCase::Duration::EXTENSIVE);
2164 expectedTime.clear();
2165 expectedTime << 1200 << 1440 << 1680 << 1920;
2166 expectedRsrp.clear();
2167 expectedRsrp << 53 << 53 << 53 << 53;
2175 TestCase::Duration::QUICK);
2179 sourceConfigList.front().a3Offset = -30;
2181 targetConfigList.front().a3Offset = 30;
2182 expectedTime.clear();
2183 expectedTime << 200 << 440 << 680 << 920;
2184 expectedRsrp.clear();
2185 expectedRsrp << 55 << 55 << 55 << 55;
2193 TestCase::Duration::QUICK);
2198 expectedTime.clear();
2199 expectedTime << 200 << 440 << 680 << 920;
2200 expectedRsrp.clear();
2201 expectedRsrp << 55 << 55 << 55 << 55;
2209 TestCase::Duration::EXTENSIVE);
2213 sourceConfigList.front().threshold2.range = 52;
2215 targetConfigList.front().threshold2.range = 56;
2216 expectedTime.clear();
2217 expectedRsrp.clear();
2225 TestCase::Duration::EXTENSIVE);
2230 sourceConfigList.front().a3Offset = 1;
2231 sourceConfigList.front().threshold1.range = 0;
2232 sourceConfigList.front().threshold2.range = 0;
2234 targetConfigList.front().a3Offset = 1;
2235 targetConfigList.front().threshold1.range = 0;
2236 targetConfigList.front().threshold2.range = 0;
2239 sourceConfigList.front().timeToTrigger = 1024;
2240 targetConfigList.front().timeToTrigger = 100;
2241 expectedTime.clear();
2242 expectedTime << 1300 << 1540 << 1780;
2243 expectedRsrp.clear();
2244 expectedRsrp << 53 << 53 << 53;
2251 TestCase::Duration::QUICK);
2254 sourceConfigList.front().timeToTrigger = 1024;
2255 targetConfigList.front().timeToTrigger = 640;
2256 expectedTime.clear();
2257 expectedTime << 1224 << 1464 << 1704 << 1944 << 2840 << 3080 << 3320 << 3560 << 3800 << 4040;
2258 expectedRsrp.clear();
2259 expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53 << 53 << 53;
2266 TestCase::Duration::EXTENSIVE);
2282 std::list<LteRrcSap::ReportConfigEutra> sourceConfigList,
2283 std::list<LteRrcSap::ReportConfigEutra> targetConfigList,
2284 std::vector<Time> expectedTime,
2285 std::vector<uint8_t> expectedRsrp,
2288 m_sourceConfigList(sourceConfigList),
2289 m_targetConfigList(targetConfigList),
2290 m_expectedTime(expectedTime),
2291 m_expectedRsrp(expectedRsrp),
2292 m_duration(duration)
2299 NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
2320 lteHelper->SetEpcHelper(epcHelper);
2321 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
2322 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
true));
2343 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2344 positionAlloc->Add(Vector(900.0, 0.0, 0.0));
2345 positionAlloc->Add(Vector(400.0, 0.0, 0.0));
2347 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2348 mobility.SetPositionAllocator(positionAlloc);
2349 mobility.Install(enbNodes);
2350 mobility.Install(ueNodes);
2353 Ptr<Node> pgw = epcHelper->GetPgwNode();
2357 remoteHostContainer.
Create(1);
2360 internet.Install(remoteHostContainer);
2369 ipv4h.
SetBase(
"1.0.0.0",
"255.0.0.0");
2376 remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"),
Ipv4Mask(
"255.0.0.0"), 1);
2387 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
2388 ueDevs = lteHelper->InstallUeDevice(ueNodes);
2399 measId = enbRrc1->AddUeMeasReportConfig(*itReportConfig).at(0);
2407 measId = enbRrc2->AddUeMeasReportConfig(*itReportConfig).at(0);
2412 internet.Install(ueNodes);
2423 ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
2427 lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
2430 lteHelper->AddX2Interface(enbNodes);
2434 "/NodeList/3/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
2439 "/NodeList/4/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
2469 std::string context,
2478 bool isCorrectMeasId;
2484 else if (cellId == 2)
2494 if (isCorrectMeasId)
2499 this <<
" Serving cellId=" << cellId
2512 "Unexpected report content");
2518 "Unexpected report content");
2525 "Report contains cgi-info, which is not supported");
2528 "Report does not contain measured RSRP result");
2531 "Report does not contain measured RSRQ result");
2532 NS_LOG_DEBUG(
this <<
" Neighbour cellId=" << it->physCellId
2533 <<
" rsrp=" << (uint16_t)it->rsrpResult <<
" ("
2535 <<
" rsrq=" << (uint16_t)it->rsrqResult <<
" ("
2544 "Reporting should not have occurred at "
2562 "Reporting should not have occurred at this time");
2565 "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()
Class for representing data rates.
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.
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.