A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
eht-frame-exchange-manager.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 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 EHT_FRAME_EXCHANGE_MANAGER_H
21#define EHT_FRAME_EXCHANGE_MANAGER_H
22
23#include "ns3/he-frame-exchange-manager.h"
24#include "ns3/mgt-headers.h"
25
26#include <unordered_map>
27
28namespace ns3
29{
30
31class MgtEmlOmn;
32
33/**
34 * \ingroup wifi
35 *
36 * EhtFrameExchangeManager handles the frame exchange sequences
37 * for EHT stations.
38 */
40{
41 public:
42 /**
43 * \brief Get the type ID.
44 * \return the object TypeId
45 */
46 static TypeId GetTypeId();
48 ~EhtFrameExchangeManager() override;
49
50 void SetLinkId(uint8_t linkId) override;
52 bool StartTransmission(Ptr<Txop> edca, uint16_t allowedWidth) override;
53
54 /**
55 * Send an EML Operating Mode Notification frame to the given station.
56 *
57 * \param dest the MAC address of the receiver
58 * \param frame the EML Operating Mode Notification frame to send
59 */
60 void SendEmlOmn(const Mac48Address& dest, const MgtEmlOmn& frame);
61
62 /**
63 * Get the RSSI (in dBm) of the most recent packet received from the station having
64 * the given address. If there is no such information for the given station and the
65 * station is affiliated with an MLD, return the RSSI (in dBm) of the most recent
66 * packet received from another station of the same MLD.
67 *
68 * \param address of the remote station
69 * \return the RSSI (in dBm) of the most recent packet received from the remote station
70 */
71 std::optional<double> GetMostRecentRssi(const Mac48Address& address) const override;
72
73 /**
74 * \param psdu the given PSDU
75 * \param aid the AID of an EMLSR client
76 * \param address the link MAC address of an EMLSR client
77 * \return whether the EMLSR client having the given AID and MAC address shall switch back to
78 * the listening operation when receiving the given PSDU
79 */
81 uint16_t aid,
82 const Mac48Address& address) const;
83
84 /**
85 * Notify that the given PHY will switch channel to operate on another EMLSR link
86 * after the given delay.
87 *
88 * \param phy the given PHY
89 * \param linkId the ID of the EMLSR link on which the given PHY is operating
90 * \param delay the delay after which the channel switch will be completed
91 */
92 void NotifySwitchingEmlsrLink(Ptr<WifiPhy> phy, uint8_t linkId, Time delay);
93
94 /**
95 * \return whether this is an EMLSR link that has been blocked because another EMLSR link
96 * is being used
97 */
98 bool UsingOtherEmlsrLink() const;
99
100 protected:
101 void DoDispose() override;
102 void RxStartIndication(WifiTxVector txVector, Time psduDuration) override;
103 void ForwardPsduDown(Ptr<const WifiPsdu> psdu, WifiTxVector& txVector) override;
104 void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector& txVector) override;
105 void SendMuRts(const WifiTxParameters& txParams) override;
106 void CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector) override;
107 void TransmissionSucceeded() override;
108 void TransmissionFailed() override;
109 void NotifyChannelReleased(Ptr<Txop> txop) override;
110 void PreProcessFrame(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
111 void PostProcessFrame(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector) override;
113 RxSignalInfo rxSignalInfo,
114 const WifiTxVector& txVector,
115 bool inAmpdu) override;
116 void NavResetTimeout() override;
117 void IntraBssNavResetTimeout() override;
118
119 /**
120 * This method is intended to be called when an AP MLD detects that an EMLSR client previously
121 * involved in the current TXOP will start waiting for the transition delay interval (to switch
122 * back to listening operation) after the given delay.
123 * This method blocks the transmissions on all the EMLSR links of the given EMLSR client until
124 * the transition delay advertised by the EMLSR client expires.
125 *
126 * \param address the link MAC address of the given EMLSR client
127 * \param delay the given delay
128 */
129 void EmlsrSwitchToListening(const Mac48Address& address, const Time& delay);
130
131 private:
132 /**
133 * Update the TXOP end timer when starting a frame transmission.
134 *
135 * \param txDuration the TX duration of the frame being transmitted
136 * \param durationId the Duration/ID value carried by the frame being transmitted
137 */
138 void UpdateTxopEndOnTxStart(Time txDuration, Time durationId);
139
140 /**
141 * Update the TXOP end timer when receiving a PHY-RXSTART.indication.
142 *
143 * \param psduDuration the TX duration of the PSDU being received
144 */
145 void UpdateTxopEndOnRxStartIndication(Time psduDuration);
146
147 /**
148 * Update the TXOP end timer when a frame reception ends.
149 *
150 * \param durationId the Duration/ID value carried by the received frame
151 */
152 void UpdateTxopEndOnRxEnd(Time durationId);
153
154 /**
155 * Take actions when a TXOP (of which we are not the holder) ends.
156 */
157 void TxopEnd();
158
159 EventId m_ongoingTxopEnd; //!< event indicating the possible end of the current TXOP (of which
160 //!< we are not the holder)
161 std::unordered_map<Mac48Address, EventId, WifiAddressHash>
162 m_transDelayTimer; //!< MLD address-indexed map of transition delay timers
163};
164
165} // namespace ns3
166
167#endif /* EHT_FRAME_EXCHANGE_MANAGER_H */
EhtFrameExchangeManager handles the frame exchange sequences for EHT stations.
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...
void ForwardPsduMapDown(WifiConstPsduMap psduMap, WifiTxVector &txVector) override
Forward a map of PSDUs down to the PHY layer.
void PreProcessFrame(Ptr< const WifiPsdu > psdu, const WifiTxVector &txVector) override
Perform actions that are possibly needed when receiving any frame, independently of whether the frame...
void NavResetTimeout() override
Reset the NAV upon expiration of the NAV reset timer.
void ForwardPsduDown(Ptr< const WifiPsdu > psdu, WifiTxVector &txVector) override
Forward a PSDU down to the PHY layer.
void TxopEnd()
Take actions when a TXOP (of which we are not the holder) ends.
void SendEmlOmn(const Mac48Address &dest, const MgtEmlOmn &frame)
Send an EML Operating Mode Notification frame to the given station.
Ptr< WifiMpdu > CreateAliasIfNeeded(Ptr< WifiMpdu > mpdu) const override
Create an alias of the given MPDU for transmission by this Frame Exchange Manager.
void TransmissionFailed() override
Take necessary actions upon a transmission failure.
void IntraBssNavResetTimeout() override
Reset the intra-BSS NAV upon expiration of the intra-BSS NAV reset timer.
void SendMuRts(const WifiTxParameters &txParams) override
Send an MU-RTS to begin an MU-RTS/CTS frame exchange protecting an MU PPDU.
void UpdateTxopEndOnRxEnd(Time durationId)
Update the TXOP end timer when a frame reception ends.
void TransmissionSucceeded() override
Take necessary actions upon a transmission success.
bool GetEmlsrSwitchToListening(Ptr< const WifiPsdu > psdu, uint16_t aid, const Mac48Address &address) const
static TypeId GetTypeId()
Get the type ID.
void DoDispose() override
Destructor implementation.
bool StartTransmission(Ptr< Txop > edca, uint16_t allowedWidth) override
Request the FrameExchangeManager to start a frame exchange sequence.
std::unordered_map< Mac48Address, EventId, WifiAddressHash > m_transDelayTimer
MLD address-indexed map of transition delay timers.
void NotifyChannelReleased(Ptr< Txop > txop) override
Notify the given Txop that channel has been released.
EventId m_ongoingTxopEnd
event indicating the possible end of the current TXOP (of which we are not the holder)
void RxStartIndication(WifiTxVector txVector, Time psduDuration) override
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)
void UpdateTxopEndOnTxStart(Time txDuration, Time durationId)
Update the TXOP end timer when starting a frame transmission.
void UpdateTxopEndOnRxStartIndication(Time psduDuration)
Update the TXOP end timer when receiving a PHY-RXSTART.indication.
void EmlsrSwitchToListening(const Mac48Address &address, const Time &delay)
This method is intended to be called when an AP MLD detects that an EMLSR client previously involved ...
void CtsAfterMuRtsTimeout(Ptr< WifiMpdu > muRts, const WifiTxVector &txVector) override
Called when no CTS frame is received after an MU-RTS.
void NotifySwitchingEmlsrLink(Ptr< WifiPhy > phy, uint8_t linkId, Time delay)
Notify that the given PHY will switch channel to operate on another EMLSR link after the given delay.
std::optional< double > GetMostRecentRssi(const Mac48Address &address) const override
Get the RSSI (in dBm) of the most recent packet received from the station having the given address.
void SetLinkId(uint8_t linkId) override
Set the ID of the link this Frame Exchange Manager is associated with.
An identifier for simulation events.
Definition: event-id.h:55
HeFrameExchangeManager handles the frame exchange sequences for HE stations.
an EUI-48 address
Definition: mac48-address.h:46
Implement the header for Action frames of type EML Operating Mode Notification.
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
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.
RxSignalInfo structure containing info on the received signal.
Definition: phy-entity.h:69