src/lte/model/lte-enb-rrc.cc
changeset 9420 cd49c7790894
parent 9419 dc7f7a8fab0b
child 9425 b7eddbdb3a5a
equal deleted inserted replaced
9419:dc7f7a8fab0b 9420:cd49c7790894
   517     case HANDOVER_JOINING:
   517     case HANDOVER_JOINING:
   518       NS_LOG_INFO ("Send UE CONTEXT RELEASE from target eNB to source eNB");
   518       NS_LOG_INFO ("Send UE CONTEXT RELEASE from target eNB to source eNB");
   519       EpcX2SapProvider::UeContextReleaseParams ueCtxReleaseParams;
   519       EpcX2SapProvider::UeContextReleaseParams ueCtxReleaseParams;
   520       ueCtxReleaseParams.oldEnbUeX2apId = m_sourceX2apId;
   520       ueCtxReleaseParams.oldEnbUeX2apId = m_sourceX2apId;
   521       ueCtxReleaseParams.newEnbUeX2apId = m_rnti;
   521       ueCtxReleaseParams.newEnbUeX2apId = m_rnti;
       
   522       ueCtxReleaseParams.sourceCellId = m_sourceCellId;
   522       m_rrc->m_x2SapProvider->SendUeContextRelease (ueCtxReleaseParams);
   523       m_rrc->m_x2SapProvider->SendUeContextRelease (ueCtxReleaseParams);
   523       SwitchToState (CONNECTED_NORMALLY);
   524       SwitchToState (CONNECTED_NORMALLY);
       
   525       break;
   524       
   526       
   525     default:
   527     default:
   526       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
   528       NS_FATAL_ERROR ("method unexpected in state " << ToString (m_state));
   527       break;      
   529       break;      
   528     }
   530     }
  1124   NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
  1126   NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
  1125 
  1127 
  1126   NS_ASSERT (params.targetCellId == m_cellId);
  1128   NS_ASSERT (params.targetCellId == m_cellId);
  1127   
  1129   
  1128   uint16_t rnti = AddUe (UeManager::HANDOVER_JOINING);
  1130   uint16_t rnti = AddUe (UeManager::HANDOVER_JOINING);
       
  1131   LteEnbCmacSapProvider::AllocateNcRaPreambleReturnValue anrcrv = m_cmacSapProvider->AllocateNcRaPreamble (rnti);
       
  1132   if (anrcrv.valid == false)
       
  1133     {
       
  1134       NS_LOG_INFO (this << "failed to allocate a preamble for non-contention based RA => cannot accept HO");
       
  1135       RemoveUe (rnti);
       
  1136       NS_FATAL_ERROR ("should trigger HO Preparation Failure, but it is not implemented");
       
  1137       return;
       
  1138     }    
       
  1139 
  1129   Ptr<UeManager> ueManager = GetUeManager (rnti);
  1140   Ptr<UeManager> ueManager = GetUeManager (rnti);
  1130   ueManager->SetSource (params.sourceCellId, params.oldEnbUeX2apId);
  1141   ueManager->SetSource (params.sourceCellId, params.oldEnbUeX2apId);
  1131 
  1142 
  1132   for (std::vector <EpcX2Sap::ErabToBeSetupItem>::iterator it = params.bearers.begin ();
  1143   for (std::vector <EpcX2Sap::ErabToBeSetupItem>::iterator it = params.bearers.begin ();
  1133        it != params.bearers.end ();
  1144        it != params.bearers.end ();
  1137     }
  1148     }
  1138 
  1149 
  1139   LteRrcSap::RrcConnectionReconfiguration handoverCommand = ueManager->GetRrcConnectionReconfigurationForHandover ();
  1150   LteRrcSap::RrcConnectionReconfiguration handoverCommand = ueManager->GetRrcConnectionReconfigurationForHandover ();
  1140   handoverCommand.haveMobilityControlInfo = true;
  1151   handoverCommand.haveMobilityControlInfo = true;
  1141   handoverCommand.mobilityControlInfo.targetPhysCellId = m_cellId;
  1152   handoverCommand.mobilityControlInfo.targetPhysCellId = m_cellId;
       
  1153   handoverCommand.mobilityControlInfo.haveCarrierFreq = true;
  1142   handoverCommand.mobilityControlInfo.carrierFreq.dlCarrierFreq = m_dlEarfcn;
  1154   handoverCommand.mobilityControlInfo.carrierFreq.dlCarrierFreq = m_dlEarfcn;
  1143   handoverCommand.mobilityControlInfo.carrierFreq.ulCarrierFreq = m_ulEarfcn;
  1155   handoverCommand.mobilityControlInfo.carrierFreq.ulCarrierFreq = m_ulEarfcn;
  1144   handoverCommand.mobilityControlInfo.haveCarrierBandwidth = true;
  1156   handoverCommand.mobilityControlInfo.haveCarrierBandwidth = true;
  1145   handoverCommand.mobilityControlInfo.carrierBandwidth.dlBandwidth = m_dlBandwidth;
  1157   handoverCommand.mobilityControlInfo.carrierBandwidth.dlBandwidth = m_dlBandwidth;
  1146   handoverCommand.mobilityControlInfo.carrierBandwidth.ulBandwidth = m_ulBandwidth;
  1158   handoverCommand.mobilityControlInfo.carrierBandwidth.ulBandwidth = m_ulBandwidth;
  1147   handoverCommand.mobilityControlInfo.newUeIdentity = rnti;
  1159   handoverCommand.mobilityControlInfo.newUeIdentity = rnti;
  1148   LteEnbCmacSapProvider::AllocateNcRaPreambleReturnValue anrcrv = m_cmacSapProvider->AllocateNcRaPreamble ();
  1160   handoverCommand.mobilityControlInfo.haveRachConfigDedicated = true;
  1149   if (anrcrv.valid == true)
  1161   handoverCommand.mobilityControlInfo.rachConfigDedicated.raPreambleIndex = anrcrv.raPreambleId;
  1150     {
  1162   handoverCommand.mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex = anrcrv.raPrachMaskIndex;
  1151       handoverCommand.mobilityControlInfo.haveRachConfigDedicated = true;
       
  1152       handoverCommand.mobilityControlInfo.rachConfigDedicated.raPreambleIndex = anrcrv.raPreambleId;
       
  1153       handoverCommand.mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex = anrcrv.raPrachMaskIndex;
       
  1154     }
       
  1155   else
       
  1156     {
       
  1157       handoverCommand.mobilityControlInfo.haveRachConfigDedicated = false;      
       
  1158     }
       
  1159   Ptr<Packet> encodedHandoverCommand = m_rrcSapUser->EncodeHandoverCommand (handoverCommand);
  1163   Ptr<Packet> encodedHandoverCommand = m_rrcSapUser->EncodeHandoverCommand (handoverCommand);
  1160 
  1164 
  1161   NS_LOG_LOGIC ("Send X2 message: HANDOVER REQUEST ACK");
  1165   NS_LOG_LOGIC ("Send X2 message: HANDOVER REQUEST ACK");
  1162 
  1166 
  1163   EpcX2SapProvider::HandoverRequestAckParams ackParams;
  1167   EpcX2SapProvider::HandoverRequestAckParams ackParams;
  1408 
  1412 
  1409 void
  1413 void
  1410 LteEnbRrc::RemoveSrsConfigurationIndex (uint16_t srcCi)
  1414 LteEnbRrc::RemoveSrsConfigurationIndex (uint16_t srcCi)
  1411 {
  1415 {
  1412   NS_LOG_FUNCTION (this << srcCi);
  1416   NS_LOG_FUNCTION (this << srcCi);
  1413   NS_FATAL_ERROR ("I though this method was unused so far...");
       
  1414   std::set<uint16_t>::iterator it = m_ueSrsConfigurationIndexSet.find (srcCi);
  1417   std::set<uint16_t>::iterator it = m_ueSrsConfigurationIndexSet.find (srcCi);
  1415   NS_ASSERT_MSG (it != m_ueSrsConfigurationIndexSet.end (), "request to remove unkwown SRS CI " << srcCi);
  1418   NS_ASSERT_MSG (it != m_ueSrsConfigurationIndexSet.end (), "request to remove unkwown SRS CI " << srcCi);
  1416   m_ueSrsConfigurationIndexSet.erase (it);
  1419   m_ueSrsConfigurationIndexSet.erase (it);
  1417   NS_ASSERT (m_srsCurrentPeriodicityId > 1);
  1420   NS_ASSERT (m_srsCurrentPeriodicityId >= 1 && m_srsCurrentPeriodicityId <= SRS_ENTRIES);
  1418   if (m_ueSrsConfigurationIndexSet.size () < g_srsPeriodicity[m_srsCurrentPeriodicityId - 1])
  1421   if (m_ueSrsConfigurationIndexSet.size () < g_srsPeriodicity[m_srsCurrentPeriodicityId - 1])
  1419     {
  1422     {
  1420       // reduce the periodicity
  1423       // reduce the periodicity
  1421       m_ueSrsConfigurationIndexSet.clear ();
  1424       m_ueSrsConfigurationIndexSet.clear ();
  1422       m_srsCurrentPeriodicityId--;
  1425       m_srsCurrentPeriodicityId--;