src/lte/model/lte-enb-phy.cc
changeset 9409 4513a6e69157
parent 9406 7f0f9d8f8e20
child 9413 20f1c6678ee2
--- a/src/lte/model/lte-enb-phy.cc	Fri Nov 02 19:34:18 2012 +0100
+++ b/src/lte/model/lte-enb-phy.cc	Mon Nov 05 18:32:22 2012 +0100
@@ -136,6 +136,7 @@
     m_nrFrames (0),
     m_nrSubFrames (0),
     m_srsPeriodicity (0),
+    m_srsStartTime (Seconds (0)),
     m_currentSrsOffset (0)
 {
   m_enbPhySapProvider = new EnbMemberLteEnbPhySapProvider (this);
@@ -604,9 +605,13 @@
 void 
 LteEnbPhy::GenerateCtrlCqiReport (const SpectrumValue& sinr)
 {
-  NS_LOG_FUNCTION (this << sinr);
-  FfMacSchedSapProvider::SchedUlCqiInfoReqParameters ulcqi = CreateSrsCqiReport (sinr);
-  m_enbPhySapUser->UlCqiReport (ulcqi);
+  NS_LOG_FUNCTION (this << sinr << Simulator::Now () << m_srsStartTime);
+  // avoid processing SRSs sent with an old SRS configuration index
+  if (Simulator::Now () > m_srsStartTime)
+    {
+      FfMacSchedSapProvider::SchedUlCqiInfoReqParameters ulcqi = CreateSrsCqiReport (sinr);
+      m_enbPhySapUser->UlCqiReport (ulcqi);
+    }
 }
 
 void
@@ -768,8 +773,10 @@
       m_srsUeOffset.clear ();
       m_srsUeOffset.resize (p, 0);
       m_srsPeriodicity = p;
+      // inhibit SRS until RRC Connection Reconfiguration propagates to UEs
+      m_srsStartTime = Simulator::Now () + MilliSeconds (2);
     }
-    
+
   NS_LOG_DEBUG (this << " ENB SRS P " << m_srsPeriodicity << " RNTI " << rnti << " offset " << GetSrsSubframeOffset (srcCi) << " CI " << srcCi);
   std::map <uint16_t,uint16_t>::iterator it = m_srsCounter.find (rnti);
   if (it != m_srsCounter.end ())
@@ -781,7 +788,7 @@
       m_srsCounter.insert (std::pair<uint16_t, uint16_t> (rnti, GetSrsSubframeOffset (srcCi) + 1));
     }
   m_srsUeOffset.at (GetSrsSubframeOffset (srcCi)) = rnti;
-  
+    
 }