LteEnbRrc: start only bearers in previous RRC connection setup/reconfiguration msg

This commit is contained in:
Nicola Baldo
2012-12-13 12:50:50 +01:00
parent 2fb9b625a4
commit 82e2613d41
2 changed files with 32 additions and 7 deletions

View File

@@ -357,21 +357,36 @@ UeManager::SetupDataRadioBearer (EpsBearer bearer, uint8_t bearerId, uint32_t gt
}
void
UeManager::StartDataRadioBearers ()
UeManager::RecordDataRadioBearersToBeStarted ()
{
NS_LOG_FUNCTION (this << (uint32_t) m_rnti);
for (std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator it = m_drbMap.begin ();
it != m_drbMap.end ();
++it)
{
it->second->m_rlc->Start ();
if (it->second->m_pdcp)
{
it->second->m_pdcp->Start ();
}
m_drbsToBeStarted.push_back (it->first);
}
}
void
UeManager::StartDataRadioBearers ()
{
NS_LOG_FUNCTION (this << (uint32_t) m_rnti);
for (std::list <uint8_t>::iterator drbIdIt = m_drbsToBeStarted.begin ();
drbIdIt != m_drbsToBeStarted.end ();
++drbIdIt)
{
std::map <uint8_t, Ptr<LteDataRadioBearerInfo> >::iterator drbIt = m_drbMap.find (*drbIdIt);
NS_ASSERT (drbIt != m_drbMap.end ());
drbIt->second->m_rlc->Start ();
if (drbIt->second->m_pdcp)
{
drbIt->second->m_pdcp->Start ();
}
}
m_drbsToBeStarted.clear ();
}
void
UeManager::ReleaseDataRadioBearer (uint8_t drbid)
@@ -417,6 +432,7 @@ UeManager::ScheduleRrcConnectionReconfiguration ()
m_pendingRrcConnectionReconfiguration = false;
LteRrcSap::RrcConnectionReconfiguration msg = BuildRrcConnectionReconfiguration ();
m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, msg);
RecordDataRadioBearersToBeStarted ();
SwitchToState (CONNECTION_RECONFIGURATION);
}
break;
@@ -648,6 +664,7 @@ UeManager::RecvRrcConnectionRequest (LteRrcSap::RrcConnectionRequest msg)
msg2.rrcTransactionIdentifier = GetNewRrcTransactionIdentifier ();
msg2.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
m_rrc->m_rrcSapUser->SendRrcConnectionSetup (m_rnti, msg2);
RecordDataRadioBearersToBeStarted ();
SwitchToState (CONNECTION_SETUP);
}
break;

View File

@@ -127,12 +127,19 @@ public:
*
*/
void SetupDataRadioBearer (EpsBearer bearer, uint8_t bearerId, uint32_t gtpTeid, Ipv4Address transportLayerAddress);
/**
* Start all configured data radio bearers. It is safe to call this
* method if any bearer had been already started previously.
*
*/
void RecordDataRadioBearersToBeStarted ();
/**
* Start the data radio bearers that have been previously recorded
* to be started using RecordDataRadioBearersToBeStarted()
*
*/
void StartDataRadioBearers ();
/**
@@ -380,6 +387,7 @@ private:
uint16_t m_sourceX2apId;
uint16_t m_sourceCellId;
uint16_t m_targetCellId;
std::list<uint8_t> m_drbsToBeStarted;
};