diff -r 80fa1de0bef2 -r 4513a6e69157 src/lte/model/lte-enb-phy.cc --- 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 ::iterator it = m_srsCounter.find (rnti); if (it != m_srsCounter.end ()) @@ -781,7 +788,7 @@ m_srsCounter.insert (std::pair (rnti, GetSrsSubframeOffset (srcCi) + 1)); } m_srsUeOffset.at (GetSrsSubframeOffset (srcCi)) = rnti; - + }