A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
he-frame-exchange-manager.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Stefano Avallone <stavallo@unina.it>
7 */
8
9#ifndef HE_FRAME_EXCHANGE_MANAGER_H
10#define HE_FRAME_EXCHANGE_MANAGER_H
11
12#include "mu-snr-tag.h"
13
14#include "ns3/vht-frame-exchange-manager.h"
15
16#include <map>
17#include <unordered_map>
18
19namespace ns3
20{
21
22class MultiUserScheduler;
23class CtrlTriggerHeader;
24
25/**
26 * @param psduMap a PSDU map
27 * @return true if the given PSDU map contains a single PSDU including a single MPDU
28 * that carries a Trigger Frame
29 */
30bool IsTrigger(const WifiPsduMap& psduMap);
31
32/**
33 * @param psduMap a PSDU map
34 * @return true if the given PSDU map contains a single PSDU including a single MPDU
35 * that carries a Trigger Frame
36 */
37bool IsTrigger(const WifiConstPsduMap& psduMap);
38
39/**
40 * @ingroup wifi
41 *
42 * HeFrameExchangeManager handles the frame exchange sequences
43 * for HE stations.
44 */
46{
47 public:
48 /**
49 * @brief Get the type ID.
50 * @return the object TypeId
51 */
52 static TypeId GetTypeId();
54 ~HeFrameExchangeManager() override;
55
56 bool StartFrameExchange(Ptr<QosTxop> edca, Time availableTime, bool initialFrame) override;
57 void CalculateAcknowledgmentTime(WifiAcknowledgment* acknowledgment) const override;
58 void CalculateProtectionTime(WifiProtection* protection) const override;
59 std::optional<Mac48Address> FindTxopHolder(const WifiMacHeader& hdr,
60 const WifiTxVector& txVector) override;
61 bool VirtualCsMediumIdle() const override;
62
63 /**
64 * Set the Multi-user Scheduler associated with this Frame Exchange Manager.
65 *
66 * @param muScheduler the Multi-user Scheduler associated with this Frame Exchange Manager
67 */
68 void SetMultiUserScheduler(const Ptr<MultiUserScheduler> muScheduler);
69
70 /**
71 * Get the PSDU in the given PSDU map that is addressed to the given MAC address,
72 * if any, or a null pointer, otherwise.
73 *
74 * @param to the MAC address
75 * @param psduMap the PSDU map
76 * @return the PSDU, if any, or a null pointer, otherwise
77 */
78 static Ptr<WifiPsdu> GetPsduTo(Mac48Address to, const WifiPsduMap& psduMap);
79
80 /**
81 * Set the UL Target RSSI subfield of every User Info fields of the given
82 * Trigger Frame to the most recent RSSI observed from the corresponding
83 * station.
84 *
85 * @param trigger the given Trigger Frame
86 */
87 virtual void SetTargetRssi(CtrlTriggerHeader& trigger) const;
88
89 /**
90 * Get the RSSI of the most recent packet received from the station having
91 * the given address.
92 *
93 * @param address of the remote station
94 * @return the RSSI of the most recent packet received from the remote station
95 */
96 virtual std::optional<dBm_u> GetMostRecentRssi(const Mac48Address& address) const;
97
98 /**
99 * Return whether the received frame is classified as intra-BSS. It is assumed that
100 * this station is already associated with an AP.
101 *
102 * @param psdu the received PSDU
103 * @param txVector TX vector of the received PSDU
104 * @return true if the received frame is classified as intra-BSS, false otherwise
105 * (the received frame is classified as inter-BSS or it cannot be classified
106 * as intra-BSS or inter-BSS)
107 */
108 bool IsIntraBssPpdu(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) const;
109
110 /**
111 * This method is intended to be called a SIFS after the reception of a Trigger Frame
112 * to determine whether the station is allowed to respond.
113 *
114 * @param trigger the Trigger Frame soliciting a response
115 * @return true if CS is not required or the UL MU CS mechanism indicates that the medium
116 * is idle, false otherwise
117 */
118 bool UlMuCsMediumIdle(const CtrlTriggerHeader& trigger) const;
119
120 /**
121 * Get the (link) address of the non-AP stations solicited by the given Trigger Frame.
122 *
123 * @param trigger the given Trigger Frame
124 * @return the (link) address of the non-AP stations solicited by the given Trigger Frame
125 */
126 std::set<Mac48Address> GetTfRecipients(const CtrlTriggerHeader& trigger) const;
127
128 protected:
129 void DoDispose() override;
130 void Reset() override;
131 void RxStartIndication(WifiTxVector txVector, Time psduDuration) override;
133 RxSignalInfo rxSignalInfo,
134 const WifiTxVector& txVector,
135 bool inAmpdu) override;
137 const RxSignalInfo& rxSignalInfo,
138 const WifiTxVector& txVector,
139 const std::vector<bool>& perMpduStatus) override;
140 void PostProcessFrame(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
141 Time GetTxDuration(uint32_t ppduPayloadSize,
142 Mac48Address receiver,
143 const WifiTxParameters& txParams) const override;
144 void NormalAckTimeout(Ptr<WifiMpdu> mpdu, const WifiTxVector& txVector) override;
145 void BlockAckTimeout(Ptr<WifiPsdu> psdu, const WifiTxVector& txVector) override;
146 void CtsTimeout(Ptr<WifiMpdu> rts, const WifiTxVector& txVector) override;
147 void UpdateNav(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
148 void NavResetTimeout() override;
149 void StartProtection(const WifiTxParameters& txParams) override;
150 void ProtectionCompleted() override;
151 void TransmissionSucceeded() override;
152
153 /**
154 * Clear the TXOP holder if the intra-BSS NAV counted down to zero (includes the case
155 * of intra-BSS NAV reset).
156 */
157 void ClearTxopHolderIfNeeded() override;
158
159 /**
160 * Reset the intra-BSS NAV upon expiration of the intra-BSS NAV reset timer.
161 */
162 virtual void IntraBssNavResetTimeout();
163
164 /**
165 * Compute how to set the Duration/ID field of an MU-RTS Trigger Frame to send to protect
166 * a frame transmitted with the given TX vector.
167 *
168 * @param muRtsSize the size of the MU-RTS Trigger Frame in bytes
169 * @param muRtsTxVector the TX vector used to send the MU-RTS Trigger Frame
170 * @param txDuration the TX duration of the data frame
171 * @param response the time taken by the response (acknowledgment) to the data frame
172 * @return the computed Duration/ID value for the MU-RTS Trigger Frame
173 */
174 virtual Time GetMuRtsDurationId(uint32_t muRtsSize,
175 const WifiTxVector& muRtsTxVector,
176 Time txDuration,
177 Time response) const;
178
179 /**
180 * Send an MU-RTS to begin an MU-RTS/CTS frame exchange protecting an MU PPDU.
181 *
182 * @param txParams the TX parameters for the data frame
183 */
184 virtual void SendMuRts(const WifiTxParameters& txParams);
185
186 /**
187 * Called when no CTS frame is received after an MU-RTS.
188 *
189 * @param muRts the MU-RTS that solicited CTS responses
190 * @param txVector the TXVECTOR used to transmit the MU-RTS frame
191 */
192 virtual void CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector);
193
194 /**
195 * Called when no CTS frame is received after an MU-RTS.
196 *
197 * @param psduMap the PSDU map protected by the failed MU-RTS
198 */
199 void DoCtsAfterMuRtsTimeout(const WifiPsduMap& psduMap);
200
201 /**
202 * Send CTS after receiving an MU-RTS.
203 *
204 * @param muRtsHdr the MAC header of the received MU-RTS
205 * @param trigger the MU-RTS Trigger Frame header
206 * @param muRtsSnr the SNR of the MU-RTS in linear scale
207 */
208 virtual void SendCtsAfterMuRts(const WifiMacHeader& muRtsHdr,
209 const CtrlTriggerHeader& trigger,
210 double muRtsSnr);
211
212 /**
213 * @return the mode used to transmit a CTS after an MU-RTS.
214 */
216
217 /**
218 * Get the TXVECTOR that the station having the given station ID has to use to send a
219 * CTS frame after receiving an MU-RTS Trigger Frame from the AP it is associated with.
220 *
221 * @param trigger the MU-RTS Trigger Frame
222 * @param staId the station ID for MU
223 * @return the TXVECTOR to use to send a CTS frame
224 */
225 WifiTxVector GetCtsTxVectorAfterMuRts(const CtrlTriggerHeader& trigger, uint16_t staId) const;
226
227 /**
228 * Send a map of PSDUs as a DL MU PPDU.
229 * Note that both <i>psduMap</i> and <i>txParams</i> are moved to m_psduMap and
230 * m_txParams, respectively, and hence are left in an undefined state.
231 *
232 * @param psduMap the map of PSDUs to send
233 * @param txParams the TX parameters to use to transmit the PSDUs
234 */
236
237 /**
238 * Forward a map of PSDUs down to the PHY layer.
239 *
240 * @param psduMap the map of PSDUs to transmit
241 * @param txVector the TXVECTOR used to transmit the MU PPDU
242 */
243 virtual void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector& txVector);
244
245 /**
246 * Take the necessary actions after that some BlockAck frames are missing
247 * in response to a DL MU PPDU. This method must not be called if all the
248 * expected BlockAck frames were received.
249 *
250 * @param psduMap a pointer to PSDU map transmitted in a DL MU PPDU
251 * @param nSolicitedStations the number of stations solicited to send a TB PPDU
252 */
253 virtual void BlockAcksInTbPpduTimeout(WifiPsduMap* psduMap, std::size_t nSolicitedStations);
254
255 /**
256 * Take the necessary actions after that some TB PPDUs are missing in
257 * response to Trigger Frame. This method must not be called if all the
258 * expected TB PPDUs were received.
259 *
260 * @param psduMap a pointer to PSDU map transmitted in a DL MU PPDU
261 * @param nSolicitedStations the number of stations solicited to send a TB PPDU
262 */
263 virtual void TbPpduTimeout(WifiPsduMap* psduMap, std::size_t nSolicitedStations);
264
265 /**
266 * Take the necessary actions after that some TB PPDUs are missing in
267 * response to Trigger Frame. This method must not be called if all the
268 * expected TB PPDUs were received.
269 *
270 * @param psduMap a pointer to PSDU map transmitted in a DL MU PPDU
271 * @param nSolicitedStations the number of stations solicited to send a TB PPDU
272 * @param updateFailedCw whether to update CW in case the transmission failed
273 */
274 void DoTbPpduTimeout(WifiPsduMap* psduMap, std::size_t nSolicitedStations, bool updateFailedCw);
275
276 /**
277 * Take the necessary actions after that a Block Ack is missing after a
278 * TB PPDU solicited through a Trigger Frame.
279 *
280 * @param psdu the PSDU in the TB PPDU
281 * @param txVector the TXVECTOR used to transmit the TB PPDU
282 */
283 virtual void BlockAckAfterTbPpduTimeout(Ptr<WifiPsdu> psdu, const WifiTxVector& txVector);
284
285 /**
286 * Get the TRIGVECTOR that the MAC has to pass to the PHY when transmitting
287 * the given Trigger Frame.
288 *
289 * @param trigger the given Trigger Frame
290 * @return the TRIGVECTOR
291 */
292 WifiTxVector GetTrigVector(const CtrlTriggerHeader& trigger) const;
293
294 /**
295 * Return a TXVECTOR for the UL frame that the station will send in response to
296 * the given Trigger frame, configured with the BSS color and transmit power
297 * level to use for the consequent HE TB PPDU.
298 * Note that this method should only be called by non-AP stations only.
299 *
300 * @param trigger the received Trigger frame
301 * @param triggerSender the MAC address of the AP sending the Trigger frame
302 * @return TXVECTOR for the HE TB PPDU frame
303 */
304 WifiTxVector GetHeTbTxVector(CtrlTriggerHeader trigger, Mac48Address triggerSender) const;
305
306 /**
307 * Build a MU-BAR Trigger Frame starting from the TXVECTOR used to respond to
308 * the MU-BAR (in case of multiple responders, their TXVECTORs need to be
309 * "merged" into a single TXVECTOR) and from the BlockAckReq headers for
310 * every recipient.
311 * Note that the number of recipients must match the number of users addressed
312 * by the given TXVECTOR.
313 *
314 * @param responseTxVector the given TXVECTOR
315 * @param recipients the list of BlockAckReq headers indexed by the station's AID
316 * @return the MPDU containing the built MU-BAR
317 */
318 Ptr<WifiMpdu> PrepareMuBar(const WifiTxVector& responseTxVector,
319 std::map<uint16_t, CtrlBAckRequestHeader> recipients) const;
320
321 /**
322 * Send a Multi-STA Block Ack frame after the reception of some TB PPDUs.
323 *
324 * @param txParams the TX parameters for the Trigger Frame that solicited the TB PPDUs
325 * @param durationId the Duration/ID field of the HE TB PPDU that elicited the Multi-STA
326 * Block Ack response
327 */
328 void SendMultiStaBlockAck(const WifiTxParameters& txParams, Time durationId);
329
330 /**
331 * Send QoS Null frames in response to a Basic or BSRP Trigger Frame. The number
332 * of QoS Null frames that are actually aggregated depends on the available time
333 * as indicated by the Trigger Frame and is at most 8 (one QoS Null frame per TID).
334 *
335 * @param trigger the Basic or BSRP Trigger Frame content
336 * @param hdr the MAC header of the Basic or BSRP Trigger Frame
337 */
338 virtual void SendQosNullFramesInTbPpdu(const CtrlTriggerHeader& trigger,
339 const WifiMacHeader& hdr);
340
341 /**
342 * Perform the actions required when receiving QoS Null frame(s) from the given sender after
343 * a BSRP Trigger Frame.
344 *
345 * @param sender the MAC address of the given sender
346 */
347 virtual void ReceivedQosNullAfterBsrpTf(Mac48Address sender);
348
349 WifiTxVector m_trigVector; //!< the TRIGVECTOR
350 Time m_intraBssNavEnd; //!< intra-BSS NAV expiration time
351 EventId m_intraBssNavResetEvent; //!< the event to reset the intra-BSS NAV after an RTS
352
353 private:
354 /**
355 * Send the current PSDU map as a DL MU PPDU.
356 */
357 void SendPsduMap();
358
359 /**
360 * Take the necessary actions when receiving a Basic Trigger Frame.
361 *
362 * @param trigger the Basic Trigger Frame content
363 * @param hdr the MAC header of the Basic Trigger Frame
364 */
365 void ReceiveBasicTrigger(const CtrlTriggerHeader& trigger, const WifiMacHeader& hdr);
366
367 /**
368 * Respond to a MU-BAR Trigger Frame (if permitted by UL MU CS mechanism).
369 *
370 * @param trigger the Basic Trigger Frame content
371 * @param tid the TID requested for us in the MU-BAR Trigger Frame
372 * @param durationId the Duration/ID field of the MPDU carrying the Trigger Frame
373 * @param snr the receive SNR
374 */
375 void ReceiveMuBarTrigger(const CtrlTriggerHeader& trigger,
376 uint8_t tid,
377 Time durationId,
378 double snr);
379
380 WifiPsduMap m_psduMap; //!< the A-MPDU being transmitted
381 WifiTxParameters m_txParams; //!< the TX parameters for the current PPDU
382 Ptr<MultiUserScheduler> m_muScheduler; //!< Multi-user Scheduler (HE APs only)
383 Ptr<WifiMpdu> m_triggerFrame; //!< Trigger Frame being sent
384 EventId m_multiStaBaEvent; //!< Sending a Multi-STA BlockAck event
385 MuSnrTag m_muSnrTag; //!< Tag to attach to Multi-STA BlockAck frames
386 bool m_triggerFrameInAmpdu; //!< True if the received A-MPDU contains an MU-BAR
387 bool m_continueTxopAfterBsrpTf; //!< whether to continue a TXOP a SIFS after the reception of
388 //!< responses to a BSRP TF when TXOP limit is zero
389};
390
391} // namespace ns3
392
393#endif /* HE_FRAME_EXCHANGE_MANAGER_H */
Headers for Trigger frames.
An identifier for simulation events.
Definition event-id.h:45
HeFrameExchangeManager handles the frame exchange sequences for HE stations.
WifiTxVector GetTrigVector(const CtrlTriggerHeader &trigger) const
Get the TRIGVECTOR that the MAC has to pass to the PHY when transmitting the given Trigger Frame.
virtual Time GetMuRtsDurationId(uint32_t muRtsSize, const WifiTxVector &muRtsTxVector, Time txDuration, Time response) const
Compute how to set the Duration/ID field of an MU-RTS Trigger Frame to send to protect a frame transm...
void ReceiveMuBarTrigger(const CtrlTriggerHeader &trigger, uint8_t tid, Time durationId, double snr)
Respond to a MU-BAR Trigger Frame (if permitted by UL MU CS mechanism).
virtual void SendQosNullFramesInTbPpdu(const CtrlTriggerHeader &trigger, const WifiMacHeader &hdr)
Send QoS Null frames in response to a Basic or BSRP Trigger Frame.
void DoDispose() override
Destructor implementation.
void Reset() override
Reset this frame exchange manager.
Ptr< WifiMpdu > 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...
virtual void IntraBssNavResetTimeout()
Reset the intra-BSS NAV upon expiration of the intra-BSS NAV reset timer.
virtual void SendMuRts(const WifiTxParameters &txParams)
Send an MU-RTS to begin an MU-RTS/CTS frame exchange protecting an MU PPDU.
virtual void ReceivedQosNullAfterBsrpTf(Mac48Address sender)
Perform the actions required when receiving QoS Null frame(s) from the given sender after a BSRP Trig...
WifiTxParameters m_txParams
the TX parameters for the current 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...
void BlockAckTimeout(Ptr< WifiPsdu > psdu, const WifiTxVector &txVector) override
Called when the BlockAck timeout expires.
void DoCtsAfterMuRtsTimeout(const WifiPsduMap &psduMap)
Called when no CTS frame is received after an MU-RTS.
void RxStartIndication(WifiTxVector txVector, Time psduDuration) override
void CalculateAcknowledgmentTime(WifiAcknowledgment *acknowledgment) const override
Calculate the time required to acknowledge a frame according to the given acknowledgment method.
Ptr< WifiMpdu > m_triggerFrame
Trigger Frame being sent.
std::optional< Mac48Address > FindTxopHolder(const WifiMacHeader &hdr, const WifiTxVector &txVector) override
Determine the holder of the TXOP, if possible, based on the received frame.
void SetMultiUserScheduler(const Ptr< MultiUserScheduler > muScheduler)
Set the Multi-user Scheduler associated with this Frame Exchange Manager.
WifiTxVector GetCtsTxVectorAfterMuRts(const CtrlTriggerHeader &trigger, uint16_t staId) const
Get the TXVECTOR that the station having the given station ID has to use to send a CTS frame after re...
bool m_triggerFrameInAmpdu
True if the received A-MPDU contains an MU-BAR.
bool m_continueTxopAfterBsrpTf
whether to continue a TXOP a SIFS after the reception of responses to a BSRP TF when TXOP limit is ze...
Ptr< MultiUserScheduler > m_muScheduler
Multi-user Scheduler (HE APs only)
virtual void CtsAfterMuRtsTimeout(Ptr< WifiMpdu > muRts, const WifiTxVector &txVector)
Called when no CTS frame is received after an MU-RTS.
void NavResetTimeout() override
Reset the NAV upon expiration of the NAV reset timer.
WifiTxVector m_trigVector
the TRIGVECTOR
void ProtectionCompleted() override
Transmit prepared frame immediately, if no protection was used, or in a SIFS, if protection was compl...
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...
virtual void SendCtsAfterMuRts(const WifiMacHeader &muRtsHdr, const CtrlTriggerHeader &trigger, double muRtsSnr)
Send CTS after receiving an MU-RTS.
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 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.
void CalculateProtectionTime(WifiProtection *protection) const override
Calculate the time required to protect a frame according to the given protection method.
void CtsTimeout(Ptr< WifiMpdu > rts, const WifiTxVector &txVector) override
Called when the CTS timeout expires.
virtual void BlockAcksInTbPpduTimeout(WifiPsduMap *psduMap, std::size_t nSolicitedStations)
Take the necessary actions after that some BlockAck frames are missing in response to a DL MU PPDU.
MuSnrTag m_muSnrTag
Tag to attach to Multi-STA BlockAck frames.
void ReceiveMpdu(Ptr< const WifiMpdu > mpdu, RxSignalInfo rxSignalInfo, const WifiTxVector &txVector, bool inAmpdu) override
This method handles the reception of an MPDU (possibly included in an A-MPDU)
EventId m_intraBssNavResetEvent
the event to reset the intra-BSS NAV after an RTS
virtual void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector &txVector)
Forward a map of PSDUs down to the PHY layer.
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...
void ClearTxopHolderIfNeeded() override
Clear the TXOP holder if the intra-BSS NAV counted down to zero (includes the case of intra-BSS NAV r...
void NormalAckTimeout(Ptr< WifiMpdu > mpdu, const WifiTxVector &txVector) override
Called when the Ack timeout expires.
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...
virtual void TbPpduTimeout(WifiPsduMap *psduMap, std::size_t nSolicitedStations)
Take the necessary actions after that some TB PPDUs are missing in response to Trigger Frame.
void SendPsduMap()
Send the current PSDU map as a DL MU PPDU.
void PostProcessFrame(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) override
Perform actions that are possibly needed after receiving any frame, independently of whether the fram...
WifiPsduMap m_psduMap
the A-MPDU being transmitted
void SendMultiStaBlockAck(const WifiTxParameters &txParams, Time durationId)
Send a Multi-STA Block Ack frame after the reception of some TB PPDUs.
static TypeId GetTypeId()
Get the type ID.
Time m_intraBssNavEnd
intra-BSS NAV expiration time
bool UlMuCsMediumIdle(const CtrlTriggerHeader &trigger) const
This method is intended to be called a SIFS after the reception of a Trigger Frame to determine wheth...
std::set< Mac48Address > GetTfRecipients(const CtrlTriggerHeader &trigger) const
Get the (link) address of the non-AP stations solicited by the given Trigger Frame.
void UpdateNav(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) override
Update the NAV, if needed, based on the Duration/ID of the given psdu.
void DoTbPpduTimeout(WifiPsduMap *psduMap, std::size_t nSolicitedStations, bool updateFailedCw)
Take the necessary actions after that some TB PPDUs are missing in response to Trigger Frame.
virtual std::optional< dBm_u > GetMostRecentRssi(const Mac48Address &address) const
Get the RSSI of the most recent packet received from the station having the given address.
EventId m_multiStaBaEvent
Sending a Multi-STA BlockAck event.
bool IsIntraBssPpdu(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) const
Return whether the received frame is classified as intra-BSS.
void SendPsduMapWithProtection(WifiPsduMap psduMap, WifiTxParameters &txParams)
Send a map of PSDUs as a DL MU PPDU.
void ReceiveBasicTrigger(const CtrlTriggerHeader &trigger, const WifiMacHeader &hdr)
Take the necessary actions when receiving a Basic Trigger Frame.
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,...
void StartProtection(const WifiTxParameters &txParams) override
Start the protection mechanism indicated by the given TX parameters.
void TransmissionSucceeded() override
Take necessary actions upon a transmission success.
an EUI-48 address
A tag to be attached to a response to a multi-user UL frame, that carries the SNR values with which t...
Definition mu-snr-tag.h:26
Smart pointer class similar to boost::intrusive_ptr.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
a unique identifier for an interface.
Definition type-id.h:49
VhtFrameExchangeManager handles the frame exchange sequences for VHT stations.
Implements the IEEE 802.11 MAC header.
represent a single transmission mode
Definition wifi-mode.h:40
This class stores the TX parameters (TX vector, protection mechanism, acknowledgment mechanism,...
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool IsTrigger(const WifiPsduMap &psduMap)
std::unordered_map< uint16_t, Ptr< WifiPsdu > > WifiPsduMap
Map of PSDUs indexed by STA-ID.
Definition wifi-mac.h:78
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Definition wifi-ppdu.h:38
RxSignalInfo structure containing info on the received signal.
Definition wifi-types.h:72
WifiAcknowledgment is an abstract base struct.
WifiProtection is an abstract base struct.