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