From 176377ae10a3f642cf1fb4b4a3afd5a54d535aef Mon Sep 17 00:00:00 2001 From: Manuel Requena Date: Thu, 28 Feb 2013 17:15:53 +0100 Subject: [PATCH] Add MeasConfig IE in the RRC Connection Reconfiguration message --- src/lte/model/lte-enb-rrc.cc | 88 +++++++++++++++++++++++++++++++++--- src/lte/model/lte-enb-rrc.h | 11 +++++ 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/src/lte/model/lte-enb-rrc.cc b/src/lte/model/lte-enb-rrc.cc index 3dc5703f6..114029e35 100644 --- a/src/lte/model/lte-enb-rrc.cc +++ b/src/lte/model/lte-enb-rrc.cc @@ -518,12 +518,9 @@ UeManager::PrepareHandover (uint16_t cellId) params.bearers = GetErabList (); LteRrcSap::HandoverPreparationInfo hpi; - hpi.asConfig.sourceMeasConfig.haveQuantityConfig = false; - hpi.asConfig.sourceMeasConfig.haveMeasGapConfig = false; - hpi.asConfig.sourceMeasConfig.haveSmeasure = false; - hpi.asConfig.sourceMeasConfig.haveSpeedStatePars = false; hpi.asConfig.sourceUeIdentity = m_rnti; hpi.asConfig.sourceDlCarrierFreq = m_rrc->m_dlEarfcn; + hpi.asConfig.sourceMeasConfig = BuildMeasConfig (); hpi.asConfig.sourceRadioResourceConfig = GetRadioResourceConfigForHandoverPreparationInfo (); hpi.asConfig.sourceMasterInformationBlock.dlBandwidth = m_rrc->m_dlBandwidth; hpi.asConfig.sourceMasterInformationBlock.systemFrameNumber = 0; @@ -1028,10 +1025,79 @@ UeManager::BuildRrcConnectionReconfiguration () msg.haveRadioResourceConfigDedicated = true; msg.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated (); msg.haveMobilityControlInfo = false; - msg.haveMeasConfig = false; + msg.haveMeasConfig = true; + msg.measConfig = BuildMeasConfig (); + return msg; } +LteRrcSap::MeasConfig +UeManager::BuildMeasConfig () +{ + // Just intra-frequency measurements are supported, + // so just one measurement object is created + LteRrcSap::MeasObjectToAddMod measObject; + measObject.measObjectId = 1; + measObject.measObjectEutra.carrierFreq = m_rrc->m_dlEarfcn; + measObject.measObjectEutra.allowedMeasBandwidth = m_rrc->m_dlBandwidth; + measObject.measObjectEutra.presenceAntennaPort1 = false; + measObject.measObjectEutra.neighCellConfig = 0; + measObject.measObjectEutra.offsetFreq = 0; + measObject.measObjectEutra.haveCellForWhichToReportCGI = false; + + // Just event A2 and event A4 are supported + LteRrcSap::ReportConfigToAddMod reportConfigA2; + reportConfigA2.reportConfigId = 1; + reportConfigA2.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::event; + reportConfigA2.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA2; + reportConfigA2.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::thresholdRsrq; + reportConfigA2.reportConfigEutra.threshold1.range = m_rrc->m_eventA2Threshold; + reportConfigA2.reportConfigEutra.hysteresis = 0; + reportConfigA2.reportConfigEutra.timeToTrigger = 0; + reportConfigA2.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::rsrq; + reportConfigA2.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::sameAsTriggerQuantity; + reportConfigA2.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells; + reportConfigA2.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms480; + reportConfigA2.reportConfigEutra.reportAmount = 255; + + LteRrcSap::ReportConfigToAddMod reportConfigA4; + reportConfigA4.reportConfigId = 2; + reportConfigA4.reportConfigEutra.triggerType = LteRrcSap::ReportConfigEutra::event; + reportConfigA4.reportConfigEutra.eventId = LteRrcSap::ReportConfigEutra::eventA4; + reportConfigA4.reportConfigEutra.threshold1.choice = LteRrcSap::ThresholdEutra::thresholdRsrq; + reportConfigA4.reportConfigEutra.threshold1.range = m_rrc->m_eventA4Threshold; + reportConfigA4.reportConfigEutra.hysteresis = 0; + reportConfigA4.reportConfigEutra.timeToTrigger = 0; + reportConfigA4.reportConfigEutra.triggerQuantity = LteRrcSap::ReportConfigEutra::rsrq; + reportConfigA4.reportConfigEutra.reportQuantity = LteRrcSap::ReportConfigEutra::sameAsTriggerQuantity; + reportConfigA4.reportConfigEutra.maxReportCells = LteRrcSap::MaxReportCells; + reportConfigA4.reportConfigEutra.reportInterval = LteRrcSap::ReportConfigEutra::ms480; + reportConfigA4.reportConfigEutra.reportAmount = 255; + + LteRrcSap::MeasIdToAddMod measId[2]; + measId[0].measId = 1; + measId[0].measObjectId = 1; + measId[0].reportConfigId = 1; + measId[1].measId = 2; + measId[1].measObjectId = 1; + measId[1].reportConfigId = 2; + + LteRrcSap::MeasConfig measConfig; + measConfig.measObjectToAddModList.push_back (measObject); + measConfig.reportConfigToAddModList.push_back (reportConfigA2); + measConfig.reportConfigToAddModList.push_back (reportConfigA4); + measConfig.measIdToAddModList.push_back (measId[0]); + measConfig.measIdToAddModList.push_back (measId[1]); + measConfig.haveQuantityConfig = true; + measConfig.quantityConfig.filterCoefficientRSRP = 4; // default = fc4 (See TS 36.331) + measConfig.quantityConfig.filterCoefficientRSRQ = 4; // default = fc4 (See TS 36.331) + measConfig.haveMeasGapConfig = false; + measConfig.haveSmeasure = false; + measConfig.haveSpeedStatePars = false; + + return measConfig; +} + LteRrcSap::RadioResourceConfigDedicated UeManager::BuildRadioResourceConfigDedicated () { @@ -1243,7 +1309,17 @@ LteEnbRrc::GetTypeId (void) "Whether to admit a connection request from a Ue", BooleanValue (true), MakeBooleanAccessor (&LteEnbRrc::m_admitRrcConnectionRequest), - MakeBooleanChecker ()) + MakeBooleanChecker ()) + .AddAttribute ("EventA2Threshold", + "Threshold of the event A2 (Serving becomes worse than threshold)", + UintegerValue (0), + MakeUintegerAccessor (&LteEnbRrc::m_eventA2Threshold), + MakeUintegerChecker ()) + .AddAttribute ("EventA4Threshold", + "Threshold of the event A4 (Neighbour becomes better than threshold)", + UintegerValue (255), + MakeUintegerAccessor (&LteEnbRrc::m_eventA4Threshold), + MakeUintegerChecker ()) .AddTraceSource ("NewUeContext", "trace fired upon creation of a new UE context", MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace)) diff --git a/src/lte/model/lte-enb-rrc.h b/src/lte/model/lte-enb-rrc.h index bc278802c..c70f99526 100644 --- a/src/lte/model/lte-enb-rrc.h +++ b/src/lte/model/lte-enb-rrc.h @@ -315,6 +315,13 @@ private: */ LteRrcSap::RadioResourceConfigDedicated BuildRadioResourceConfigDedicated (); + /** + * + * \return a MeasConfig struct built based on the + * current configuration + */ + LteRrcSap::MeasConfig BuildMeasConfig (); + /** * @@ -765,8 +772,12 @@ private: uint16_t m_lastAllocatedConfigurationIndex; bool m_reconfigureUes; + // Handover related attributes bool m_admitHandoverRequest; bool m_admitRrcConnectionRequest; + uint8_t m_eventA2Threshold; + uint8_t m_eventA4Threshold; + // cellid rnti TracedCallback m_newUeContextTrace;