A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
recipient-block-ack-agreement.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#ifndef RECIPIENT_BLOCK_ACK_AGREEMENT_H
20#define RECIPIENT_BLOCK_ACK_AGREEMENT_H
21
22#include "block-ack-agreement.h"
23#include "block-ack-window.h"
24
25#include <map>
26
27namespace ns3
28{
29
30class WifiMpdu;
31class MacRxMiddle;
32class CtrlBAckResponseHeader;
33
40{
41 public:
54 bool amsduSupported,
55 uint8_t tid,
56 uint16_t bufferSize,
57 uint16_t timeout,
58 uint16_t startingSeq,
59 bool htSupported);
61
67 void SetMacRxMiddle(const Ptr<MacRxMiddle> rxMiddle);
68
83 void NotifyReceivedBar(uint16_t startingSequenceNumber);
93 void FillBlockAckBitmap(CtrlBAckResponseHeader* blockAckHeader, std::size_t index = 0) const;
98 void Flush();
99
100 private:
109
117 void PassBufferedMpdusWithSeqNumberLessThan(uint16_t newWinStartB);
118
120 typedef std::pair<uint16_t, uint16_t*> Key;
121
123 struct Compare
124 {
132 bool operator()(const Key& a, const Key& b) const;
133 };
134
136 uint16_t m_winStartB;
137 std::size_t m_winSizeB;
138 std::map<Key, Ptr<const WifiMpdu>, Compare>
141};
142
143} // namespace ns3
144
145#endif /* RECIPIENT_BLOCK_ACK_AGREEMENT_H */
Maintains information for a block ack agreement.
Block ack window.
Headers for BlockAck response.
Definition: ctrl-headers.h:203
an EUI-48 address
Definition: mac48-address.h:46
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
Maintains the scoreboard and the receive reordering buffer used by a recipient of a Block Ack agreeme...
Ptr< MacRxMiddle > m_rxMiddle
the MAC RX Middle on this station
void PassBufferedMpdusWithSeqNumberLessThan(uint16_t newWinStartB)
Pass any complete MSDUs or A-MSDUs stored in the buffer with Sequence Number subfield values that are...
BlockAckWindow m_scoreboard
recipient's scoreboard
void NotifyReceivedBar(uint16_t startingSequenceNumber)
Update both the scoreboard and the receive reordering buffer upon reception of a Block Ack Request.
void Flush()
This is called when a Block Ack agreement is destroyed to flush the received packets.
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 ...
void PassBufferedMpdusUntilFirstLost()
Pass MSDUs or A-MSDUs up to the next MAC process if they are stored in the buffer in order of increas...
std::pair< uint16_t, uint16_t * > Key
The key of a buffered MPDU is the pair (MPDU sequence number, pointer to WinStartB)
void NotifyReceivedMpdu(Ptr< const WifiMpdu > mpdu)
Update both the scoreboard and the receive reordering buffer upon reception of the given MPDU.
std::map< Key, Ptr< const WifiMpdu >, Compare > m_bufferedMpdus
buffered MPDUs sorted by Seq Number
uint16_t m_winStartB
starting SN for the reordering buffer
std::size_t m_winSizeB
size of the receive reordering buffer
void SetMacRxMiddle(const Ptr< MacRxMiddle > rxMiddle)
Set the MAC RX Middle to use.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::Time timeout
Comparison functor used to sort the buffered MPDUs.
bool operator()(const Key &a, const Key &b) const
Functional operator for sorting the buffered MPDUs.