diff --git a/src/lte/model/lte-enb-rrc.cc b/src/lte/model/lte-enb-rrc.cc index 2ccb444b6..453329e85 100644 --- a/src/lte/model/lte-enb-rrc.cc +++ b/src/lte/model/lte-enb-rrc.cc @@ -527,6 +527,12 @@ UeManager::PrepareHandover (uint16_t cellId) hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity = m_rrc->m_cellId; hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = 0; hpi.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity = 0; + LteEnbCmacSapProvider::RachConfig rc = m_rrc->m_cmacSapProvider->GetRachConfig (); + hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles; + hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax; + hpi.asConfig.sourceSystemInformationBlockType2.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize = rc.raResponseWindowSize; + hpi.asConfig.sourceSystemInformationBlockType2.freqInfo.ulCarrierFreq = m_rrc->m_ulEarfcn; + hpi.asConfig.sourceSystemInformationBlockType2.freqInfo.ulBandwidth = m_rrc->m_ulBandwidth; params.rrcContext = m_rrc->m_rrcSapUser->EncodeHandoverPreparationInformation (hpi); NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId); @@ -1543,6 +1549,12 @@ LteEnbRrc::DoRecvHandoverRequest (EpcX2SapUser::HandoverRequestParams req) handoverCommand.mobilityControlInfo.haveRachConfigDedicated = true; handoverCommand.mobilityControlInfo.rachConfigDedicated.raPreambleIndex = anrcrv.raPreambleId; handoverCommand.mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex = anrcrv.raPrachMaskIndex; + + LteEnbCmacSapProvider::RachConfig rc = m_cmacSapProvider->GetRachConfig (); + handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.preambleInfo.numberOfRaPreambles = rc.numberOfRaPreambles; + handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.preambleTransMax = rc.preambleTransMax; + handoverCommand.mobilityControlInfo.radioResourceConfigCommon.rachConfigCommon.raSupervisionInfo.raResponseWindowSize = rc.raResponseWindowSize; + Ptr encodedHandoverCommand = m_rrcSapUser->EncodeHandoverCommand (handoverCommand); ackParams.rrcContext = encodedHandoverCommand; diff --git a/src/lte/model/lte-rrc-protocol-real.cc b/src/lte/model/lte-rrc-protocol-real.cc index 0113e84f5..3e2c4a1cf 100644 --- a/src/lte/model/lte-rrc-protocol-real.cc +++ b/src/lte/model/lte-rrc-protocol-real.cc @@ -468,17 +468,24 @@ LteEnbRrcProtocolReal::DoSetupUe (uint16_t rnti, LteEnbRrcSapUser::SetupUeParame // Store SetupUeParameters m_setupUeParametersMap[rnti] = params; - // Create LteRlcSapUser, LtePdcpSapUser - LteRlcSapUser* srb0SapUser = new RealProtocolRlcSapUser (this,rnti); - LtePdcpSapUser* srb1SapUser = new LtePdcpSpecificLtePdcpSapUser (this); LteEnbRrcSapProvider::CompleteSetupUeParameters completeSetupUeParameters; - completeSetupUeParameters.srb0SapUser = srb0SapUser; - completeSetupUeParameters.srb1SapUser = srb1SapUser; - - // Store LteRlcSapUser, LtePdcpSapUser - m_completeSetupUeParametersMap[rnti] = completeSetupUeParameters; - - m_enbRrcSapProvider->CompleteSetupUe (rnti,completeSetupUeParameters); + std::map::iterator + csupIt = m_completeSetupUeParametersMap.find (rnti); + if (csupIt == m_completeSetupUeParametersMap.end ()) + { + // Create LteRlcSapUser, LtePdcpSapUser + LteRlcSapUser* srb0SapUser = new RealProtocolRlcSapUser (this,rnti); + LtePdcpSapUser* srb1SapUser = new LtePdcpSpecificLtePdcpSapUser (this); + completeSetupUeParameters.srb0SapUser = srb0SapUser; + completeSetupUeParameters.srb1SapUser = srb1SapUser; + // Store LteRlcSapUser, LtePdcpSapUser + m_completeSetupUeParametersMap[rnti] = completeSetupUeParameters; + } + else + { + completeSetupUeParameters = csupIt->second; + } + m_enbRrcSapProvider->CompleteSetupUe (rnti, completeSetupUeParameters); } void