--- 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;
-
+
}