A Discrete-Event Network Simulator
API
recipient-block-ack-agreement.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 #ifndef RECIPIENT_BLOCK_ACK_AGREEMENT_H
21 #define RECIPIENT_BLOCK_ACK_AGREEMENT_H
22 
23 #include "block-ack-agreement.h"
24 #include "block-ack-window.h"
25 #include <map>
26 
27 
28 namespace ns3 {
29 
30 class WifiMacQueueItem;
31 class MacRxMiddle;
32 class CtrlBAckResponseHeader;
33 
40 {
41 public:
53  RecipientBlockAckAgreement (Mac48Address originator, bool amsduSupported, uint8_t tid,
54  uint16_t bufferSize, uint16_t timeout, uint16_t startingSeq,
55  bool htSupported);
57 
63  void SetMacRxMiddle (const Ptr<MacRxMiddle> rxMiddle);
64 
79  void NotifyReceivedBar (uint16_t startingSequenceNumber);
89  void FillBlockAckBitmap (CtrlBAckResponseHeader *blockAckHeader, std::size_t index = 0) const;
94  void Flush (void);
95 
96 private:
105 
113  void PassBufferedMpdusWithSeqNumberLessThan (uint16_t newWinStartB);
114 
116  typedef std::pair<uint16_t, uint16_t*> Key;
117 
119  struct Compare
120  {
128  bool operator() (const Key& a, const Key& b) const;
129  };
130 
132  uint16_t m_winStartB;
133  std::size_t m_winSizeB;
134  std::map<Key, Ptr<WifiMacQueueItem>, Compare> m_bufferedMpdus;
136 };
137 
138 } //namespace ns3
139 
140 #endif /* RECIPIENT_BLOCK_ACK_AGREEMENT_H */
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
Maintains the scoreboard and the receive reordering buffer used by a recipient of a Block Ack agreeme...
BlockAckWindow m_scoreboard
recipient&#39;s scoreboard
ns3::Time timeout
void SetMacRxMiddle(const Ptr< MacRxMiddle > rxMiddle)
Set the MAC RX Middle to use.
void PassBufferedMpdusUntilFirstLost(void)
Pass MSDUs or A-MSDUs up to the next MAC process if they are stored in the buffer in order of increas...
Block ack window.
Comparison functor used to sort the buffered MPDUs.
Headers for BlockAck response.
Definition: ctrl-headers.h:201
std::map< Key, Ptr< WifiMacQueueItem >, Compare > m_bufferedMpdus
buffered MPDUs sorted by Seq Number
uint16_t m_winStartB
starting SN for the reordering buffer
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::size_t m_winSizeB
size of the receive reordering buffer
void NotifyReceivedBar(uint16_t startingSequenceNumber)
Update both the scoreboard and the receive reordering buffer upon reception of a Block Ack Request...
an EUI-48 address
Definition: mac48-address.h:43
void NotifyReceivedMpdu(Ptr< WifiMacQueueItem > mpdu)
Update both the scoreboard and the receive reordering buffer upon reception of the given MPDU...
void PassBufferedMpdusWithSeqNumberLessThan(uint16_t newWinStartB)
Pass any complete MSDUs or A-MSDUs stored in the buffer with Sequence Number subfield values that are...
void FillBlockAckBitmap(CtrlBAckResponseHeader *blockAckHeader, std::size_t index=0) const
Set the Starting Sequence Number subfield of the Block Ack Starting Sequence Control subfield of the ...
Maintains information for a block ack agreement.
RecipientBlockAckAgreement(Mac48Address originator, bool amsduSupported, uint8_t tid, uint16_t bufferSize, uint16_t timeout, uint16_t startingSeq, bool htSupported)
Constructor.
Ptr< MacRxMiddle > m_rxMiddle
the MAC RX Middle on this station
bool operator()(const Key &a, const Key &b) const
Functional operator for sorting the buffered MPDUs.
void Flush(void)
This is called when a Block Ack agreement is destroyed to flush the received packets.
std::pair< uint16_t, uint16_t * > Key
The key of a buffered MPDU is the pair (MPDU sequence number, pointer to WinStartB) ...