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:
committed by
Tom Henderson
parent
490a1b83e4
commit
9b3e97434b
@@ -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 ();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user