From 74ef19119e82f32e28adc6e612282ff01e532db1 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Mon, 5 Sep 2022 20:34:52 +0200 Subject: [PATCH] wifi: Add a tag to allow only WifiMacQueue to access an item's iterator --- src/wifi/model/wifi-mac-queue-item.cc | 12 +++++++++++ src/wifi/model/wifi-mac-queue-item.h | 30 +++++++++++++++++++++++++-- src/wifi/model/wifi-mac-queue.cc | 2 +- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/wifi/model/wifi-mac-queue-item.cc b/src/wifi/model/wifi-mac-queue-item.cc index 67545954f..e50fd1356 100644 --- a/src/wifi/model/wifi-mac-queue-item.cc +++ b/src/wifi/model/wifi-mac-queue-item.cc @@ -207,6 +207,18 @@ WifiMacQueueItem::IsQueued (void) const return m_queueAc != AC_UNDEF; } +void +WifiMacQueueItem::SetQueueIt (std::optional queueIt, WmqIteratorTag tag) +{ + // empty for now +} + +WifiMacQueueItem::Iterator +WifiMacQueueItem::GetQueueIt (WmqIteratorTag tag) const +{ + return m_queueIt; +} + AcIndex WifiMacQueueItem::GetQueueAc (void) const { diff --git a/src/wifi/model/wifi-mac-queue-item.h b/src/wifi/model/wifi-mac-queue-item.h index acdd3c001..2239d349e 100644 --- a/src/wifi/model/wifi-mac-queue-item.h +++ b/src/wifi/model/wifi-mac-queue-item.h @@ -30,11 +30,24 @@ #include "amsdu-subframe-header.h" #include "qos-utils.h" #include +#include namespace ns3 { class QosBlockedDestinations; +/** + * \ingroup wifi + * + * Tag used to allow (only) WifiMacQueue to access the queue iterator stored + * by a WifiMacQueueItem. + */ +class WmqIteratorTag +{ + friend class WifiMacQueue; + WmqIteratorTag () = default; +}; + /** * \ingroup wifi * @@ -141,7 +154,20 @@ public: DeaggregatedMsdusCI end (void); /// Const iterator typedef - typedef std::list>::const_iterator ConstIterator; + typedef std::list>::iterator Iterator; + + /** + * Set the queue iterator stored by this object. + * + * \param queueIt the queue iterator for this object + * \param tag a wifi MAC queue iterator tag (allows only WifiMacQueue to call this method) + */ + void SetQueueIt (std::optional queueIt, WmqIteratorTag tag); + /** + * \param tag a wifi MAC queue iterator tag (allows only WifiMacQueue to call this method) + * \return the queue iterator stored by this object + */ + Iterator GetQueueIt (WmqIteratorTag tag) const; /** * Return true if this item is stored in some queue, false otherwise. @@ -201,7 +227,7 @@ private: WifiMacHeader m_header; //!< Wifi MAC header associated with the packet Time m_tstamp; //!< timestamp when the packet arrived at the queue DeaggregatedMsdus m_msduList; //!< The list of aggregated MSDUs included in this MPDU - ConstIterator m_queueIt; //!< Queue iterator pointing to this MPDU, if queued + Iterator m_queueIt; //!< Queue iterator pointing to this MPDU, if queued AcIndex m_queueAc; //!< AC associated with the queue this MPDU is stored into bool m_inFlight; //!< whether the MPDU is in flight }; diff --git a/src/wifi/model/wifi-mac-queue.cc b/src/wifi/model/wifi-mac-queue.cc index b2ecde7e9..022059f6f 100644 --- a/src/wifi/model/wifi-mac-queue.cc +++ b/src/wifi/model/wifi-mac-queue.cc @@ -93,7 +93,7 @@ bool WifiMacQueue::TtlExceeded (Ptr item, const Time& now) { NS_ASSERT (item && item->IsQueued ()); - auto it = item->m_queueIt; + ConstIterator it = item->m_queueIt; return TtlExceeded (it, now); }