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)
This commit is contained in:
Shiva Gantha
2021-05-24 01:22:23 +05:30
committed by Tom Henderson
parent 490a1b83e4
commit 9b3e97434b
5 changed files with 39 additions and 11 deletions

View File

@@ -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<uint32_t> ())
;
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<Packet> 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 ();

View File

@@ -143,6 +143,7 @@ private:
///< for retransmission
std::vector <RetxPdu> 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

View File

@@ -111,6 +111,7 @@ LteRlcUm::DoTransmitPdcpPdu (Ptr<Packet> 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 */

View File

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

View File

@@ -176,6 +176,11 @@ protected:
* Used to inform of a PDU reception from the MAC SAP user
*/
TracedCallback<uint16_t, uint8_t, uint32_t, uint64_t> m_rxPdu;
/**
* The trace source fired when the RLC drops a packet before
* transmission.
*/
TracedCallback<Ptr<const Packet> > m_txDropTrace;
};