A Discrete-Event Network Simulator
API
wifi-acknowledgment.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Stefano Avallone <stavallo@unina.it>
19  */
20 
21 #ifndef WIFI_ACKNOWLEDGMENT_H
22 #define WIFI_ACKNOWLEDGMENT_H
23 
24 #include "ns3/nstime.h"
25 #include "wifi-tx-vector.h"
26 #include "block-ack-type.h"
27 #include "wifi-mac-header.h"
28 #include "ctrl-headers.h"
29 #include <map>
30 #include <memory>
31 
32 
33 namespace ns3 {
34 
35 class Mac48Address;
36 
45 {
50  enum Method
51  {
52  NONE = 0,
61  };
62 
68  virtual ~WifiAcknowledgment ();
69 
74  virtual std::unique_ptr<WifiAcknowledgment> Copy (void) const = 0;
75 
84  WifiMacHeader::QosAckPolicy GetQosAckPolicy (Mac48Address receiver, uint8_t tid) const;
85 
95  void SetQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy);
96 
101  virtual void Print (std::ostream &os) const = 0;
102 
103  const Method method;
105 
106 private:
116  virtual bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid,
117  WifiMacHeader::QosAckPolicy ackPolicy) const = 0;
118 
120  std::map<std::pair<Mac48Address, uint8_t>, WifiMacHeader::QosAckPolicy> m_ackPolicy;
121 };
122 
123 
130 {
131  WifiNoAck ();
132 
133  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
134  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
135  void Print (std::ostream &os) const override;
136 };
137 
138 
145 {
146  WifiNormalAck ();
147 
148  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
149  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
150  void Print (std::ostream &os) const override;
151 
153 };
154 
155 
162 {
163  WifiBlockAck ();
164 
165  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
166  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
167  void Print (std::ostream &os) const override;
168 
171 };
172 
173 
180 {
181  WifiBarBlockAck ();
182 
183  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
184  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
185  void Print (std::ostream &os) const override;
186 
191 };
192 
193 
202 {
204 
205  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
206  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
207  void Print (std::ostream &os) const override;
208 
210  struct AckInfo
211  {
213  };
216  {
219  };
222  {
227  };
228 
230  std::map<Mac48Address, AckInfo> stationsReplyingWithNormalAck;
232  std::map<Mac48Address, BlockAckInfo> stationsReplyingWithBlockAck;
234  std::map<Mac48Address, BlockAckReqInfo> stationsSendBlockAckReqTo;
235 };
236 
237 
246 {
247  WifiDlMuTfMuBar ();
248 
249  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
250  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
251  void Print (std::ostream &os) const override;
252 
255  {
259  };
260 
262  std::map<Mac48Address, BlockAckInfo> stationsReplyingWithBlockAck;
263  std::list<BlockAckReqType> barTypes;
264  uint16_t ulLength;
266 };
267 
268 
277 {
279 
280  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
281  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
282  void Print (std::ostream &os) const override;
283 
286  {
287  uint32_t muBarSize;
291  };
292 
294  std::map<Mac48Address, BlockAckInfo> stationsReplyingWithBlockAck;
295  uint16_t ulLength;
296 };
297 
298 
306 {
308 
309  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
310  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
311  void Print (std::ostream &os) const override;
312 
314  std::map<std::pair<Mac48Address, uint8_t>, std::size_t> stationsReceivingMultiStaBa;
318 };
319 
320 
331 {
333 
334  std::unique_ptr<WifiAcknowledgment> Copy (void) const override;
335  bool CheckQosAckPolicy (Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override;
336  void Print (std::ostream &os) const override;
337 };
338 
339 
347 std::ostream& operator<< (std::ostream& os, const WifiAcknowledgment* acknowledgment);
348 
349 } //namespace ns3
350 
351 #endif /* WIFI_ACKNOWLEDGMENT_H */
std::map< Mac48Address, BlockAckInfo > stationsReplyingWithBlockAck
Set of stations replying with a BlockAck frame.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
WifiAcknowledgment(Method m)
Constructor.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
information related to a BlockAckReq frame sent to a station
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
virtual void Print(std::ostream &os) const =0
Print the object contents.
WifiTxVector blockAckTxVector
TXVECTOR for the BlockAck frame.
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
void Print(std::ostream &os) const override
Print the object contents.
Time acknowledgmentTime
time required by the acknowledgment method
WifiAcknowledgment is an abstract base struct.
WifiDlMuBarBaSequence specifies that a DL MU PPDU is acknowledged through a sequence of BlockAckReq a...
void Print(std::ostream &os) const override
Print the object contents.
uint16_t ulLength
the UL Length field of the MU-BAR Trigger Frames
WifiTxVector tbPpduTxVector
TXVECTOR for a TB PPDU.
void Print(std::ostream &os) const override
Print the object contents.
WifiTxVector ackTxVector
Ack TXVECTOR.
std::map< Mac48Address, BlockAckInfo > stationsReplyingWithBlockAck
Set of stations replying with a BlockAck frame.
std::map< std::pair< Mac48Address, uint8_t >, WifiMacHeader::QosAckPolicy > m_ackPolicy
Qos Ack Policy to set for MPDUs addressed to a given receiver and having a given TID.
virtual bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const =0
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
WifiMacHeader::QosAckPolicy GetQosAckPolicy(Mac48Address receiver, uint8_t tid) const
Get the QoS Ack policy to use for the MPDUs addressed to the given receiver and belonging to the give...
The different BlockAckRequest variants.
WifiTxVector blockAckReqTxVector
BlockAckReq TXVECTOR.
void Print(std::ostream &os) const override
Print the object contents.
BlockAckType baType
BlockAck type.
std::map< std::pair< Mac48Address, uint8_t >, std::size_t > stationsReceivingMultiStaBa
Map (originator, tid) pairs to the their index in baType.
void Print(std::ostream &os) const override
Print the object contents.
const Method method
acknowledgment method
WifiTxVector muBarTxVector
TXVECTOR used to transmit the MU-BAR Trigger Frame.
BlockAckType baType
BlockAck type.
WifiTxVector multiStaBaTxVector
TXVECTOR for the Multi-STA BlockAck.
WifiTxVector blockAckTxVector
TXVECTOR for the BlockAck frame.
information related to a BlockAck frame sent by a station
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:137
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
information related to a BlockAck frame sent by a station
WifiTxVector blockAckTxVector
TXVECTOR for the BlockAck frame.
CtrlBAckRequestHeader barHeader
BlockAckReq header.
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
std::map< Mac48Address, BlockAckInfo > stationsReplyingWithBlockAck
Set of stations replying with a BlockAck frame (no more than one)
Method
Available acknowledgment methods.
std::list< BlockAckReqType > barTypes
BAR types.
WifiTxVector blockAckTxVector
BlockAck TXVECTOR.
WifiNoAck specifies that no acknowledgment is required.
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
WifiUlMuMultiStaBa specifies that a Basic Trigger Frame is being sent to solicit TB PPDUs that will b...
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
void Print(std::ostream &os) const override
Print the object contents.
void Print(std::ostream &os) const override
Print the object contents.
WifiTxVector blockAckTxVector
TXVECTOR for the BlockAck frame.
void Print(std::ostream &os) const override
Print the object contents.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
WifiTxVector blockAckTxVector
BlockAck TXVECTOR.
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.
WifiBarBlockAck specifies that a BlockAckReq is sent to solicit a Block Ack response.
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
an EUI-48 address
Definition: mac48-address.h:43
WifiBlockAck specifies that acknowledgment via Block Ack is required.
uint32_t muBarSize
size in bytes of a MU-BAR Trigger Frame
QosAckPolicy
Ack policy for QoS frames.
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
The different BlockAck variants.
void Print(std::ostream &os) const override
Print the object contents.
WifiTxVector blockAckReqTxVector
TXVECTOR for the BlockAckReq frame.
information related to a BlockAck frame sent by a station
BlockAckType baType
BlockAck type.
void SetQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy)
Set the QoS Ack policy to use for the MPDUs addressed to the given receiver and belonging to the give...
uint16_t ulLength
the UL Length field of the MU-BAR Trigger Frame
WifiTxVector ackTxVector
TXVECTOR for the Ack frame.
BlockAckType baType
BlockAck type.
BlockAckReqType barType
BlockAckReq type.
WifiDlMuAggregateTf specifies that a DL MU PPDU made of PSDUs including each a MU-BAR Trigger Frame i...
virtual std::unique_ptr< WifiAcknowledgment > Copy(void) const =0
Clone this object.
WifiAckAfterTbPpdu is used when a station prepares a TB PPDU to send in response to a Basic Trigger F...
information related to an Ack frame sent by a station
CtrlBAckRequestHeader barHeader
BlockAckReq header.
BlockAckReqType barType
BlockAckReq type.
Headers for BlockAckRequest.
Definition: ctrl-headers.h:48
WifiNormalAck specifies that acknowledgment via Normal Ack is required.
WifiDlMuTfMuBar specifies that a DL MU PPDU is followed after a SIFS duration by a MU-BAR Trigger Fra...
std::map< Mac48Address, BlockAckReqInfo > stationsSendBlockAckReqTo
Set of stations receiving a BlockAckReq frame and replying with a BlockAck frame. ...
std::map< Mac48Address, AckInfo > stationsReplyingWithNormalAck
Set of stations replying with an Ack frame (no more than one)
bool CheckQosAckPolicy(Mac48Address receiver, uint8_t tid, WifiMacHeader::QosAckPolicy ackPolicy) const override
Check whether the given QoS Ack policy can be used for the MPDUs addressed to the given receiver and ...
std::unique_ptr< WifiAcknowledgment > Copy(void) const override
Clone this object.