9#include "ns3/boolean.h"
10#include "ns3/double.h"
13#include "ns3/lte-rrc-header.h"
14#include "ns3/lte-rrc-sap.h"
15#include "ns3/packet.h"
17#include "ns3/string.h"
42 std::vector<uint8_t> buffer(pkt->GetSize());
43 std::ostringstream
oss(std::ostringstream::out);
44 pkt->CopyData(buffer.data(), buffer.size());
47 oss << std::setfill(
'0') << std::setw(2) << std::hex << +b <<
" ";
49 return std::string(
oss.str() +
"\n");
59 std::vector<uint8_t> buffer(pkt->GetSize());
60 std::ostringstream
oss(std::ostringstream::out);
61 pkt->CopyData(buffer.data(), buffer.size());
66 return std::string(
oss.str() +
"\n");
75 NS_LOG_DEBUG(
"---- SERIALIZED PACKET CONTENTS (HEX): -------");
88 NS_LOG_DEBUG(
"--------- " << s.data() <<
" INFO: -------");
89 std::ostringstream
oss(std::ostringstream::out);
148 srbToAddMod.logicalChannelConfig = logicalChannelConfig;
169 rrd.havePhysicalConfigDedicated =
true;
183 rrd.physicalConfigDedicated = physicalConfigDedicated;
194 rrcd2.srbToAddModList.size(),
195 "SrbToAddModList different sizes");
206 it2->logicalChannelConfig.priority,
207 "logicalChannelConfig.priority");
209 it2->logicalChannelConfig.prioritizedBitRateKbps,
210 "logicalChannelConfig.prioritizedBitRateKbps");
212 it2->logicalChannelConfig.bucketSizeDurationMs,
213 "logicalChannelConfig.bucketSizeDurationMs");
215 it2->logicalChannelConfig.logicalChannelGroup,
216 "logicalChannelConfig.logicalChannelGroup");
220 rrcd2.drbToAddModList.size(),
221 "DrbToAddModList different sizes");
234 it4->logicalChannelIdentity,
235 "logicalChannelIdentity");
239 it4->logicalChannelConfig.priority,
240 "logicalChannelConfig.priority");
242 it4->logicalChannelConfig.prioritizedBitRateKbps,
243 "logicalChannelConfig.prioritizedBitRateKbps");
245 it4->logicalChannelConfig.bucketSizeDurationMs,
246 "logicalChannelConfig.bucketSizeDurationMs");
248 it4->logicalChannelConfig.logicalChannelGroup,
249 "logicalChannelConfig.logicalChannelGroup");
253 rrcd2.drbToReleaseList.size(),
254 "DrbToReleaseList different sizes");
267 rrcd2.havePhysicalConfigDedicated,
268 "HavePhysicalConfigDedicated");
270 if (
rrcd1.havePhysicalConfigDedicated)
273 rrcd2.physicalConfigDedicated.haveSoundingRsUlConfigDedicated,
274 "haveSoundingRsUlConfigDedicated");
277 rrcd2.physicalConfigDedicated.soundingRsUlConfigDedicated.type,
278 "soundingRsUlConfigDedicated.type");
280 rrcd1.physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth,
281 rrcd2.physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth,
282 "soundingRsUlConfigDedicated.srsBandwidth");
285 rrcd1.physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex,
286 rrcd2.physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex,
287 "soundingRsUlConfigDedicated.srsConfigIndex");
290 rrcd2.physicalConfigDedicated.haveAntennaInfoDedicated,
291 "haveAntennaInfoDedicated");
293 if (
rrcd1.physicalConfigDedicated.haveAntennaInfoDedicated)
296 rrcd2.physicalConfigDedicated.antennaInfo.transmissionMode,
297 "antennaInfo.transmissionMode");
301 rrcd2.physicalConfigDedicated.havePdschConfigDedicated,
302 "havePdschConfigDedicated");
304 if (
rrcd1.physicalConfigDedicated.havePdschConfigDedicated)
307 rrcd2.physicalConfigDedicated.pdschConfigDedicated.pa,
308 "pdschConfigDedicated.pa");
322 void DoRun()
override;
334 NS_LOG_DEBUG(
"============= RrcConnectionRequestTestCase ===========");
343 TestUtils::LogPacketInfo<RrcConnectionRequestHeader>(
source,
"SOURCE");
353 packet->RemoveHeader(destination);
356 TestUtils::LogPacketInfo<RrcConnectionRequestHeader>(destination,
"DESTINATION");
374 void DoRun()
override;
386 NS_LOG_DEBUG(
"============= RrcConnectionSetupTestCase ===========");
396 TestUtils::LogPacketInfo<RrcConnectionSetupHeader>(
source,
"SOURCE");
406 packet->RemoveHeader(destination);
409 TestUtils::LogPacketInfo<RrcConnectionSetupHeader>(destination,
"DESTINATION");
414 "RrcTransactionIdentifier");
431 void DoRun()
override;
443 NS_LOG_DEBUG(
"============= RrcConnectionSetupCompleteTestCase ===========");
452 TestUtils::LogPacketInfo<RrcConnectionSetupCompleteHeader>(
source,
"SOURCE");
462 packet->RemoveHeader(destination);
465 TestUtils::LogPacketInfo<RrcConnectionSetupCompleteHeader>(destination,
"DESTINATION");
470 "RrcTransactionIdentifier");
484 void DoRun()
override;
496 NS_LOG_DEBUG(
"============= RrcConnectionReconfigurationCompleteTestCase ===========");
505 TestUtils::LogPacketInfo<RrcConnectionReconfigurationCompleteHeader>(
source,
"SOURCE");
515 packet->RemoveHeader(destination);
518 TestUtils::LogPacketInfo<RrcConnectionReconfigurationCompleteHeader>(destination,
524 "RrcTransactionIdentifier");
538 void DoRun()
override;
550 NS_LOG_DEBUG(
"============= RrcConnectionReconfigurationTestCase ===========");
555 msg.haveMeasConfig =
true;
557 msg.measConfig.haveQuantityConfig =
true;
558 msg.measConfig.quantityConfig.filterCoefficientRSRP = 8;
559 msg.measConfig.quantityConfig.filterCoefficientRSRQ = 7;
561 msg.measConfig.haveMeasGapConfig =
true;
564 msg.measConfig.measGapConfig.gapOffsetValue = 21;
566 msg.measConfig.haveSmeasure =
true;
567 msg.measConfig.sMeasure = 57;
569 msg.measConfig.haveSpeedStatePars =
true;
571 msg.measConfig.speedStatePars.mobilityStateParameters.tEvaluation = 240;
572 msg.measConfig.speedStatePars.mobilityStateParameters.tHystNormal = 60;
573 msg.measConfig.speedStatePars.mobilityStateParameters.nCellChangeMedium = 5;
574 msg.measConfig.speedStatePars.mobilityStateParameters.nCellChangeHigh = 13;
575 msg.measConfig.speedStatePars.timeToTriggerSf.sfMedium = 25;
576 msg.measConfig.speedStatePars.timeToTriggerSf.sfHigh = 75;
578 msg.measConfig.measObjectToRemoveList.push_back(23);
579 msg.measConfig.measObjectToRemoveList.push_back(13);
581 msg.measConfig.reportConfigToRemoveList.push_back(7);
582 msg.measConfig.reportConfigToRemoveList.push_back(16);
584 msg.measConfig.measIdToRemoveList.push_back(4);
585 msg.measConfig.measIdToRemoveList.push_back(18);
650 msg.haveMobilityControlInfo =
true;
651 msg.mobilityControlInfo.targetPhysCellId = 4;
652 msg.mobilityControlInfo.haveCarrierFreq =
true;
653 msg.mobilityControlInfo.carrierFreq.dlCarrierFreq = 3;
654 msg.mobilityControlInfo.carrierFreq.ulCarrierFreq = 5;
655 msg.mobilityControlInfo.haveCarrierBandwidth =
true;
656 msg.mobilityControlInfo.carrierBandwidth.dlBandwidth = 50;
657 msg.mobilityControlInfo.carrierBandwidth.ulBandwidth = 25;
658 msg.mobilityControlInfo.newUeIdentity = 11;
659 msg.mobilityControlInfo.haveRachConfigDedicated =
true;
660 msg.mobilityControlInfo.rachConfigDedicated.raPreambleIndex = 2;
661 msg.mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex = 2;
662 msg.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.preambleInfo
663 .numberOfRaPreambles = 4;
664 msg.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo
665 .preambleTransMax = 3;
666 msg.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo
667 .raResponseWindowSize = 6;
669 msg.haveRadioResourceConfigDedicated =
true;
673 msg.haveNonCriticalExtension =
false;
678 TestUtils::LogPacketInfo<RrcConnectionReconfigurationHeader>(
source,
"SOURCE");
688 packet->RemoveHeader(destination);
691 TestUtils::LogPacketInfo<RrcConnectionReconfigurationHeader>(destination,
"DESTINATION");
696 "RrcTransactionIdentifier");
699 "GetHaveMeasConfig");
702 "GetHaveMobilityControlInfo");
705 "GetHaveRadioResourceConfigDedicated");
707 if (
source.GetHaveMobilityControlInfo())
711 "GetMobilityControlInfo().targetPhysCellId");
714 "GetMobilityControlInfo().haveCarrierFreq");
717 "GetMobilityControlInfo().haveCarrierBandwidth");
720 "GetMobilityControlInfo().newUeIdentity");
723 "GetMobilityControlInfo().haveRachConfigDedicated");
725 if (
source.GetMobilityControlInfo().haveCarrierFreq)
729 "GetMobilityControlInfo().carrierFreq.dlCarrierFreq");
732 "GetMobilityControlInfo().carrierFreq.ulCarrierFreq");
735 if (
source.GetMobilityControlInfo().haveCarrierBandwidth)
739 "GetMobilityControlInfo().carrierBandwidth.dlBandwidth");
742 "GetMobilityControlInfo().carrierBandwidth.ulBandwidth");
745 if (
source.GetMobilityControlInfo().haveRachConfigDedicated)
748 source.GetMobilityControlInfo().rachConfigDedicated.raPreambleIndex,
750 "GetMobilityControlInfo().rachConfigDedicated.raPreambleIndex");
752 source.GetMobilityControlInfo().rachConfigDedicated.raPrachMaskIndex,
754 "GetMobilityControlInfo().rachConfigDedicated.raPrachMaskIndex");
758 if (
source.GetHaveRadioResourceConfigDedicated())
776 void DoRun()
override;
788 NS_LOG_DEBUG(
"============= HandoverPreparationInfoTestCase ===========");
792 msg.asConfig.sourceUeIdentity = 11;
794 msg.asConfig.sourceMasterInformationBlock.dlBandwidth = 50;
795 msg.asConfig.sourceMasterInformationBlock.systemFrameNumber = 1;
797 msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication =
true;
798 msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity = 5;
799 msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity = 4;
800 msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo
803 msg.asConfig.sourceSystemInformationBlockType2.freqInfo.ulBandwidth = 100;
804 msg.asConfig.sourceSystemInformationBlockType2.freqInfo.ulCarrierFreq = 10;
805 msg.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon
806 .preambleInfo.numberOfRaPreambles = 4;
807 msg.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon
808 .raSupervisionInfo.preambleTransMax = 3;
809 msg.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon
810 .raSupervisionInfo.raResponseWindowSize = 6;
812 msg.asConfig.sourceMeasConfig.haveQuantityConfig =
false;
813 msg.asConfig.sourceMeasConfig.haveMeasGapConfig =
false;
814 msg.asConfig.sourceMeasConfig.haveSmeasure =
false;
815 msg.asConfig.sourceMeasConfig.haveSpeedStatePars =
false;
821 TestUtils::LogPacketInfo<HandoverPreparationInfoHeader>(
source,
"SOURCE");
831 packet->RemoveHeader(destination);
834 TestUtils::LogPacketInfo<HandoverPreparationInfoHeader>(destination,
"DESTINATION");
847 "systemFrameNumber");
850 .sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity,
855 source.GetAsConfig().sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication,
860 source.GetAsConfig().sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity,
865 source.GetAsConfig().sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity,
871 "sourceDlCarrierFreq");
885 void DoRun()
override;
897 NS_LOG_DEBUG(
"============= RrcConnectionReestablishmentRequestTestCase ===========");
901 msg.ueIdentity.physCellId = 21;
908 TestUtils::LogPacketInfo<RrcConnectionReestablishmentRequestHeader>(
source,
"SOURCE");
918 packet->RemoveHeader(destination);
921 TestUtils::LogPacketInfo<RrcConnectionReestablishmentRequestHeader>(destination,
"DESTINATION");
930 "ReestablishmentCause");
944 void DoRun()
override;
956 NS_LOG_DEBUG(
"============= RrcConnectionReestablishmentTestCase ===========");
966 TestUtils::LogPacketInfo<RrcConnectionReestablishmentHeader>(
source,
"SOURCE");
976 packet->RemoveHeader(destination);
979 TestUtils::LogPacketInfo<RrcConnectionReestablishmentHeader>(destination,
"DESTINATION");
984 "rrcTransactionIdentifier");
1000 void DoRun()
override;
1012 NS_LOG_DEBUG(
"============= RrcConnectionReestablishmentCompleteTestCase ===========");
1021 TestUtils::LogPacketInfo<RrcConnectionReestablishmentCompleteHeader>(
source,
"SOURCE");
1031 packet->RemoveHeader(destination);
1034 TestUtils::LogPacketInfo<RrcConnectionReestablishmentCompleteHeader>(destination,
1040 "rrcTransactionIdentifier");
1054 void DoRun()
override;
1066 NS_LOG_DEBUG(
"============= RrcConnectionRejectTestCase ===========");
1075 TestUtils::LogPacketInfo<RrcConnectionRejectHeader>(
source,
"SOURCE");
1085 packet->RemoveHeader(destination);
1088 TestUtils::LogPacketInfo<RrcConnectionRejectHeader>(destination,
"DESTINATION");
1093 "Different waitTime!");
1107 void DoRun()
override;
1119 NS_LOG_DEBUG(
"============= MeasurementReportTestCase ===========");
1123 msg.measResults.measResultPCell.rsrpResult = 18;
1124 msg.measResults.measResultPCell.rsrqResult = 21;
1125 msg.measResults.haveMeasResultNeighCells =
true;
1137 msg.measResults.measResultListEutra.push_back(
mResEutra);
1139 msg.measResults.haveMeasResultServFreqList =
false;
1145 TestUtils::LogPacketInfo<MeasurementReportHeader>(
source,
"SOURCE");
1155 packet->RemoveHeader(destination);
1158 TestUtils::LogPacketInfo<MeasurementReportHeader>(destination,
"DESTINATION");
1166 dstMeas.measResultPCell.rsrpResult,
1167 "Different rsrpResult!");
1169 dstMeas.measResultPCell.rsrqResult,
1170 "Different rsrqResult!");
1172 dstMeas.haveMeasResultNeighCells,
1173 "Different haveMeasResultNeighCells!");
1175 if (
srcMeas.haveMeasResultNeighCells)
1184 if (
itsrc->haveCgiInfo)
1187 itdst->cgiInfo.plmnIdentity,
1188 "Different cgiInfo.plmnIdentity!");
1190 itdst->cgiInfo.cellIdentity,
1191 "Different cgiInfo.cellIdentity!");
1193 itdst->cgiInfo.trackingAreaCode,
1194 "Different cgiInfo.trackingAreaCode!");
1196 itdst->cgiInfo.plmnIdentityList.size(),
1197 "Different cgiInfo.plmnIdentityList.size()!");
1199 if (!
itsrc->cgiInfo.plmnIdentityList.empty())
1201 auto itsrc2 =
itsrc->cgiInfo.plmnIdentityList.begin();
1202 auto itdst2 =
itdst->cgiInfo.plmnIdentityList.begin();
1211 itdst->haveRsrpResult,
1212 "Different haveRsrpResult!");
1213 if (
itsrc->haveRsrpResult)
1217 "Different rsrpResult!");
1221 itdst->haveRsrqResult,
1222 "Different haveRsrqResult!");
1223 if (
itsrc->haveRsrqResult)
1227 "Different rsrqResult!");
Handover Preparation Info Test Case.
HandoverPreparationInfoTestCase()
void DoRun() override
Implementation to actually run this TestCase.
Measurement Report Test Case.
void DoRun() override
Implementation to actually run this TestCase.
MeasurementReportTestCase()
Rrc Connection Reconfiguration Complete Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionReconfigurationCompleteTestCase()
Rrc Connection Reconfiguration Test Case.
RrcConnectionReconfigurationTestCase()
void DoRun() override
Implementation to actually run this TestCase.
Rrc Connection Reestablishment Complete Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionReestablishmentCompleteTestCase()
Rrc Connection Reestablishment Request Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionReestablishmentRequestTestCase()
Rrc Connection Reestablishment Test Case.
RrcConnectionReestablishmentTestCase()
void DoRun() override
Implementation to actually run this TestCase.
Rrc Connection Reject Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionRejectTestCase()
Rrc Connection Request Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionRequestTestCase()
Rrc Connection Setup Complete Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionSetupCompleteTestCase()
Rrc Connection Setup Test Case.
void DoRun() override
Implementation to actually run this TestCase.
RrcConnectionSetupTestCase()
static void LogPacketContents(Ptr< Packet > pkt)
Function to log packet contents.
static void LogPacketInfo(T source, std::string s)
Function to log packet info.
static std::string sprintPacketContentsHex(Ptr< Packet > pkt)
Function to convert packet contents in hex format.
static std::string sprintPacketContentsBin(Ptr< Packet > pkt)
Function to convert packet contents in binary format.
This class manages the serialization/deserialization of HandoverPreparationInfo IE.
void SetMessage(LteRrcSap::HandoverPreparationInfo msg)
Receives a HandoverPreparationInfo IE and stores the contents into the class attributes.
LteRrcSap::AsConfig GetAsConfig() const
Getter for m_asConfig.
Smart pointer class similar to boost::intrusive_ptr.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
#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 ",...
Asn1EncodingSuite g_asn1EncodingSuite
Static variable for test initialization.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
#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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t transmissionMode
transmission mode
RadioResourceConfigDedicated sourceRadioResourceConfig
source radio resource config
MasterInformationBlock sourceMasterInformationBlock
source master information block
uint16_t sourceUeIdentity
source UE identity
uint32_t sourceDlCarrierFreq
source DL carrier frequency
SystemInformationBlockType1 sourceSystemInformationBlockType1
source system information block type 1
BlackCellsToAddMod structure.
uint8_t cellIndex
cell index
uint16_t dlBandwidth
DL bandwidth.
uint16_t ulBandwidth
UL bandwidth.
uint32_t dlCarrierFreq
DL carrier frequency.
uint32_t ulCarrierFreq
UL carrier frequency.
uint8_t cellIndex
cell index
uint8_t epsBearerIdentity
EPS bearer identity.
HandoverPreparationInfo structure.
AsConfig asConfig
AS config.
LogicalChannelConfig structure.
uint16_t bucketSizeDurationMs
bucket size duration ms
uint16_t prioritizedBitRateKbps
prioritized bit rate Kbps
uint8_t logicalChannelGroup
logical channel group
MeasIdToAddMod structure.
MeasObjectToAddMod structure.
uint8_t measObjectId
measure object ID
MeasResultEutra structure.
uint16_t physCellId
Phy cell ID.
MeasurementReport structure.
MeasResults measResults
measure results
RachConfigDedicated rachConfigDedicated
RACH config dedicated.
bool haveRachConfigDedicated
Have RACH config dedicated?
uint16_t newUeIdentity
new UE identity
bool haveCarrierBandwidth
have carrier bandwidth?
bool haveCarrierFreq
have carrier frequency?
CarrierBandwidthEutra carrierBandwidth
carrier bandwidth
CarrierFreqEutra carrierFreq
carrier frequency
uint16_t targetPhysCellId
target Phy cell ID
PhysicalConfigDedicated structure.
PdschConfigDedicated pdschConfigDedicated
PDSCH config dedicated.
bool haveAntennaInfoDedicated
have antenna info dedicated?
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
sounding RS UL config dedicated
bool haveSoundingRsUlConfigDedicated
have sounding RS UL config dedicated?
bool havePdschConfigDedicated
have PDSCH config dedicated?
AntennaInfoDedicated antennaInfo
antenna info
uint32_t plmnIdentity
PLMN identity.
uint8_t raPreambleIndex
RA preamble index.
uint8_t raPrachMaskIndex
RA PRACH mask index.
RadioResourceConfigDedicated structure.
std::list< uint8_t > drbToReleaseList
DRB to release list.
uint16_t physCellId
Phy cell ID.
@ SAME_AS_TRIGGER_QUANTITY
@ EVENT_A2
Event A2: Serving becomes worse than absolute threshold.
@ RSRQ
Reference Signal Received Quality.
ReportConfigToAddMod structure.
uint8_t reportConfigId
report config ID
Direction choice
direction choice
RrcConnectionReconfigurationCompleted structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReconfiguration structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReestablishmentComplete structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReestablishment structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReestablishmentRequest structure.
ReestabUeIdentity ueIdentity
UE identity.
RrcConnectionReject structure.
uint8_t waitTime
wait time
RrcConnectionRequest structure.
uint64_t ueIdentity
UE identity.
RrcConnectionSetupCompleted structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionSetup structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
uint16_t srsConfigIndex
SRS config index.
uint16_t srsBandwidth
SRS bandwidth.
uint8_t srbIdentity
SB identity.
@ THRESHOLD_RSRP
RSRP is used for the threshold.
@ THRESHOLD_RSRQ
RSRQ is used for the threshold.