21 #ifndef HE_FRAME_EXCHANGE_MANAGER_H 22 #define HE_FRAME_EXCHANGE_MANAGER_H 24 #include "ns3/vht-frame-exchange-manager.h" 27 #include <unordered_map> 31 class MultiUserScheduler;
99 const WifiTxVector& txVector,
const std::vector<bool>& perMpduStatus)
override;
132 const std::set<Mac48Address>* staMissedBlockAckFrom,
133 std::size_t nSolicitedStations);
145 const std::set<Mac48Address>* staMissedTbPpduFrom,
146 std::size_t nSolicitedStations);
182 std::map<uint16_t, CtrlBAckRequestHeader> recipients)
const;
void SetMultiUserScheduler(const Ptr< MultiUserScheduler > muScheduler)
Set the Multi-user Scheduler associated with this Frame Exchange Manager.
Ptr< WifiMacQueueItem > m_triggerFrame
Trigger Frame being sent.
Simulation virtual time values and global simulation resolution.
Ptr< WifiMacQueueItem > PrepareMuBar(const WifiTxVector &responseTxVector, std::map< uint16_t, CtrlBAckRequestHeader > recipients) const
Build a MU-BAR Trigger Frame starting from the TXVECTOR used to respond to the MU-BAR (in case of mul...
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPsduMap m_psduMap
the A-MPDU being transmitted
uint16_t GetSupportedBaBufferSize(void) const override
Get the maximum supported buffer size for a Block Ack agreement.
VhtFrameExchangeManager handles the frame exchange sequences for VHT stations.
WifiAcknowledgment is an abstract base struct.
A tag to be attached to a response to a multi-user UL frame, that carries the SNR values with which t...
void SendPsduMapWithProtection(WifiPsduMap psduMap, WifiTxParameters &txParams)
Send a map of PSDUs as a DL MU PPDU.
virtual ~HeFrameExchangeManager()
EventId m_multiStaBaEvent
Sending a Multi-STA BlockAck event.
std::set< Mac48Address > m_staExpectTbPpduFrom
set of stations expected to send a TB PPDU
Time GetTxDuration(uint32_t ppduPayloadSize, Mac48Address receiver, const WifiTxParameters &txParams) const override
Get the updated TX duration of the frame associated with the given TX parameters if the size of the P...
RxSignalInfo structure containing info on the received signal.
virtual void BlockAckAfterTbPpduTimeout(Ptr< WifiPsdu > psdu, const WifiTxVector &txVector)
Take the necessary actions after that a Block Ack is missing after a TB PPDU solicited through a Trig...
static TypeId GetTypeId(void)
Get the type ID.
void SendQosNullFramesInTbPpdu(const CtrlTriggerHeader &trigger, const WifiMacHeader &hdr)
Send QoS Null frames in response to a Basic or BSRP Trigger Frame.
Ptr< ApWifiMac > m_apMac
MAC pointer (null if not an AP)
void CalculateAcknowledgmentTime(WifiAcknowledgment *acknowledgment) const override
Calculate the time required to acknowledge a frame according to the given acknowledgment method...
void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector &txVector)
Forward a map of PSDUs down to the PHY layer.
virtual void TbPpduTimeout(WifiPsduMap *psduMap, const std::set< Mac48Address > *staMissedTbPpduFrom, std::size_t nSolicitedStations)
Take the necessary actions after that some TB PPDUs are missing in response to Trigger Frame...
MuSnrTag m_muSnrTag
Tag to attach to Multi-STA BlockAck frames.
void ReceiveMpdu(Ptr< WifiMacQueueItem > mpdu, RxSignalInfo rxSignalInfo, const WifiTxVector &txVector, bool inAmpdu) override
This method handles the reception of an MPDU (possibly included in an A-MPDU)
void SendPsduMap(void)
Send the current PSDU map as a DL MU PPDU.
virtual void SetTargetRssi(CtrlTriggerHeader &trigger) const
Set the UL Target RSSI subfield of every User Info fields of the given Trigger Frame to the most rece...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool StartFrameExchange(Ptr< QosTxop > edca, Time availableTime, bool initialFrame) override
Start a frame exchange (including protection frames and acknowledgment frames as needed) that fits wi...
bool m_triggerFrameInAmpdu
True if the received A-MPDU contains an MU-BAR.
HeFrameExchangeManager handles the frame exchange sequences for HE stations.
virtual void BlockAcksInTbPpduTimeout(WifiPsduMap *psduMap, const std::set< Mac48Address > *staMissedBlockAckFrom, std::size_t nSolicitedStations)
Take the necessary actions after that some BlockAck frames are missing in response to a DL MU PPDU...
void DoDispose() override
Destructor implementation.
WifiTxParameters m_txParams
the TX parameters for the current PPDU
WifiTxVector GetHeTbTxVector(CtrlTriggerHeader trigger, Mac48Address triggerSender) const
Return a TXVECTOR for the UL frame that the station will send in response to the given Trigger frame...
An identifier for simulation events.
void SendMultiStaBlockAck(const WifiTxParameters &txParams)
Send a Multi-STA Block Ack frame after the reception of some TB PPDUs.
This class stores the TX parameters (TX vector, protection mechanism, acknowledgment mechanism...
Ptr< MultiUserScheduler > m_muScheduler
Multi-user Scheduler (HE APs only)
void ReceiveBasicTrigger(const CtrlTriggerHeader &trigger, const WifiMacHeader &hdr)
Take the necessary actions when receiveing a Basic Trigger Frame.
bool SendMpduFromBaManager(Ptr< QosTxop > edca, Time availableTime, bool initialFrame) override
If the Block Ack Manager associated with the given EDCA has a BlockAckReq frame to transmit (the dura...
Ptr< StaWifiMac > m_staMac
MAC pointer (null if not a STA)
a unique identifier for an interface.
std::unordered_map< uint16_t, Ptr< WifiPsdu > > WifiPsduMap
Map of PSDUs indexed by STA-ID.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
void EndReceiveAmpdu(Ptr< const WifiPsdu > psdu, const RxSignalInfo &rxSignalInfo, const WifiTxVector &txVector, const std::vector< bool > &perMpduStatus) override
This method is called when the reception of an A-MPDU including multiple MPDUs is completed...
static Ptr< WifiPsdu > GetPsduTo(Mac48Address to, const WifiPsduMap &psduMap)
Get the PSDU in the given PSDU map that is addressed to the given MAC address, if any...
void SetWifiMac(const Ptr< RegularWifiMac > mac) override
Set the MAC layer to use.