src/lte/model/lte-enb-rrc.cc
changeset 9523 4f5bc596bf98
parent 9507 b3ae0b546cc4
child 9528 19959697c48e
--- a/src/lte/model/lte-enb-rrc.cc	Thu Dec 13 12:23:50 2012 +0100
+++ b/src/lte/model/lte-enb-rrc.cc	Thu Dec 13 12:50:50 2012 +0100
@@ -357,19 +357,34 @@
 }
 
 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)
+      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)
         {
-          it->second->m_pdcp->Start ();
+          drbIt->second->m_pdcp->Start ();
         }
-    }    
+    }
+  m_drbsToBeStarted.clear ();
 }
 
 
@@ -417,6 +432,7 @@
         m_pendingRrcConnectionReconfiguration = false;
         LteRrcSap::RrcConnectionReconfiguration msg = BuildRrcConnectionReconfiguration ();
         m_rrc->m_rrcSapUser->SendRrcConnectionReconfiguration (m_rnti, msg);
+        RecordDataRadioBearersToBeStarted ();
         SwitchToState (CONNECTION_RECONFIGURATION);
       }
       break;      
@@ -648,6 +664,7 @@
         msg2.rrcTransactionIdentifier = GetNewRrcTransactionIdentifier ();
         msg2.radioResourceConfigDedicated = BuildRadioResourceConfigDedicated ();
         m_rrc->m_rrcSapUser->SendRrcConnectionSetup (m_rnti, msg2);
+        RecordDataRadioBearersToBeStarted ();
         SwitchToState (CONNECTION_SETUP);
       }
       break;