From 9b3e97434bd2978a9c290d3cee2eccb447dc82da Mon Sep 17 00:00:00 2001 From: Shiva Gantha Date: Mon, 24 May 2021 01:22:23 +0530 Subject: [PATCH] lte: (fixes #395) Add transmission buffer size for RLC AM - code copied from lte-rlc-um.cc - add packet drop trace in LteRlc (referred code in wifi-phy.cc:PhyTxDrop) --- src/lte/model/lte-rlc-am.cc | 38 ++++++++++++++++++++++++++----------- src/lte/model/lte-rlc-am.h | 1 + src/lte/model/lte-rlc-um.cc | 1 + src/lte/model/lte-rlc.cc | 5 +++++ src/lte/model/lte-rlc.h | 5 +++++ 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/lte/model/lte-rlc-am.cc b/src/lte/model/lte-rlc-am.cc index 2f0dca818..d78dc7352 100644 --- a/src/lte/model/lte-rlc-am.cc +++ b/src/lte/model/lte-rlc-am.cc @@ -119,7 +119,11 @@ LteRlcAm::GetTypeId (void) BooleanValue (false), MakeBooleanAccessor (&LteRlcAm::m_txOpportunityForRetxAlwaysBigEnough), MakeBooleanChecker ()) - + .AddAttribute ("MaxTxBufferSize", + "Maximum Size of the Transmission Buffer (in Bytes)", + UintegerValue (10 * 1024), + MakeUintegerAccessor (&LteRlcAm::m_maxTxBufferSize), + MakeUintegerChecker ()) ; return tid; } @@ -133,6 +137,7 @@ LteRlcAm::DoDispose () m_statusProhibitTimer.Cancel (); m_rbsTimer.Cancel (); + m_maxTxBufferSize = 0; m_txonBuffer.clear (); m_txonBufferSize = 0; m_txedBuffer.clear (); @@ -157,17 +162,28 @@ LteRlcAm::DoTransmitPdcpPdu (Ptr p) { NS_LOG_FUNCTION (this << m_rnti << (uint32_t) m_lcid << p->GetSize ()); - /** Store PDCP PDU */ + if (m_txonBufferSize + p->GetSize () <= m_maxTxBufferSize) + { + /** Store PDCP PDU */ + LteRlcSduStatusTag tag; + tag.SetStatus (LteRlcSduStatusTag::FULL_SDU); + p->AddPacketTag (tag); - LteRlcSduStatusTag tag; - tag.SetStatus (LteRlcSduStatusTag::FULL_SDU); - p->AddPacketTag (tag); - - NS_LOG_LOGIC ("Txon Buffer: New packet added"); - m_txonBuffer.push_back (TxPdu (p, Simulator::Now ())); - m_txonBufferSize += p->GetSize (); - NS_LOG_LOGIC ("NumOfBuffers = " << m_txonBuffer.size() ); - NS_LOG_LOGIC ("txonBufferSize = " << m_txonBufferSize); + NS_LOG_LOGIC ("Txon Buffer: New packet added"); + m_txonBuffer.push_back (TxPdu (p, Simulator::Now ())); + m_txonBufferSize += p->GetSize (); + NS_LOG_LOGIC ("NumOfBuffers = " << m_txonBuffer.size() ); + NS_LOG_LOGIC ("txonBufferSize = " << m_txonBufferSize); + } + else + { + // Discard full RLC SDU + NS_LOG_LOGIC ("TxonBuffer is full. RLC SDU discarded"); + NS_LOG_LOGIC ("MaxTxBufferSize = " << m_maxTxBufferSize); + NS_LOG_LOGIC ("txonBufferSize = " << m_txonBufferSize); + NS_LOG_LOGIC ("packet size = " << p->GetSize ()); + m_txDropTrace (p); + } /** Report Buffer Status */ DoReportBufferStatus (); diff --git a/src/lte/model/lte-rlc-am.h b/src/lte/model/lte-rlc-am.h index 260d1e97f..8fa7804a2 100644 --- a/src/lte/model/lte-rlc-am.h +++ b/src/lte/model/lte-rlc-am.h @@ -143,6 +143,7 @@ private: ///< for retransmission std::vector m_retxBuffer; ///< Buffer for PDUs considered for retransmission + uint32_t m_maxTxBufferSize; ///< maximum transmission buffer size uint32_t m_txonBufferSize; ///< transmit on buffer size uint32_t m_retxBufferSize; ///< retransmit buffer size uint32_t m_txedBufferSize; ///< transmit ed buffer size diff --git a/src/lte/model/lte-rlc-um.cc b/src/lte/model/lte-rlc-um.cc index 489c459be..1257638a3 100644 --- a/src/lte/model/lte-rlc-um.cc +++ b/src/lte/model/lte-rlc-um.cc @@ -111,6 +111,7 @@ LteRlcUm::DoTransmitPdcpPdu (Ptr p) NS_LOG_LOGIC ("MaxTxBufferSize = " << m_maxTxBufferSize); NS_LOG_LOGIC ("txBufferSize = " << m_txBufferSize); NS_LOG_LOGIC ("packet size = " << p->GetSize ()); + m_txDropTrace (p); } /** Report Buffer Status */ diff --git a/src/lte/model/lte-rlc.cc b/src/lte/model/lte-rlc.cc index 149904e4b..81dfbcd7d 100644 --- a/src/lte/model/lte-rlc.cc +++ b/src/lte/model/lte-rlc.cc @@ -112,6 +112,11 @@ TypeId LteRlc::GetTypeId (void) "PDU received.", MakeTraceSourceAccessor (&LteRlc::m_rxPdu), "ns3::LteRlc::ReceiveTracedCallback") + .AddTraceSource ("TxDrop", + "Trace source indicating a packet " + "has been dropped before transmission", + MakeTraceSourceAccessor (&LteRlc::m_txDropTrace), + "ns3::Packet::TracedCallback") ; return tid; } diff --git a/src/lte/model/lte-rlc.h b/src/lte/model/lte-rlc.h index 6b633a23a..087f54d58 100644 --- a/src/lte/model/lte-rlc.h +++ b/src/lte/model/lte-rlc.h @@ -176,6 +176,11 @@ protected: * Used to inform of a PDU reception from the MAC SAP user */ TracedCallback m_rxPdu; + /** + * The trace source fired when the RLC drops a packet before + * transmission. + */ + TracedCallback > m_txDropTrace; };