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"
57 uint8_t componentCarrierId)
87 TestCase::Duration::EXTENSIVE);
95 TestCase::Duration::EXTENSIVE);
103 TestCase::Duration::EXTENSIVE);
111 TestCase::Duration::EXTENSIVE);
119 TestCase::Duration::EXTENSIVE);
127 TestCase::Duration::EXTENSIVE);
135 TestCase::Duration::EXTENSIVE);
143 TestCase::Duration::EXTENSIVE);
151 TestCase::Duration::EXTENSIVE);
159 TestCase::Duration::EXTENSIVE);
167 TestCase::Duration::QUICK);
175 TestCase::Duration::EXTENSIVE);
183 TestCase::Duration::EXTENSIVE);
191 TestCase::Duration::EXTENSIVE);
199 TestCase::Duration::EXTENSIVE);
207 TestCase::Duration::EXTENSIVE);
215 TestCase::Duration::EXTENSIVE);
223 TestCase::Duration::EXTENSIVE);
246 m_rsrpDbmUeServingCell(rsrpDbmUe1),
247 m_rsrpDbmUeNeighborCell(rsrpDbmUe2),
248 m_rsrqDbUeServingCell(rsrqDbUe1),
249 m_rsrqDbUeNeighborCell(rsrqDbUe2)
251 NS_LOG_INFO(
"Test UE Measurements d1 = " << d1 <<
" m. and d2 = " << d2 <<
" m.");
268 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
269 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
false));
294 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
295 positionAlloc->Add(Vector(
m_d2,
m_d1, 0.0));
296 positionAlloc->Add(Vector(0.0,
m_d1, 0.0));
297 positionAlloc->Add(Vector(
m_d2, 0.0, 0.0));
299 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
300 mobility.SetPositionAllocator(positionAlloc);
301 mobility.Install(allNodes);
307 lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
309 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
310 ueDevs1 = lteHelper->InstallUeDevice(ueNodes1);
311 ueDevs2 = lteHelper->InstallUeDevice(ueNodes2);
314 lteHelper->Attach(ueDevs1, enbDevs.
Get(0));
315 lteHelper->Attach(ueDevs2, enbDevs.
Get(1));
320 lteHelper->ActivateDataRadioBearer(ueDevs1, bearer);
321 lteHelper->ActivateDataRadioBearer(ueDevs2, bearer);
324 "/NodeList/2/DeviceList/0/ComponentCarrierMapUe/0/LteUePhy/ReportUeMeasurements",
326 Config::Connect(
"/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
330 "/NodeList/3/DeviceList/0/ComponentCarrierMapUe/0/LteUePhy/ReportUeMeasurements",
332 Config::Connect(
"/NodeList/1/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
355 NS_LOG_DEBUG(
"UE serving cellId " << cellId <<
" Rxed RSRP " << rsrp <<
" thr "
363 NS_LOG_DEBUG(
"UE neighbor cellId " << cellId <<
" Rxed RSRP " << rsrp <<
" thr "
385 this <<
"Serving Cell: received IMSI " << imsi <<
" CellId " << cellId <<
" RNTI "
401 this <<
"Neighbor cell: received IMSI " << imsi <<
" CellId " << cellId <<
" RNTI "
424operator<<(std::vector<Time>& v,
const uint64_t& ms)
435operator<<(std::vector<uint8_t>& v,
const uint8_t& range)
448 std::vector<Time> expectedTime;
449 std::vector<uint8_t> expectedRsrp;
461 expectedTime.clear();
462 expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1040 << 1160 << 1280 << 1400
463 << 1520 << 1640 << 1760 << 1880 << 2000 << 2120;
464 expectedRsrp.clear();
465 expectedRsrp << 67 << 67 << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51 << 47 << 47
468 "Piecewise test case 1 - Event A1 with very low threshold",
472 TestCase::Duration::EXTENSIVE);
476 expectedTime.clear();
477 expectedTime << 200 << 320 << 440 << 560 << 680 << 1000 << 1120 << 1240 << 1360 << 2000 << 2120;
478 expectedRsrp.clear();
479 expectedRsrp << 67 << 67 << 57 << 57 << 66 << 66 << 66 << 57 << 57 << 57 << 57;
481 "Piecewise test case 1 - Event A1 with normal threshold",
485 TestCase::Duration::EXTENSIVE);
489 expectedTime.clear();
490 expectedTime << 264 << 384 << 504 << 624 << 744 << 1064 << 1184 << 1304 << 1424 << 2064 << 2184;
491 expectedRsrp.clear();
492 expectedRsrp << 67 << 67 << 57 << 66 << 66 << 66 << 66 << 57 << 51 << 57 << 57;
494 "Piecewise test case 1 - Event A1 with short time-to-trigger",
498 TestCase::Duration::QUICK);
502 expectedTime.clear();
503 expectedTime << 328 << 448 << 568 << 688 << 808 << 1128 << 1248 << 1368 << 1488 << 2128;
504 expectedRsrp.clear();
505 expectedRsrp << 67 << 57 << 57 << 66 << 47 << 66 << 57 << 57 << 51 << 57;
507 "Piecewise test case 1 - Event A1 with long time-to-trigger",
511 TestCase::Duration::EXTENSIVE);
515 expectedTime.clear();
516 expectedTime << 456 << 576 << 696 << 816 << 936 << 1056 << 1176 << 1296 << 1416 << 1536;
517 expectedRsrp.clear();
518 expectedRsrp << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51;
520 "Piecewise test case 1 - Event A1 with super time-to-trigger",
524 TestCase::Duration::EXTENSIVE);
529 expectedTime.clear();
530 expectedTime << 200 << 320 << 440 << 560 << 680 << 1000 << 1120 << 1240 << 1360 << 1480 << 2200;
531 expectedRsrp.clear();
532 expectedRsrp << 67 << 67 << 57 << 57 << 66 << 66 << 66 << 57 << 57 << 51 << 67;
538 TestCase::Duration::QUICK);
543 expectedTime.clear();
544 expectedRsrp.clear();
546 "Piecewise test case 1 - Event A1 with very high threshold",
550 TestCase::Duration::TAKES_FOREVER);
557 expectedTime.clear();
558 expectedRsrp.clear();
560 "Piecewise test case 1 - Event A2 with very low threshold",
564 TestCase::Duration::TAKES_FOREVER);
568 expectedTime.clear();
569 expectedTime << 800 << 920 << 1400 << 1520 << 1640 << 1760 << 1880;
570 expectedRsrp.clear();
571 expectedRsrp << 47 << 47 << 51 << 51 << 47 << 47 << 51;
573 "Piecewise test case 1 - Event A2 with normal threshold",
577 TestCase::Duration::QUICK);
581 expectedTime.clear();
582 expectedTime << 864 << 984 << 1464 << 1584 << 1704 << 1824 << 1944;
583 expectedRsrp.clear();
584 expectedRsrp << 47 << 47 << 51 << 51 << 47 << 51 << 51;
586 "Piecewise test case 1 - Event A2 with short time-to-trigger",
590 TestCase::Duration::EXTENSIVE);
594 expectedTime.clear();
595 expectedTime << 928 << 1048 << 1528 << 1648 << 1768 << 1888 << 2008;
596 expectedRsrp.clear();
597 expectedRsrp << 47 << 66 << 51 << 47 << 47 << 51 << 57;
599 "Piecewise test case 1 - Event A2 with long time-to-trigger",
603 TestCase::Duration::TAKES_FOREVER);
607 expectedTime.clear();
608 expectedTime << 1656 << 1776 << 1896 << 2016 << 2136;
609 expectedRsrp.clear();
610 expectedRsrp << 47 << 47 << 51 << 57 << 57;
612 "Piecewise test case 1 - Event A2 with super time-to-trigger",
616 TestCase::Duration::QUICK);
621 expectedTime.clear();
622 expectedTime << 800 << 920 << 1600 << 1720 << 1840 << 1960 << 2080;
623 expectedRsrp.clear();
624 expectedRsrp << 47 << 47 << 47 << 47 << 51 << 51 << 57;
630 TestCase::Duration::EXTENSIVE);
635 expectedTime.clear();
636 expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1040 << 1160 << 1280 << 1400
637 << 1520 << 1640 << 1760 << 1880 << 2000 << 2120;
638 expectedRsrp.clear();
639 expectedRsrp << 67 << 67 << 57 << 57 << 66 << 47 << 47 << 66 << 66 << 57 << 51 << 51 << 47 << 47
642 "Piecewise test case 1 - Event A2 with very high threshold",
646 TestCase::Duration::EXTENSIVE);
655 expectedTime.clear();
656 expectedRsrp.clear();
666 TestCase::Duration::EXTENSIVE);
676 TestCase::Duration::EXTENSIVE);
687 TestCase::Duration::EXTENSIVE);
704 std::vector<Time> expectedTime,
705 std::vector<uint8_t> expectedRsrp)
708 m_expectedTime(expectedTime),
709 m_expectedRsrp(expectedRsrp)
716 NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
736 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
737 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
true));
760 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
761 positionAlloc->Add(Vector(100.0, 0.0, 0.0));
763 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
764 mobility.SetPositionAllocator(positionAlloc);
765 mobility.Install(enbNodes);
766 mobility.Install(ueNodes);
775 lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
777 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
778 ueDevs = lteHelper->InstallUeDevice(ueNodes);
785 lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
790 lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
794 "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
880 "Report should not have neighboring cells information");
886 "Reporting should not have occurred at "
904 "Reporting should not have occurred at this time");
907 "The RSRP observed differs with the reference RSRP");
949 std::vector<Time> expectedTime;
950 std::vector<uint8_t> expectedRsrp;
967 expectedTime.clear();
968 expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
969 expectedRsrp.clear();
970 expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
972 "Piecewise test case 2 - Event A1 with very low threshold",
976 TestCase::Duration::EXTENSIVE);
980 expectedTime.clear();
981 expectedTime << 200 << 440 << 680 << 1000 << 1240 << 2000;
982 expectedRsrp.clear();
983 expectedRsrp << 73 << 63 << 72 << 72 << 59 << 59;
985 "Piecewise test case 2 - Event A1 with normal threshold",
989 TestCase::Duration::TAKES_FOREVER);
993 expectedTime.clear();
994 expectedTime << 200 << 440 << 680 << 1000 << 1240 << 1480 << 2200;
995 expectedRsrp.clear();
996 expectedRsrp << 73 << 63 << 72 << 72 << 59 << 56 << 72;
1002 TestCase::Duration::EXTENSIVE);
1007 expectedTime.clear();
1008 expectedRsrp.clear();
1010 "Piecewise test case 2 - Event A1 with very high threshold",
1014 TestCase::Duration::TAKES_FOREVER);
1021 expectedTime.clear();
1022 expectedRsrp.clear();
1024 "Piecewise test case 2 - Event A2 with very low threshold",
1028 TestCase::Duration::TAKES_FOREVER);
1032 expectedTime.clear();
1033 expectedTime << 800 << 1400 << 1640 << 1880;
1034 expectedRsrp.clear();
1035 expectedRsrp << 52 << 56 << 52 << 56;
1037 "Piecewise test case 2 - Event A2 with normal threshold",
1041 TestCase::Duration::TAKES_FOREVER);
1045 expectedTime.clear();
1046 expectedTime << 800 << 1600 << 1840 << 2080;
1047 expectedRsrp.clear();
1048 expectedRsrp << 52 << 52 << 56 << 59;
1054 TestCase::Duration::EXTENSIVE);
1059 expectedTime.clear();
1060 expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
1061 expectedRsrp.clear();
1062 expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
1064 "Piecewise test case 2 - Event A2 with very high threshold",
1068 TestCase::Duration::TAKES_FOREVER);
1076 expectedTime.clear();
1077 expectedTime << 800 << 1600;
1078 expectedRsrp.clear();
1079 expectedRsrp << 52 << 52;
1081 "Piecewise test case 2 - Event A3 with positive offset",
1085 TestCase::Duration::QUICK);
1089 expectedTime.clear();
1090 expectedTime << 800 << 1400 << 1640 << 1880;
1091 expectedRsrp.clear();
1092 expectedRsrp << 52 << 56 << 52 << 56;
1098 TestCase::Duration::EXTENSIVE);
1102 expectedTime.clear();
1103 expectedTime << 960 << 1560 << 1800 << 2040;
1104 expectedRsrp.clear();
1105 expectedRsrp << 52 << 56 << 56 << 59;
1107 "Piecewise test case 2 - Event A3 with short time-to-trigger",
1111 TestCase::Duration::EXTENSIVE);
1115 expectedTime.clear();
1116 expectedTime << 1720 << 1960 << 2200;
1117 expectedRsrp.clear();
1118 expectedRsrp << 52 << 56 << 72;
1120 "Piecewise test case 2 - Event A3 with super time-to-trigger",
1124 TestCase::Duration::QUICK);
1130 expectedTime.clear();
1131 expectedTime << 800 << 1000 << 1600 << 1840 << 2080 << 2200;
1132 expectedRsrp.clear();
1133 expectedRsrp << 52 << 72 << 52 << 56 << 59 << 72;
1139 TestCase::Duration::QUICK);
1145 expectedTime.clear();
1146 expectedTime << 400 << 800 << 1200 << 1440 << 1680 << 1920 << 2160;
1147 expectedRsrp.clear();
1148 expectedRsrp << 63 << 52 << 59 << 56 << 52 << 56 << 59;
1150 "Piecewise test case 2 - Event A3 with negative offset",
1154 TestCase::Duration::EXTENSIVE);
1162 expectedTime.clear();
1163 expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
1164 expectedRsrp.clear();
1165 expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
1167 "Piecewise test case 2 - Event A4 with very low threshold",
1171 TestCase::Duration::QUICK);
1175 expectedTime.clear();
1176 expectedTime << 400 << 800 << 1400 << 1640 << 1880;
1177 expectedRsrp.clear();
1178 expectedRsrp << 63 << 52 << 56 << 52 << 56;
1180 "Piecewise test case 2 - Event A4 with normal threshold",
1184 TestCase::Duration::EXTENSIVE);
1188 expectedTime.clear();
1189 expectedTime << 560 << 960 << 1560 << 1800 << 2040;
1190 expectedRsrp.clear();
1191 expectedRsrp << 63 << 52 << 56 << 56 << 59;
1193 "Piecewise test case 2 - Event A4 with short time-to-trigger",
1197 TestCase::Duration::QUICK);
1201 expectedTime.clear();
1202 expectedTime << 1720 << 1960 << 2200;
1203 expectedRsrp.clear();
1204 expectedRsrp << 52 << 56 << 72;
1206 "Piecewise test case 2 - Event A4 with super time-to-trigger",
1210 TestCase::Duration::TAKES_FOREVER);
1215 expectedTime.clear();
1216 expectedTime << 400 << 800 << 1600 << 1840 << 2080;
1217 expectedRsrp.clear();
1218 expectedRsrp << 63 << 52 << 52 << 56 << 59;
1224 TestCase::Duration::QUICK);
1229 expectedTime.clear();
1230 expectedRsrp.clear();
1232 "Piecewise test case 2 - Event A4 with very high threshold",
1236 TestCase::Duration::TAKES_FOREVER);
1245 expectedTime.clear();
1246 expectedRsrp.clear();
1248 "Piecewise test case 2 - Event A5 with low-low threshold",
1252 TestCase::Duration::EXTENSIVE);
1257 "Piecewise test case 2 - Event A5 with low-normal threshold",
1261 TestCase::Duration::TAKES_FOREVER);
1266 "Piecewise test case 2 - Event A5 with low-high threshold",
1270 TestCase::Duration::TAKES_FOREVER);
1275 expectedTime.clear();
1276 expectedTime << 800 << 1400 << 1640 << 1880;
1277 expectedRsrp.clear();
1278 expectedRsrp << 52 << 56 << 52 << 56;
1280 "Piecewise test case 2 - Event A5 with normal-low threshold",
1284 TestCase::Duration::EXTENSIVE);
1288 expectedTime.clear();
1289 expectedTime << 800 << 1400 << 1640 << 1880;
1290 expectedRsrp.clear();
1291 expectedRsrp << 52 << 56 << 52 << 56;
1293 "Piecewise test case 2 - Event A5 with normal-normal threshold",
1297 TestCase::Duration::EXTENSIVE);
1301 expectedTime.clear();
1302 expectedTime << 960 << 1560 << 1800 << 2040;
1303 expectedRsrp.clear();
1304 expectedRsrp << 52 << 56 << 56 << 59;
1306 "Piecewise test case 2 - Event A5 with short time-to-trigger",
1310 TestCase::Duration::TAKES_FOREVER);
1314 expectedTime.clear();
1315 expectedTime << 1720 << 1960 << 2200;
1316 expectedRsrp.clear();
1317 expectedRsrp << 52 << 56 << 72;
1319 "Piecewise test case 2 - Event A5 with super time-to-trigger",
1323 TestCase::Duration::QUICK);
1328 expectedTime.clear();
1329 expectedTime << 800 << 1600 << 1840 << 2080;
1330 expectedRsrp.clear();
1331 expectedRsrp << 52 << 52 << 56 << 59;
1337 TestCase::Duration::QUICK);
1342 expectedTime.clear();
1343 expectedRsrp.clear();
1345 "Piecewise test case 2 - Event A5 with normal-high threshold",
1349 TestCase::Duration::TAKES_FOREVER);
1354 expectedTime.clear();
1355 expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
1356 expectedRsrp.clear();
1357 expectedRsrp << 73 << 63 << 72 << 52 << 72 << 56 << 52 << 56 << 59;
1359 "Piecewise test case 2 - Event A5 with high-low threshold",
1363 TestCase::Duration::EXTENSIVE);
1367 expectedTime.clear();
1368 expectedTime << 400 << 800 << 1400 << 1640 << 1880;
1369 expectedRsrp.clear();
1370 expectedRsrp << 63 << 52 << 56 << 52 << 56;
1372 "Piecewise test case 2 - Event A5 with high-normal threshold",
1376 TestCase::Duration::TAKES_FOREVER);
1380 expectedTime.clear();
1381 expectedRsrp.clear();
1383 "Piecewise test case 2 - Event A5 with high-high threshold",
1387 TestCase::Duration::EXTENSIVE);
1404 std::vector<Time> expectedTime,
1405 std::vector<uint8_t> expectedRsrp)
1408 m_expectedTime(expectedTime),
1409 m_expectedRsrp(expectedRsrp)
1416 NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
1436 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
1437 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
true));
1460 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1461 positionAlloc->Add(Vector(600.0, 0.0, 0.0));
1462 positionAlloc->Add(Vector(50.0, 0.0, 0.0));
1464 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1465 mobility.SetPositionAllocator(positionAlloc);
1466 mobility.Install(enbNodes);
1467 mobility.Install(ueNodes);
1476 lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
1478 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
1479 ueDevs = lteHelper->InstallUeDevice(ueNodes);
1487 enbRrc2->SetAttribute(
"AdmitHandoverRequest",
BooleanValue(
false));
1490 lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
1495 lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
1499 "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
1562 std::string context,
1580 this <<
" Serving cellId=" << cellId
1593 "Unexpected report content");
1599 "Unexpected report content");
1605 "Report contains cgi-info, which is not supported");
1608 "Report does not contain measured RSRP result");
1611 "Report does not contain measured RSRQ result");
1612 NS_LOG_DEBUG(
this <<
" Neighbour cellId=" << it->physCellId
1613 <<
" rsrp=" << (uint16_t)it->rsrpResult <<
" ("
1615 <<
" rsrq=" << (uint16_t)it->rsrqResult <<
" ("
1643 "Reporting should not have occurred at this time");
1646 "The RSRP observed differs with the reference RSRP");
1684 :
TestSuite(
"lte-ue-measurements-piecewise-3",
Type::SYSTEM)
1686 std::vector<Time> expectedTime;
1707 expectedTime.clear();
1708 expectedTime << 200 << 440 << 680 << 920 << 1160 << 1400 << 1640 << 1880 << 2120;
1713 TestCase::Duration::QUICK);
1729 std::vector<Time> expectedTime)
1732 m_expectedTime(expectedTime)
1752 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
1753 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
true));
1778 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
1779 positionAlloc->Add(Vector(200.0, 0.0, 0.0));
1780 positionAlloc->Add(Vector(1000700.0, 0.0, 0.0));
1781 positionAlloc->Add(Vector(50.0, 0.0, 0.0));
1783 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
1784 mobility.SetPositionAllocator(positionAlloc);
1785 mobility.Install(enbNodes);
1786 mobility.Install(ueNodes);
1795 lteHelper->SetSchedulerType(
"ns3::RrFfMacScheduler");
1797 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
1798 ueDevs = lteHelper->InstallUeDevice(ueNodes);
1806 enbRrc2->SetAttribute(
"AdmitHandoverRequest",
BooleanValue(
false));
1808 enbRrc3->SetAttribute(
"AdmitHandoverRequest",
BooleanValue(
false));
1811 lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
1816 lteHelper->ActivateDataRadioBearer(ueDevs, bearer);
1820 "/NodeList/0/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
1852 std::string context,
1870 this <<
" Serving cellId=" << cellId
1883 "Unexpected report content");
1889 "Unexpected report content");
1894 NS_ASSERT(it.physCellId == 2 || it.physCellId == 3);
1897 "Report contains cgi-info, which is not supported");
1900 "Report does not contain measured RSRP result");
1903 "Report does not contain measured RSRQ result");
1904 NS_LOG_DEBUG(
this <<
" Neighbour cellId=" << it.physCellId
1905 <<
" rsrp=" << (uint16_t)it.rsrpResult <<
" ("
1907 <<
" rsrq=" << (uint16_t)it.rsrqResult <<
" ("
1916 "Reporting should not have occurred at " <<
Simulator::Now().GetSeconds()
1930 "Reporting should not have occurred at this time");
1949 std::list<LteRrcSap::ReportConfigEutra> sourceConfigList;
1950 std::list<LteRrcSap::ReportConfigEutra> targetConfigList;
1951 std::vector<Time> expectedTime;
1952 std::vector<uint8_t> expectedRsrp;
1961 sourceConfigList.push_back(sourceConfig);
1970 targetConfigList.push_back(targetConfig);
1977 expectedTime.clear();
1978 expectedTime << 200 << 680 << 1200 << 1440 << 1680 << 1920;
1979 expectedRsrp.clear();
1980 expectedRsrp << 55 << 55 << 53 << 53 << 53 << 53;
1988 TestCase::Duration::TAKES_FOREVER);
1993 expectedTime.clear();
1994 expectedTime << 200 << 320 << 440 << 560 << 680 << 800 << 920 << 1200 << 1840;
1995 expectedRsrp.clear();
1996 expectedRsrp << 55 << 55 << 55 << 55 << 55 << 55 << 55 << 53 << 53;
2004 TestCase::Duration::QUICK);
2010 sourceConfigList.front().threshold1.range = 54;
2011 sourceConfigList.front().threshold2.range = 54;
2012 sourceConfigList.front().a3Offset = 1;
2013 targetConfigList.front().threshold1.range = 54;
2014 targetConfigList.front().threshold2.range = 54;
2015 targetConfigList.front().a3Offset = 1;
2020 expectedTime.clear();
2021 expectedTime << 200 << 440 << 680 << 920 << 1200 << 1440 << 1680 << 1920;
2022 expectedRsrp.clear();
2023 expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53;
2030 TestCase::Duration::EXTENSIVE);
2035 expectedTime.clear();
2036 expectedRsrp.clear();
2043 TestCase::Duration::TAKES_FOREVER);
2048 expectedTime.clear();
2049 expectedTime << 1200 << 1440 << 1680 << 1920;
2050 expectedRsrp.clear();
2051 expectedRsrp << 53 << 53 << 53 << 53;
2058 TestCase::Duration::TAKES_FOREVER);
2063 expectedTime.clear();
2064 expectedTime << 1200 << 1440 << 1680 << 1920;
2065 expectedRsrp.clear();
2066 expectedRsrp << 53 << 53 << 53 << 53;
2073 TestCase::Duration::QUICK);
2078 expectedTime.clear();
2079 expectedTime << 1200 << 1440 << 1680 << 1920;
2080 expectedRsrp.clear();
2081 expectedRsrp << 53 << 53 << 53 << 53;
2088 TestCase::Duration::EXTENSIVE);
2093 expectedTime.clear();
2094 expectedTime << 1200 << 1440 << 1680 << 1920;
2095 expectedRsrp.clear();
2096 expectedRsrp << 53 << 53 << 53 << 53;
2103 TestCase::Duration::TAKES_FOREVER);
2108 expectedTime.clear();
2109 expectedTime << 1200 << 1440 << 1680 << 1920;
2110 expectedRsrp.clear();
2111 expectedRsrp << 53 << 53 << 53 << 53;
2118 TestCase::Duration::TAKES_FOREVER);
2123 expectedTime.clear();
2124 expectedTime << 1200 << 1440 << 1680 << 1920;
2125 expectedRsrp.clear();
2126 expectedRsrp << 53 << 53 << 53 << 53;
2133 TestCase::Duration::EXTENSIVE);
2137 sourceConfigList.front().threshold1.range = 52;
2138 targetConfigList.front().threshold1.range = 56;
2143 expectedTime.clear();
2144 expectedTime << 200 << 440 << 680 << 920;
2145 expectedRsrp.clear();
2146 expectedRsrp << 55 << 55 << 55 << 55;
2154 TestCase::Duration::EXTENSIVE);
2159 expectedTime.clear();
2160 expectedTime << 1200 << 1440 << 1680 << 1920;
2161 expectedRsrp.clear();
2162 expectedRsrp << 53 << 53 << 53 << 53;
2170 TestCase::Duration::QUICK);
2174 sourceConfigList.front().a3Offset = -30;
2176 targetConfigList.front().a3Offset = 30;
2177 expectedTime.clear();
2178 expectedTime << 200 << 440 << 680 << 920;
2179 expectedRsrp.clear();
2180 expectedRsrp << 55 << 55 << 55 << 55;
2188 TestCase::Duration::QUICK);
2193 expectedTime.clear();
2194 expectedTime << 200 << 440 << 680 << 920;
2195 expectedRsrp.clear();
2196 expectedRsrp << 55 << 55 << 55 << 55;
2204 TestCase::Duration::EXTENSIVE);
2208 sourceConfigList.front().threshold2.range = 52;
2210 targetConfigList.front().threshold2.range = 56;
2211 expectedTime.clear();
2212 expectedRsrp.clear();
2220 TestCase::Duration::EXTENSIVE);
2225 sourceConfigList.front().a3Offset = 1;
2226 sourceConfigList.front().threshold1.range = 0;
2227 sourceConfigList.front().threshold2.range = 0;
2229 targetConfigList.front().a3Offset = 1;
2230 targetConfigList.front().threshold1.range = 0;
2231 targetConfigList.front().threshold2.range = 0;
2234 sourceConfigList.front().timeToTrigger = 1024;
2235 targetConfigList.front().timeToTrigger = 100;
2236 expectedTime.clear();
2237 expectedTime << 1300 << 1540 << 1780;
2238 expectedRsrp.clear();
2239 expectedRsrp << 53 << 53 << 53;
2246 TestCase::Duration::QUICK);
2249 sourceConfigList.front().timeToTrigger = 1024;
2250 targetConfigList.front().timeToTrigger = 640;
2251 expectedTime.clear();
2252 expectedTime << 1224 << 1464 << 1704 << 1944 << 2840 << 3080 << 3320 << 3560 << 3800 << 4040;
2253 expectedRsrp.clear();
2254 expectedRsrp << 55 << 55 << 55 << 55 << 53 << 53 << 53 << 53 << 53 << 53;
2261 TestCase::Duration::EXTENSIVE);
2277 std::list<LteRrcSap::ReportConfigEutra> sourceConfigList,
2278 std::list<LteRrcSap::ReportConfigEutra> targetConfigList,
2279 std::vector<Time> expectedTime,
2280 std::vector<uint8_t> expectedRsrp,
2283 m_sourceConfigList(sourceConfigList),
2284 m_targetConfigList(targetConfigList),
2285 m_expectedTime(expectedTime),
2286 m_expectedRsrp(expectedRsrp),
2287 m_duration(duration)
2294 NS_FATAL_ERROR(
"Vectors of expected results are not of the same size");
2315 lteHelper->SetEpcHelper(epcHelper);
2316 lteHelper->SetAttribute(
"PathlossModel",
StringValue(
"ns3::FriisSpectrumPropagationLossModel"));
2317 lteHelper->SetAttribute(
"UseIdealRrc",
BooleanValue(
true));
2338 positionAlloc->Add(Vector(0.0, 0.0, 0.0));
2339 positionAlloc->Add(Vector(900.0, 0.0, 0.0));
2340 positionAlloc->Add(Vector(400.0, 0.0, 0.0));
2342 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
2343 mobility.SetPositionAllocator(positionAlloc);
2344 mobility.Install(enbNodes);
2345 mobility.Install(ueNodes);
2348 Ptr<Node> pgw = epcHelper->GetPgwNode();
2352 remoteHostContainer.
Create(1);
2355 internet.Install(remoteHostContainer);
2364 ipv4h.
SetBase(
"1.0.0.0",
"255.0.0.0");
2371 remoteHostStaticRouting->AddNetworkRouteTo(
Ipv4Address(
"7.0.0.0"),
Ipv4Mask(
"255.0.0.0"), 1);
2382 enbDevs = lteHelper->InstallEnbDevice(enbNodes);
2383 ueDevs = lteHelper->InstallUeDevice(ueNodes);
2394 measId = enbRrc1->AddUeMeasReportConfig(*itReportConfig).at(0);
2402 measId = enbRrc2->AddUeMeasReportConfig(*itReportConfig).at(0);
2407 internet.Install(ueNodes);
2418 ueStaticRouting->SetDefaultRoute(epcHelper->GetUeDefaultGatewayAddress(), 1);
2422 lteHelper->Attach(ueDevs.
Get(0), enbDevs.
Get(0));
2425 lteHelper->AddX2Interface(enbNodes);
2429 "/NodeList/3/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
2434 "/NodeList/4/DeviceList/0/LteEnbRrc/RecvMeasurementReport",
2463 std::string context,
2472 bool isCorrectMeasId;
2478 else if (cellId == 2)
2488 if (!isCorrectMeasId)
2496 this <<
" Serving cellId=" << cellId
2509 "Unexpected report content");
2515 "Unexpected report content");
2522 "Report contains cgi-info, which is not supported");
2525 "Report does not contain measured RSRP result");
2528 "Report does not contain measured RSRQ result");
2529 NS_LOG_DEBUG(
this <<
" Neighbour cellId=" << it->physCellId
2530 <<
" rsrp=" << (uint16_t)it->rsrpResult <<
" ("
2532 <<
" rsrq=" << (uint16_t)it->rsrqResult <<
" ("
2560 "Reporting should not have occurred at this time");
2563 "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 MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
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.