This commit is contained in:
Marco Miozzo
2013-03-01 09:33:18 +01:00
4 changed files with 99 additions and 4 deletions

View File

@@ -520,6 +520,7 @@ UeManager::PrepareHandover (uint16_t cellId)
LteRrcSap::HandoverPreparationInfo hpi;
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;
@@ -1024,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 ()
{
@@ -1239,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<uint8_t> ())
.AddAttribute ("EventA4Threshold",
"Threshold of the event A4 (Neighbour becomes better than threshold)",
UintegerValue (255),
MakeUintegerAccessor (&LteEnbRrc::m_eventA4Threshold),
MakeUintegerChecker<uint8_t> ())
.AddTraceSource ("NewUeContext",
"trace fired upon creation of a new UE context",
MakeTraceSourceAccessor (&LteEnbRrc::m_newUeContextTrace))

View File

@@ -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<uint16_t, uint16_t> m_newUeContextTrace;

View File

@@ -4722,7 +4722,7 @@ RrcConnectionReconfigurationHeader::Print (std::ostream &os) const
{
os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
os << "haveMeasConfig: " << m_haveMeasConfig << std::endl;
if (m_haveMobilityControlInfo)
if (m_haveMeasConfig)
{
if (!m_measConfig.measObjectToRemoveList.empty ())
{

View File

@@ -55,8 +55,12 @@ public:
virtual ~LteRrcSap ();
// Constraint values
static const uint8_t MaxReportCells = 255;
// Information Elements
struct PlmnIdentityInfo
{
uint32_t plmnIdentity;