Add support for AM RLC entity
authorManuel Requena <manuel.requena@cttc.es>
Mon, 05 Dec 2011 12:10:14 +0100
changeset 8446 e0099c11a8a2
parent 8382 74a6867a45b7
child 8447 93d611bd3687
Add support for AM RLC entity
src/lte/test/lte-test-entities.cc
src/lte/test/lte-test-entities.h
--- a/src/lte/test/lte-test-entities.cc	Wed Sep 28 17:40:44 2011 +0200
+++ b/src/lte/test/lte-test-entities.cc	Mon Dec 05 12:10:14 2011 +0100
@@ -22,6 +22,7 @@
 #include "ns3/log.h"
 
 #include "ns3/lte-rlc-header.h"
+#include "ns3/lte-rlc-am-header.h"
 #include "ns3/lte-pdcp-header.h"
 
 #include "ns3/lte-test-entities.h"
@@ -320,6 +321,13 @@
 }
 
 void
+LteTestMac::SetRlcAmHeaderPresent (bool present)
+{
+  NS_LOG_FUNCTION (this);
+  m_rlcAmHeaderPresent = present;
+}
+
+void
 LteTestMac::SetTxOpportunityMode (uint8_t mode)
 {
   NS_LOG_FUNCTION (this);
@@ -343,12 +351,22 @@
     }
   else
     {
-      LteRlcHeader rlcHeader;
       LtePdcpHeader pdcpHeader;
 
-      // Remove RLC header
-      params.pdu->RemoveHeader (rlcHeader);
-      NS_LOG_LOGIC ("RLC header: " << rlcHeader);
+      if (m_rlcAmHeaderPresent)
+        {
+          // Remove AM RLC header
+          LteRlcAmHeader rlcAmHeader;
+          params.pdu->RemoveHeader (rlcAmHeader);
+          NS_LOG_LOGIC ("AM RLC header: " << rlcAmHeader);
+        }
+      else
+        {
+          // Remove UM RLC header
+          LteRlcHeader rlcHeader;
+          params.pdu->RemoveHeader (rlcHeader);
+          NS_LOG_LOGIC ("UM RLC header: " << rlcHeader);
+        }
 
       // Remove PDCP header, if present
       if (m_pdcpHeaderPresent)
@@ -372,11 +390,27 @@
 LteTestMac::DoReportBufferStatus (LteMacSapProvider::ReportBufferStatusParameters params)
 {
   NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC ("Queue size = " << params.txQueueSize);
+  NS_LOG_LOGIC ("TxonQueue size = " << params.txQueueSize);
+  NS_LOG_LOGIC ("RetxQueue size = " << params.retxQueueSize);
+  NS_LOG_LOGIC ("StatusPdu size = " << params.statusPduSize);
 
-  if ((m_txOpportunityMode == AUTOMATIC_MODE) && params.txQueueSize)
+  if (m_txOpportunityMode == AUTOMATIC_MODE)
     {
-      Simulator::Schedule (Seconds (0.1), &LteMacSapUser::NotifyTxOpportunity,
-                           m_macSapUser, params.txQueueSize + 2); // TODO Including RLC header size??? Not clean
+      if (params.statusPduSize)
+        {
+          Simulator::Schedule (Seconds (0.1), &LteMacSapUser::NotifyTxOpportunity,
+                               m_macSapUser, params.statusPduSize + 2);
+        }
+      else if (params.txQueueSize)
+        {
+          Simulator::Schedule (Seconds (0.1), &LteMacSapUser::NotifyTxOpportunity,
+                               m_macSapUser, params.txQueueSize + 2);
+        }
+      else if (params.retxQueueSize)
+        {
+          Simulator::Schedule (Seconds (0.1), &LteMacSapUser::NotifyTxOpportunity,
+                               m_macSapUser, params.retxQueueSize + 2);
+        }
     }
+
 }
--- a/src/lte/test/lte-test-entities.h	Wed Sep 28 17:40:44 2011 +0200
+++ b/src/lte/test/lte-test-entities.h	Mon Dec 05 12:10:14 2011 +0100
@@ -176,6 +176,11 @@
     /**
      *
      */
+    void SetRlcAmHeaderPresent (bool present);
+
+    /**
+     *
+     */
     void SetTxOpportunityMode (uint8_t mode);
 
     typedef enum {
@@ -195,6 +200,7 @@
     std::string m_receivedData;
 
     bool m_pdcpHeaderPresent;
+    bool m_rlcAmHeaderPresent;
     bool m_txOpportunityMode;
 
 };