LteRlcAm: trigger a STATUS report when T_reordering expires
authorNicola Baldo <nbaldo@cttc.es>
Fri, 22 Nov 2013 20:33:30 +0100
changeset 11305 246fcc3690b8
parent 11304 327eec0640a3
child 11306 5ec16cb14117
LteRlcAm: trigger a STATUS report when T_reordering expires
src/lte/model/lte-rlc-am.cc
src/lte/model/lte-rlc-am.h
src/lte/test/lte-test-rlc-am-e2e.cc
--- a/src/lte/model/lte-rlc-am.cc	Sun Nov 03 21:00:32 2013 +0100
+++ b/src/lte/model/lte-rlc-am.cc	Fri Nov 22 20:33:30 2013 +0100
@@ -76,6 +76,8 @@
 
   // Timers
   m_pollRetransmitTimerValue = MilliSeconds (100);
+  m_reorderingTimerValue = MilliSeconds (20);
+  m_statusProhibitTimerValue = MilliSeconds (20);
 }
 
 LteRlcAm::~LteRlcAm ()
@@ -247,6 +249,8 @@
 
       m_statusPduRequested = false;
       m_statusPduBufferSize = 0;
+      m_statusProhibitTimer = Simulator::Schedule (m_statusProhibitTimerValue,
+                                                   &LteRlcAm::ExpireStatusProhibitTimer, this);
       return;
     }
   else if ( m_retxBufferSize > 0 )
@@ -293,7 +297,7 @@
 
       NS_LOG_LOGIC ("Sending data from Transmission Buffer");
     }
-  else if ( m_txedBufferSize > 0 )
+  /* else if ( m_txedBufferSize > 0 )
     {
       NS_LOG_LOGIC ("Sending data from Transmitted Buffer");
 
@@ -335,7 +339,7 @@
           NS_LOG_LOGIC ("Waiting for bigger TxOpportunity");
           return;
         }
-    } 
+        }*/ 
   else
     {
       NS_LOG_LOGIC ("No data pending");
@@ -905,7 +909,7 @@
           if ( m_vrH > m_vrR )
             {
               NS_LOG_LOGIC ("Start reordering timer");
-              m_reorderingTimer = Simulator::Schedule (Time ("0.1s"),
+              m_reorderingTimer = Simulator::Schedule (m_reorderingTimerValue,
                                                        &LteRlcAm::ExpireReorderingTimer ,this);
               m_vrX = m_vrH;
               NS_LOG_LOGIC ("New VR(X) = " << m_vrX);
@@ -997,7 +1001,7 @@
 //             {
 //               NS_LOG_LOGIC ("VR(UX) > VR(UR). " << m_vrUx << " > " << m_vrUr);
 //               NS_LOG_LOGIC ("Start reordering timer");
-//               m_reorderingTimer = Simulator::Schedule (Time ("1.0s"),
+//               m_reorderingTimer = Simulator::Schedule (m_reorderingTimerValue),
 //                                                       &LteRlcAm::ExpireReorderingTimer ,this);
 //               m_vrUx = m_vrUh;
 //               NS_LOG_LOGIC ("New VR(UX) = " << m_vrUx);
@@ -1699,11 +1703,16 @@
   if ( m_vrH > m_vrMs )
     {
       NS_LOG_LOGIC ("Start reordering timer");
-      m_reorderingTimer = Simulator::Schedule (Time ("0.1s"),
+      m_reorderingTimer = Simulator::Schedule (m_reorderingTimerValue,
                                               &LteRlcAm::ExpireReorderingTimer ,this);
       m_vrX = m_vrH;
       NS_LOG_LOGIC ("New VR(MS) = " << m_vrMs);
     }
+
+    // Section 5.2.3 Status Reporting:
+    //   - The receiving side of an AM RLC entity shall trigger a
+    //     STATUS report when T_reordering expires. 
+  m_statusPduRequested = true;
 }
 
 void
@@ -1721,5 +1730,10 @@
 }
 
 
+void 
+LteRlcAm::ExpireStatusProhibitTimer (void)
+{
+  NS_LOG_FUNCTION (this);
+}
 
 } // namespace ns3
--- a/src/lte/model/lte-rlc-am.h	Sun Nov 03 21:00:32 2013 +0100
+++ b/src/lte/model/lte-rlc-am.h	Fri Nov 22 20:33:30 2013 +0100
@@ -62,6 +62,12 @@
   void ExpireReorderingTimer (void);
   void ExpirePollRetransmitTimer (void);
 
+  /** 
+   * method called when the T_status_prohibit timer expires
+   * 
+   */
+  void ExpireStatusProhibitTimer (void);
+
   bool IsInsideReceivingWindow (SequenceNumber10 seqNumber);
 // 
 //   void ReassembleOutsideWindow (void);
@@ -142,7 +148,9 @@
   EventId m_pollRetransmitTimer;
   Time    m_pollRetransmitTimerValue;
   EventId m_reorderingTimer;
+  Time    m_reorderingTimerValue;
   EventId m_statusProhibitTimer;
+  Time    m_statusProhibitTimerValue;
 
   /**
    * Configurable parameters. See section 7.4 in TS 36.322
--- a/src/lte/test/lte-test-rlc-am-e2e.cc	Sun Nov 03 21:00:32 2013 +0100
+++ b/src/lte/test/lte-test-rlc-am-e2e.cc	Fri Nov 22 20:33:30 2013 +0100
@@ -55,8 +55,6 @@
 {
   // NS_LOG_INFO ("Creating LteRlcAmE2eTestSuite");
 
-  AddTestCase (new LteRlcAmE2eTestCase ("the one that fails", 6666, 0.25), TestCase::QUICK);
-  
   double losses[] = {0.0, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95};
   uint32_t runs[] = {1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 9999, 10101};