wifi: Trace dropped QoS old packets
This commit is contained in:
committed by
Stefano Avallone
parent
d9c1111ef1
commit
382a2aa3f6
@@ -401,6 +401,10 @@ BlockAckManager::HandleInFlightMpdu (PacketQueueI mpduIt, MpduStatus status,
|
||||
if (it->second.first.GetDistance (hdr.GetSequenceNumber ()) >= SEQNO_SPACE_HALF_SIZE)
|
||||
{
|
||||
NS_LOG_DEBUG ("Old packet. Remove from the EDCA queue, too");
|
||||
if (!m_droppedOldMpduCallback.IsNull ())
|
||||
{
|
||||
m_droppedOldMpduCallback (*queueIt);
|
||||
}
|
||||
queue->Remove (queueIt);
|
||||
return it->second.second.erase (mpduIt);
|
||||
}
|
||||
@@ -607,6 +611,10 @@ BlockAckManager::NotifyDiscardedMpdu (Ptr<const WifiMacQueueItem> mpdu)
|
||||
if (it->second.first.GetDistance ((*mpduIt)->GetHeader ().GetSequenceNumber ()) >= SEQNO_SPACE_HALF_SIZE)
|
||||
{
|
||||
m_queue->DequeueIfQueued (*mpduIt);
|
||||
if (!m_droppedOldMpduCallback.IsNull ())
|
||||
{
|
||||
m_droppedOldMpduCallback (*mpduIt);
|
||||
}
|
||||
mpduIt = it->second.second.erase (mpduIt);
|
||||
}
|
||||
else
|
||||
@@ -843,6 +851,12 @@ BlockAckManager::SetTxFailedCallback (TxFailed callback)
|
||||
m_txFailedCallback = callback;
|
||||
}
|
||||
|
||||
void
|
||||
BlockAckManager::SetDroppedOldMpduCallback (DroppedOldMpdu callback)
|
||||
{
|
||||
m_droppedOldMpduCallback = callback;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
BlockAckManager::GetRecipientBufferSize (Mac48Address recipient, uint8_t tid) const
|
||||
{
|
||||
|
||||
@@ -356,6 +356,11 @@ public:
|
||||
* typedef for a callback to invoke when an MPDU is negatively ack'ed.
|
||||
*/
|
||||
typedef Callback <void, Ptr<const WifiMacQueueItem>> TxFailed;
|
||||
/**
|
||||
* typedef for a callback to invoke when an MPDU is dropped.
|
||||
*/
|
||||
typedef Callback <void, Ptr<const WifiMacQueueItem>> DroppedOldMpdu;
|
||||
|
||||
/**
|
||||
* \param callback the callback to invoke when a
|
||||
* packet transmission was completed successfully.
|
||||
@@ -366,6 +371,10 @@ public:
|
||||
* packet transmission was completed unsuccessfully.
|
||||
*/
|
||||
void SetTxFailedCallback (TxFailed callback);
|
||||
/**
|
||||
* \param callback the callback to invoke when an old MPDU is dropped
|
||||
*/
|
||||
void SetDroppedOldMpduCallback (DroppedOldMpdu callback);
|
||||
|
||||
/**
|
||||
* TracedCallback signature for state changes.
|
||||
@@ -483,6 +492,7 @@ private:
|
||||
Callback<void, Mac48Address, uint8_t> m_unblockPackets; ///< unblock packets callback
|
||||
TxOk m_txOkCallback; ///< transmit OK callback
|
||||
TxFailed m_txFailedCallback; ///< transmit failed callback
|
||||
DroppedOldMpdu m_droppedOldMpduCallback; ///< the dropped MPDU callback
|
||||
|
||||
/**
|
||||
* The trace source fired when a state transition occurred.
|
||||
|
||||
@@ -149,6 +149,7 @@ QosTxop::SetDroppedMpduCallback (DroppedMpdu callback)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << &callback);
|
||||
Txop::SetDroppedMpduCallback (callback);
|
||||
m_baManager->SetDroppedOldMpduCallback (callback.Bind (WIFI_MAC_DROP_QOS_OLD_PACKET));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -390,6 +391,10 @@ QosTxop::PeekNextMpdu (WifiMacQueueItem::QueueIteratorPair queueIt, uint8_t tid,
|
||||
&& IsQosOldPacket (*queueIt.it))
|
||||
{
|
||||
NS_LOG_DEBUG ("Removing an old packet from EDCA queue: " << **queueIt.it);
|
||||
if (!m_droppedMpduCallback.IsNull ())
|
||||
{
|
||||
m_droppedMpduCallback (WIFI_MAC_DROP_QOS_OLD_PACKET, *queueIt.it);
|
||||
}
|
||||
queueIt.it = m_queue->Remove (queueIt.it);
|
||||
queueIt.it = peek ();
|
||||
}
|
||||
|
||||
@@ -55,7 +55,8 @@ enum WifiMacDropReason : uint8_t
|
||||
{
|
||||
WIFI_MAC_DROP_FAILED_ENQUEUE = 0,
|
||||
WIFI_MAC_DROP_EXPIRED_LIFETIME,
|
||||
WIFI_MAC_DROP_REACHED_RETRY_LIMIT
|
||||
WIFI_MAC_DROP_REACHED_RETRY_LIMIT,
|
||||
WIFI_MAC_DROP_QOS_OLD_PACKET
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user