23 #include "ns3/assert.h"
24 #include "ns3/packet.h"
25 #include "ns3/simulator.h"
29 #include "ns3/double.h"
40 #undef NS_LOG_APPEND_CONTEXT
41 #define NS_LOG_APPEND_CONTEXT std::clog << "[mac=" << m_self << "] "
79 m_overrideDurationId (Seconds (0))
213 <<
"send rts=" << params.
m_sendRts <<
", "
232 os <<
"basic-block-ack";
235 os <<
"compressed-block-ack";
238 os <<
"multi-tid-block-ack";
289 : m_normalAckTimeoutEvent (),
290 m_fastAckTimeoutEvent (),
291 m_superFastAckTimeoutEvent (),
292 m_fastAckFailedTimeoutEvent (),
293 m_blockAckTimeoutEvent (),
294 m_ctsTimeoutEvent (),
299 m_endTxNoAckEvent (),
302 m_phyMacLowListener (0),
303 m_ctsToSelfSupported (false)
353 bool oneRunning =
false;
642 NS_LOG_DEBUG (
"switching channel. Cancelling MAC pending events");
669 NotifyNav (packet,hdr, txMode, preamble);
697 else if (hdr.
IsCts ()
708 rxSnr, txMode, tag.Get ());
720 else if (hdr.
IsAck ()
733 rxSnr, txMode, tag.Get ());
787 if ((*it).second.first.IsImmediateBlockAck ())
804 NS_LOG_DEBUG (
"There's not a valid agreement for this block ack request.");
812 else if (hdr.
IsCtl ())
1068 Time txTime = Seconds (0);
1097 uint32_t dataSize =
GetSize (packet, hdr);
1149 if (hdr.
IsRts () && navUpdated)
1162 Time navCounterResetCtsMissedDelay =
1186 (*i)->NavReset (duration);
1196 (*i)->NavStart (duration);
1200 if (newNavEnd > oldNavEnd)
1203 m_lastNavDuration = duration;
1213 (*i)->AckTimeoutStart (duration);
1221 (*i)->AckTimeoutReset ();
1229 (*i)->CtsTimeoutStart (duration);
1237 (*i)->CtsTimeoutReset ();
1248 ", size=" << packet->
GetSize () <<
1249 ", mode=" << txVector.
GetMode() <<
1343 Time duration = Seconds (0);
1365 dataTxVector, preamble);
1474 Time duration = Seconds (0.0);
1500 dataTxVector, preamble);
1549 Time duration = Seconds (0);
1560 dataTxVector, preamble);
1581 dataTxVector, preamble);
1631 NS_ASSERT (duration >= MicroSeconds (0));
1671 Time newDuration = Seconds (0);
1675 dataTxVector, preamble);
1676 duration -= txDuration;
1679 duration = std::max (duration, newDuration);
1680 NS_ASSERT (duration >= MicroSeconds (0));
1732 NS_ASSERT (duration >= MicroSeconds (0));
1750 ForwardDown (packet, &ack, ackTxVector, preamble);
1763 uint16_t endSequence = ((*it).second.first.GetStartingSequence () + 2047) % 4096;
1767 for (; i != (*it).second.second.end ()
1772 (*it).second.second.insert (i, bufferedPacket);
1777 (*j).second.UpdateWithMpdu (&hdr);
1786 uint16_t startingSeq)
1788 uint8_t tid = respHdr->
GetTid ();
1803 std::list<BufferedPacket> buffer (0);
1848 uint16_t endSequence = ((*it).second.first.GetStartingSequence () + 2047) % 4096;
1850 uint16_t guard = (*it).second.second.begin ()->second.GetSequenceControl () & 0xfff0;
1854 for (; i != (*it).second.second.end ()
1857 if (guard == (*i).second.GetSequenceControl ())
1859 if (!(*i).second.IsMoreFragments ())
1869 while (i != (*it).second.second.end () && ((guard >> 4) & 0x0fff) == (*i).second.GetSequenceNumber ())
1873 if (i != (*it).second.second.end ())
1875 guard = (*i).second.GetSequenceControl () & 0xfff0;
1887 while (i != (*it).second.second.end () && ((guard >> 4) & 0x0fff) == (*i).second.GetSequenceNumber ())
1891 if (i != (*it).second.second.end ())
1893 guard = (*i).second.GetSequenceControl () & 0xfff0;
1898 (*it).second.second.erase ((*it).second.second.begin (), i);
1908 uint16_t startingSeqCtrl = ((*it).second.first.GetStartingSequence () << 4) & 0xfff0;
1909 uint16_t guard = startingSeqCtrl;
1913 for (; i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl (); i++)
1915 if (!(*i).second.IsMoreFragments ())
1917 while (lastComplete != i)
1919 m_rxCallback ((*lastComplete).first, &(*lastComplete).second);
1922 m_rxCallback ((*lastComplete).first, &(*lastComplete).second);
1925 guard = (*i).second.IsMoreFragments () ? (guard + 1) : ((guard + 16) & 0xfff0);
1927 (*it).second.first.SetStartingSequence ((guard >> 4) & 0x0fff);
1930 (*it).second.second.erase ((*it).second.second.begin (), lastComplete);
1952 blockAckReqTxVector.
SetMode(blockAckReqTxMode);
1953 blockAckReqTxVector.
SetNss(1);
1954 blockAckReqTxVector.
SetStbc(
false);
1988 NS_ASSERT (duration >= MicroSeconds (0));
2000 ForwardDown (packet, &hdr, blockAckTxVector,preamble);
2011 bool immediate =
false;
2020 immediate = (*it).second.first.IsImmediateBlockAck ();
2031 (*i).second.FillBlockAckBitmap (&blockAck);
2041 NS_LOG_DEBUG (
"there's not a valid block ack agreement with " << originator);
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
void Set(double snr)
Set the SNR to the given value.
bool MustSendRts(void) const
Time GetPifs(void) const
Return PCF Interframe Space (PIFS) of this MacLow.
uint32_t GetAckSize(void) const
Return the total ACK size (including FCS trailer).
virtual ~MacLowDcfListener()
void SetPifs(Time pifs)
Set PCF Interframe Space (PIFS) of this MacLow.
Time m_ctsTimeout
CTS timeout duration.
uint8_t GetTid(void) const
Return the Traffic ID (TID).
keep track of time values and allow control of global simulation resolution
EventId m_navCounterResetCtsMissed
Event to reset NAV when CTS is not received.
#define NS_LOG_FUNCTION(parameters)
void ResetBlockAckInactivityTimerIfNeeded(BlockAckAgreement &agreement)
Every time that a block ack request or a packet with ack policy equals to block ack are received...
EventId m_blockAckTimeoutEvent
Block ACK timeout event.
Time GetBlockAckDuration(Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
virtual ~MacLowTransmissionListener()
uint16_t GetTimeout(void) const
Return the timeout.
Time GetAckDuration(WifiTxVector ackTxVector) const
Return the time required to transmit the ACK (including preamble and FCS).
enum ns3::MacLowTransmissionParameters::@87 m_waitAck
virtual void GotAck(double snr, WifiMode txMode)=0
void SetPromisc(void)
Enable promiscuous mode.
EventId m_waitSifsEvent
Wait for SIFS event.
void SendDataAfterCts(Mac48Address source, Time duration, WifiMode txMode)
Send DATA after receiving CTS.
void DoNavResetNow(Time duration)
Reset NAV with the given duration.
bool IsPromisc(void) const
Check if MacLow is operating in promiscuous mode.
void EnableBasicBlockAck(void)
Wait BASICBLOCKACKTimeout for a Basic Block Ack Response frame.
Mac48Address GetPeer(void) const
Return the peer address.
EventId m_fastAckTimeoutEvent
Fast ACK timeout event.
Time m_pifs
PCF Interframe Space (PIFS) duration.
void AddPacketTag(const Tag &tag) const
Add a packet tag.
bool DoNavStartNow(Time duration)
Start NAV with the given duration.
void FastAckFailedTimeout(void)
Event handler when fast ACK timeout occurs (busy).
Mac48Address GetBssid(void) const
Return the Basic Service Set Identification.
void SetSifs(Time sifs)
Set Short Interframe Space (SIFS) of this MacLow.
virtual void MissedAck(void)=0
ns3::MacLow did not receive an expected ACK within AckTimeout.
std::pair< Mac48Address, uint8_t > AgreementKey
enum WifiModulationClass GetModulationClass() const
WifiTxVector GetCtsToSelfTxVector(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Return a TXVECTOR for the CTS-to-self frame.
void SetupPhyMacLowListener(Ptr< WifiPhy > phy)
Set up WifiPhy listener for this MacLow.
#define NS_ASSERT(condition)
void Init(uint16_t winStart, uint16_t winSize)
virtual void NotifyRxEndError(void)
We have received the last bit of a packet for which NotifyRxStart was invoked first and...
virtual void BlockAckInactivityTimeout(Mac48Address originator, uint8_t tid)=0
Typically is called in order to notify EdcaTxopN that a block ack inactivity timeout occurs for the b...
void SetStbc(bool stbc)
Sets if STBC is being used.
uint32_t GetSize(void) const
bool HasDurationId(void) const
DcfListeners m_dcfListeners
List of MacLowDcfListener (pass events to Dcf)
bool IsRunning(void) const
This method is syntactic sugar for the ns3::Simulator::isExpired method.
void SetRxCallback(Callback< void, Ptr< Packet >, const WifiMacHeader * > callback)
Time GetCompressedBlockAckTimeout() const
Return Compressed Block ACK timeout of this MacLow.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
Mac48Address m_bssid
BSSID address (Mac48Address)
BlockAckType
Enumeration for different block ACK policies.
EventId m_sendCtsEvent
Event to send CTS.
MacLowRxCallback m_rxCallback
Callback to pass packet up.
Time GetCtsTimeout(void) const
Return CTS timeout of this MacLow.
EventId m_superFastAckTimeoutEvent
Super fast ACK timeout event.
EventId m_sendAckEvent
Event to send ACK.
listen to events coming from ns3::MacLow.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Time GetCtsDuration(WifiTxVector ctsTxVector) const
Return the time required to transmit the CTS (including preamble and FCS).
bool MustWaitFastAck(void) const
virtual void RegisterListener(WifiPhyListener *listener)=0
control how a packet is transmitted.
MacLowTransmissionParameters()
void WaitSifsAfterEndTx(void)
Event handler that is usually scheduled to fired at the appropriate time after completing transmissio...
#define NS_FATAL_ERROR(msg)
fatal error handling
MacLowTransmissionListener()
std::vector< MacLowDcfListener * >::const_iterator DcfListenersCI
typedef for an iterator for a list of MacLowDcfListener.
void SetCtsToSelfSupported(bool enable)
Enable or disable CTS-to-self capability.
void NormalAckTimeout(void)
Event handler when normal ACK timeout occurs.
void SetBasicBlockAckTimeout(Time blockAckTimeout)
Set Basic Block ACK timeout of this MacLow.
BlockAckCaches m_bAckCaches
virtual bool IsStateIdle(void)=0
WifiPreamble
The type of preamble to be used by an IEEE 802.11 transmission.
void DestroyBlockAckAgreement(Mac48Address originator, uint8_t tid)
Time m_lastNavDuration
The duration of the latest NAV.
std::pair< Ptr< Packet >, WifiMacHeader > BufferedPacket
void SendCtsToSelf(void)
Send CTS for a CTS-to-self mechanism.
bool m_ctsToSelfSupported
virtual void SetReceiveErrorCallback(RxErrorCallback callback)=0
void SendAckAfterData(Mac48Address source, Time duration, WifiMode dataTxMode, double dataSnr)
Send ACK after receiving DATA.
void CreateBlockAckAgreement(const MgtAddBaResponseHeader *respHdr, Mac48Address originator, uint16_t startingSeq)
uint32_t GetBlockAckSize(enum BlockAckType type) const
Return the total Block ACK size (including FCS trailer).
receive notifications about phy events.
void CtsTimeout(void)
Event handler when CTS timeout occurs.
void EnableSuperFastAck(void)
virtual void StartNext(void)=0
Invoked when ns3::MacLow wants to start a new transmission as configured by MacLowTransmissionParamet...
void EndTxNoAck(void)
A transmission that does not require an ACK has completed.
std::map< AgreementKey, BlockAckCache >::iterator BlockAckCachesI
virtual void EndTxNoAck(void)=0
Invoked upon the end of the transmission of a frame that does not require an ACK (e.g., broadcast and multicast frames).
WifiTxVector GetAckTxVector(Mac48Address to, WifiMode dataTxMode) const
Return a TXVECTOR for the ACK frame given the destination and the mode of the DATA used by the sender...
void SetAckTimeout(Time ackTimeout)
Set ACK timeout of this MacLow.
virtual void GotCts(double snr, WifiMode txMode)=0
AcIndex QosUtilsMapTidToAc(uint8_t tid)
Maps TID (Traffic ID) to Access classes.
void SendBlockAckResponse(const CtrlBAckResponseHeader *blockAck, Mac48Address originator, bool immediate, Time duration, WifiMode blockAckReqTxMode)
This method creates block ack frame with header equals to blockAck and start its transmission.
Time GetRifs(void) const
Return Reduced Interframe Space (RIFS) of this MacLow.
virtual void NotifyRxStart(Time duration)
void NavCounterResetCtsMissed(Time rtsEndRxTime)
Reset NAV after CTS was missed when the NAV was setted with RTS.
Ptr< WifiRemoteStationManager > m_stationManager
Pointer to WifiRemoteStationManager (rate control)
bool MustWaitMultiTidBlockAck(void) const
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Mac48Address GetAddress(void) const
Return the MAC address of this MacLow.
uint32_t GetNextPacketSize(void) const
Agreements m_bAckAgreements
bool HasNextPacket(void) const
WifiTxVector GetAckTxVectorForData(Mac48Address to, WifiMode dataTxMode) const
Return a TXVECTOR for the Block ACK frame given the destination and the mode of the DATA used by the ...
void RegisterDcfListener(MacLowDcfListener *listener)
NS_LOG_COMPONENT_DEFINE("MacLow")
void NotifySwitchingStartNow(Time duration)
Time m_slotTime
Slot duration.
bool m_promisc
Flag if the device is operating in promiscuous mode.
void SetNss(uint8_t nss)
Sets the number of Nss refer to IEEE802.11n Table 20-28 for explanation and range.
void CancelAllEvents(void)
Cancel all scheduled events.
void StartTransmission(Ptr< const Packet > packet, const WifiMacHeader *hdr, MacLowTransmissionParameters parameters, MacLowTransmissionListener *listener)
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
std::list< BufferedPacket >::iterator BufferedPacketI
void SetStartingSequence(uint16_t seq)
Set starting sequence number.
Ptr< Packet > Copy(void) const
void BlockAckTimeout(void)
Event handler when block ACK timeout occurs.
void NotifyCtsTimeoutStartNow(Time duration)
Notify DcfManager (via DcfListener) that CTS timer should be started for the given duration...
Time m_overrideDurationId
void SendBlockAckAfterBlockAckRequest(const CtrlBAckRequestHeader reqHdr, Mac48Address originator, Time duration, WifiMode blockAckReqTxMode)
Invoked after that a block ack request has been received.
void EnableCompressedBlockAck(void)
Wait COMPRESSEDBLOCKACKTimeout for a Compressed Block Ack Response frame.
void SuperFastAckTimeout(void)
Event handler when super fast ACK timeout occurs.
void SetBssid(Mac48Address ad)
Set the Basic Service Set Identification.
listen for block ack events.
uint32_t GetRtsSize(void) const
Return the total RTS size (including FCS trailer).
void EnableAck(void)
Wait ACKTimeout for an ACK.
Time CalculateTransmissionTime(Ptr< const Packet > packet, const WifiMacHeader *hdr, const MacLowTransmissionParameters ¶meters) const
EventId m_normalAckTimeoutEvent
Normal ACK timeout event.
void StartDataTxTimers(WifiTxVector dataTxVector)
Start a DATA timer by scheduling appropriate ACK timeout.
void AddTrailer(const Trailer &trailer)
Add trailer to this packet.
void NotifyCtsTimeoutResetNow()
Notify DcfManager (via DcfListener) that CTS timer should be resetted.
bool MustWaitBasicBlockAck(void) const
bool MustWaitCompressedBlockAck(void) const
uint32_t RemoveTrailer(Trailer &trailer)
Remove a deserialized trailer from the internal buffer.
bool NeedCtsToSelf(void)
Check if CTS-to-self mechanism should be used for the current packet.
virtual ~MacLowBlockAckEventListener()
virtual void Cancel(void)=0
Invoked if this transmission was canceled one way or another.
Time m_ackTimeout
ACK timeout duration.
listen to NAV eventsThis class is typically connected to an instance of ns3::Dcf and calls to its met...
void FastAckTimeout(void)
Event handler when fast ACK timeout occurs (idle).
void DisableRts(void)
Do not send rts and wait for cts before sending data.
void EnableMultiTidBlockAck(void)
NOT IMPLEMENTED FOR NOW.
static Time Now(void)
Return the "current simulation time".
EventId m_ctsTimeoutEvent
CTS timeout event.
void RxCompleteBufferedPacketsWithSmallerSequence(uint16_t seq, Mac48Address originator, uint8_t tid)
void SetPhy(Ptr< WifiPhy > phy)
Set up WifiPhy associated with this MacLow.
virtual bool IsStateTx(void)=0
Time m_basicBlockAckTimeout
Basic block ACK timeout duration.
Time GetDurationId(void) const
virtual void MissedBlockAck(void)
ns3::MacLow did not receive an expected BLOCK_ACK within BlockAckTimeout.
Time m_sifs
Short Interframe Space (SIFS) duration.
void ReceiveError(Ptr< const Packet > packet, double rxSnr)
Time GetSlotTime(void) const
Return slot duration of this MacLow.
void SetMode(WifiMode mode)
Sets the selected payload transmission mode.
void SetDelayedBlockAck(void)
Set Block ACK policy to delayed ACK.
Time m_lastNavStart
The time when the latest NAV started.
EventId m_inactivityEvent
void SetAmsduSupport(bool supported)
Enable or disable A-MSDU support.
virtual void NotifyMaybeCcaBusyStart(Time duration)
WifiTxVector GetRtsTxVector(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Return a TXVECTOR for the RTS frame given the destination.
virtual WifiTxVector GetDataTxVector(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Return a TXVECTOR for the DATA frame given the destination.
handle RTS/CTS/DATA/ACK transactions.
virtual void MissedCts(void)=0
ns3::MacLow did not receive an expected CTS within CtsTimeout.
EventId m_sendDataEvent
Event to send DATA.
static Time CalculateTxDuration(uint32_t size, WifiTxVector txvector, enum WifiPreamble preamble)
MacLowTransmissionParameters m_txParams
Transmission parameters of the current packet.
void SetRifs(Time rifs)
Set Reduced Interframe Space (RIFS) of this MacLow.
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
MacLowBlockAckEventListener()
void NotifyAckTimeoutResetNow()
Notify DcfManager (via DcfListener) that ACK timer should be resetted.
bool MustWaitSuperFastAck(void) const
Time CalculateOverallTxTime(Ptr< const Packet > packet, const WifiMacHeader *hdr, const MacLowTransmissionParameters ¶ms) const
QueueListeners m_edcaListeners
WifiTxVector GetBlockAckTxVector(Mac48Address to, WifiMode dataTxMode) const
Return a TXVECTOR for the Block ACK frame given the destination and the mode of the DATA used by the ...
Mac48Address m_self
Address of this MacLow (Mac48Address)
Maintains information for a block ack agreement.
EventId m_fastAckFailedTimeoutEvent
Fast ACK failed timeout event.
uint32_t QosUtilsMapSeqControlToUniqueInteger(uint16_t seqControl, uint16_t endSequence)
Next function is useful to correctly sort buffered packets under block ack.
bool IsNavZero(void) const
Check if NAV is zero.
void EnableRts(void)
Send a RTS, and wait CTSTimeout for a CTS.
void NotifyAckTimeoutStartNow(Time duration)
Notify DcfManager (via DcfListener) that ACK timer should be started for the given duration...
void SetSlotTime(Time slotTime)
Set slot duration of this MacLow.
Ptr< Packet > m_currentPacket
Current packet transmitted/to be transmitted.
Time GetSifs(void) const
Return Short Interframe Space (SIFS) of this MacLow.
bool RemovePacketTag(Tag &tag)
Remove a packet tag.
void SendCtsAfterRts(Mac48Address source, Time duration, WifiMode txMode, double rtsSnr)
Send CTS after receiving RTS.
#define NS_LOG_DEBUG(msg)
std::map< AgreementKey, AgreementValue >::iterator AgreementsI
EventId m_endTxNoAckEvent
Event for finishing transmission that does not require ACK.
virtual void NotifyTxStart(Time duration)
virtual void GotBlockAck(const CtrlBAckResponseHeader *blockAck, Mac48Address source)
void EnableOverrideDurationId(Time durationId)
virtual void SetReceiveOkCallback(RxOkCallback callback)=0
bool GetCtsToSelfSupported() const
Return whether CTS-to-self capability is supported.
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::cancel method.
void SetCtsTimeout(Time ctsTimeout)
Set CTS timeout of this MacLow.
void EnableNextData(uint32_t size)
void SetImmediateBlockAck(void)
Set Block ACK policy to immediate ACK.
void DisableOverrideDurationId(void)
Do not force the duration/id field of the packet: its value is automatically calculated by the MacLow...
Time GetAckTimeout(void) const
Return ACK timeout of this MacLow.
EventId m_waitRifsEvent
Wait for RIFS event.
void DisableNextData(void)
Do not attempt to send data burst after current transmission.
void SendDataPacket(void)
Send DATA packet, which can be DATA-ACK or RTS-CTS-DATA-ACK transaction.
void SetTimeout(uint16_t timeout)
Set timeout.
uint32_t GetCtsSize(void) const
Return the total CTS size (including FCS trailer).
WifiMacHeader m_currentHdr
Header of the current packet.
void SetAddress(Mac48Address ad)
Set MAC address of this MacLow.
virtual void SendPacket(Ptr< const Packet > packet, WifiMode mode, enum WifiPreamble preamble, WifiTxVector txvector)=0
void ForwardDown(Ptr< const Packet > packet, const WifiMacHeader *hdr, WifiTxVector txVector, WifiPreamble preamble)
Forward the packet down to WifiPhy for transmission.
void ReceiveOk(Ptr< Packet > packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
PhyMacLowListener(ns3::MacLow *macLow)
Create a PhyMacLowListener for the given MacLow.
Time m_compressedBlockAckTimeout
Compressed block ACK timeout duration.
WifiMode GetMode(void) const
bool MustWaitAck(void) const
void RegisterBlockAckListenerForAc(enum AcIndex ac, MacLowBlockAckEventListener *listener)
virtual ~PhyMacLowListener()
void DisableAck(void)
Do not wait for Ack after data transmission.
bool IsExpired(void) const
This method is syntactic sugar for the ns3::Simulator::isExpired method.
std::pair< BlockAckAgreement, std::list< BufferedPacket > > AgreementValue
virtual void NotifySwitchingStart(Time duration)
virtual Time GetLastRxStartTime(void) const =0
Return the start time of the last received packet.
WifiTxVector GetCtsTxVectorForRts(Mac48Address to, WifiMode rtsTxMode) const
Return a TXVECTOR for the CTS frame given the destination and the mode of the RTS used by the sender...
void SetBufferSize(uint16_t bufferSize)
Set buffer size.
Time GetBasicBlockAckTimeout() const
Return Basic Block ACK timeout of this MacLow.
void NotifyNav(Ptr< const Packet > packet, const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble)
Time m_rifs
Reduced Interframe Space (RIFS) duration.
AcIndex
This enumeration defines the Access Categories as an enumeration with values corresponding to the AC ...
WifiTxVector GetCtsTxVector(Mac48Address to, WifiMode rtsTxMode) const
Return a TXVECTOR for the CTS frame given the destination and the mode of the RTS used by the sender...
Doxygen introspection did not find any typical Config paths.
bool StoreMpduIfNeeded(Ptr< Packet > packet, WifiMacHeader hdr)
bool MustWaitNormalAck(void) const
virtual bool GetGreenfield(void) const =0
Ptr< WifiPhy > m_phy
Pointer to WifiPhy (actually send/receives frames)
void AddHeader(const Header &header)
Add header to this packet.
void SetCompressedBlockAckTimeout(Time blockAckTimeout)
Set Compressed Block ACK timeout of this MacLow.
Implements the IEEE 802.11 MAC trailer.
virtual void NotifyRxEndOk(void)
We have received the last bit of a packet for which NotifyRxStart was invoked first and...
void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > manager)
Set up WifiRemoteStationManager associated with this MacLow.
class PhyMacLowListener * m_phyMacLowListener
Listerner needed to monitor when a channel switching occurs.
virtual uint32_t GetSerializedSize(void) const
uint32_t GetSize(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Return the total size of the packet after WifiMacHeader and FCS trailer have been added...
MacLowTransmissionListener * m_listener
Transmission listener for the current packet.
void SendRtsForPacket(void)
Send RTS to begin RTS-CTS-DATA-ACK transaction.
void RxCompleteBufferedPacketsUntilFirstLost(Mac48Address originator, uint8_t tid)