From 382a2aa3f63ef07b7a6dfac636a344977ebfc1e6 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Wed, 1 Sep 2021 13:49:17 +0200 Subject: [PATCH] wifi: Trace dropped QoS old packets --- src/wifi/model/block-ack-manager.cc | 14 ++++++++++++++ src/wifi/model/block-ack-manager.h | 10 ++++++++++ src/wifi/model/qos-txop.cc | 5 +++++ src/wifi/model/wifi-mac.h | 3 ++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/wifi/model/block-ack-manager.cc b/src/wifi/model/block-ack-manager.cc index aa0673f6c..7f38664ac 100644 --- a/src/wifi/model/block-ack-manager.cc +++ b/src/wifi/model/block-ack-manager.cc @@ -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 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 { diff --git a/src/wifi/model/block-ack-manager.h b/src/wifi/model/block-ack-manager.h index 2a377c341..421c0ab91 100644 --- a/src/wifi/model/block-ack-manager.h +++ b/src/wifi/model/block-ack-manager.h @@ -356,6 +356,11 @@ public: * typedef for a callback to invoke when an MPDU is negatively ack'ed. */ typedef Callback > TxFailed; + /** + * typedef for a callback to invoke when an MPDU is dropped. + */ + typedef Callback > 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 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. diff --git a/src/wifi/model/qos-txop.cc b/src/wifi/model/qos-txop.cc index 09eb6be23..34bc7598f 100644 --- a/src/wifi/model/qos-txop.cc +++ b/src/wifi/model/qos-txop.cc @@ -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 (); } diff --git a/src/wifi/model/wifi-mac.h b/src/wifi/model/wifi-mac.h index 9fb6d389c..9f914a50d 100644 --- a/src/wifi/model/wifi-mac.h +++ b/src/wifi/model/wifi-mac.h @@ -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 }; /**