|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
23 #include "ns3/packet.h"
33 #include "ns3/ht-capabilities.h"
34 #include "ns3/vht-capabilities.h"
35 #include "ns3/he-capabilities.h"
52 .SetGroupName (
"Wifi")
129 uint32_t maxAmpduSize =
m_mac->GetMaxAmpduSize (ac);
131 if (maxAmpduSize == 0)
133 NS_LOG_DEBUG (
"A-MPDU Aggregation is disabled on this station for AC " << ac);
149 NS_ABORT_MSG_IF (!heCapabilities,
"HE Capabilities element not received");
151 maxAmpduSize =
std::min (maxAmpduSize, heCapabilities->GetMaxAmpduLength ());
155 NS_ABORT_MSG_IF (!vhtCapabilities,
"VHT Capabilities element not received");
157 maxAmpduSize =
std::min (maxAmpduSize, vhtCapabilities->GetMaxAmpduLength ());
161 NS_ABORT_MSG_IF (!htCapabilities,
"HT Capabilities element not received");
163 maxAmpduSize =
std::min (maxAmpduSize, htCapabilities->GetMaxAmpduLength ());
167 NS_LOG_DEBUG (
"A-MPDU aggregation is not available for non-HT PHYs");
178 return (4 - (ampduSize % 4 )) % 4;
193 std::vector<Ptr<WifiMacQueueItem>>
199 std::vector<Ptr<WifiMacQueueItem>> mpduList;
215 while (nextMpdu != 0)
219 <<
" to A-MPDU, packet size = " << nextMpdu->
GetSize ()
220 <<
", A-MPDU size = " << txParams.
GetSize (recipient));
222 mpduList.push_back (nextMpdu);
228 peekedMpdu = qosTxop->
PeekNextMpdu (queueIt, tid, recipient);
240 nextMpdu = qosTxop->
GetNextMpdu (peekedMpdu, txParams, availableTime,
false, queueIt);
244 if (mpduList.size () == 1)
a unique identifier for an interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void SetWifiMac(const Ptr< RegularWifiMac > mac)
Set the MAC layer to use.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
void AddHeader(const Header &header)
Add header to this packet.
uint16_t GetBaBufferSize(Mac48Address address, uint8_t tid) const
Every class exported by the ns3 library is enclosed in the ns3 namespace.
@ WIFI_MOD_CLASS_HT
HT (Clause 19)
@ WIFI_MOD_CLASS_HE
HE (Clause 27)
bool GetBaAgreementEstablished(Mac48Address address, uint8_t tid) const
uint32_t GetSize(Mac48Address receiver) const
Get the size in bytes of the (A-)MPDU addressed to the given receiver.
Ptr< const WifiMacQueueItem > PeekNextMpdu(uint8_t tid=8, Mac48Address recipient=Mac48Address::GetBroadcast())
Peek the next frame to transmit to the given receiver and of the given TID from the block ack manager...
This class stores the TX parameters (TX vector, protection mechanism, acknowledgment mechanism,...
const WifiMacHeader & GetHeader(void) const
Get the header stored in this item.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
uint32_t GetMaxAmpduSize(Mac48Address recipient, uint8_t tid, WifiModulationClass modulation) const
Determine the maximum size for an A-MPDU of the given TID that can be sent to the given receiver when...
uint16_t GetBaStartingSequence(Mac48Address address, uint8_t tid) const
static AmpduSubframeHeader GetAmpduSubframeHeader(uint16_t mpduSize, bool isSingle)
Get the A-MPDU subframe header corresponding to the MPDU size and whether the MPDU is a single MPDU.
Ptr< RegularWifiMac > m_mac
the MAC of this station
Smart pointer class similar to boost::intrusive_ptr.
Ptr< const HeCapabilities > GetStationHeCapabilities(Mac48Address from)
Return the HE capabilities sent by the remote station.
std::list< Ptr< WifiMacQueueItem > >::const_iterator ConstIterator
Const iterator typedef.
Ptr< const HtCapabilities > GetStationHtCapabilities(Mac48Address from)
Return the HT capabilities sent by the remote station.
WifiModulationClass GetModulationClass(void) const
Get the modulation class specified by this TXVECTOR.
A base class which provides memory management and object aggregation.
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
bool IsBroadcast(void) const
static TypeId GetTypeId(void)
Get the type ID.
Simulation virtual time values and global simulation resolution.
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Ptr< const VhtCapabilities > GetStationVhtCapabilities(Mac48Address from)
Return the VHT capabilities sent by the remote station.
bool IsInWindow(uint16_t seq, uint16_t winstart, uint16_t winsize)
static void Aggregate(Ptr< const WifiMacQueueItem > mpdu, Ptr< Packet > ampdu, bool isSingle)
Aggregate an MPDU to an A-MPDU.
void AddAtEnd(Ptr< const Packet > packet)
Concatenate the input packet at the end of the current packet.
void AddWifiMacTrailer(Ptr< Packet > packet)
Add FCS trailer to a packet.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
WifiTxVector m_txVector
TXVECTOR of the frame being prepared.
void DoDispose() override
Destructor implementation.
Ptr< WifiMacQueueItem > GetNextMpdu(Ptr< const WifiMacQueueItem > peekedItem, WifiTxParameters &txParams, Time availableTime, bool initialFrame, WifiMacQueueItem::ConstIterator &queueIt)
Prepare the frame to transmit starting from the MPDU that has been previously peeked by calling PeekN...
static uint8_t CalculatePadding(uint32_t ampduSize)
virtual ~MpduAggregator()
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
@ WIFI_MOD_CLASS_VHT
VHT (Clause 22)
uint32_t GetSize(void) const
Return the size of the packet stored by this item, including header size and trailer size.
Aggregator used to construct A-MPDUs.
virtual void DoDispose(void)
Destructor implementation.
std::vector< Ptr< WifiMacQueueItem > > GetNextAmpdu(Ptr< WifiMacQueueItem > mpdu, WifiTxParameters &txParams, Time availableTime, WifiMacQueueItem::ConstIterator queueIt) const
Attempt to aggregate other MPDUs to the given MPDU, while meeting the following constraints:
static uint32_t GetSizeIfAggregated(uint32_t mpduSize, uint32_t ampduSize)
Compute the size of the A-MPDU resulting from the aggregation of an MPDU of size mpduSize and an A-MP...
WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802....