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