30 #include "wifi-mac-header.h"
31 #include "wifi-mode.h"
32 #include "wifi-preamble.h"
33 #include "wifi-remote-station-manager.h"
34 #include "ctrl-headers.h"
35 #include "mgt-headers.h"
36 #include "block-ack-agreement.h"
37 #include "ns3/mac48-address.h"
38 #include "ns3/callback.h"
39 #include "ns3/event-id.h"
40 #include "ns3/packet.h"
41 #include "ns3/nstime.h"
42 #include "qos-utils.h"
43 #include "block-ack-cache.h"
126 virtual void Cancel (
void) = 0;
159 virtual void AckTimeoutStart (
Time duration) = 0;
160 virtual void AckTimeoutReset () = 0;
161 virtual void CtsTimeoutStart (
Time duration) = 0;
162 virtual void CtsTimeoutReset () = 0;
365 BLOCK_ACK_COMPRESSED,
369 Time m_overrideDurationId;
391 void SetAckTimeout (
Time ackTimeout);
392 void SetBasicBlockAckTimeout (
Time blockAckTimeout);
393 void SetCompressedBlockAckTimeout (
Time blockAckTimeout);
394 void SetCtsTimeout (
Time ctsTimeout);
395 void SetSifs (
Time sifs);
396 void SetSlotTime (
Time slotTime);
397 void SetPifs (
Time pifs);
399 void SetPromisc (
void);
401 Time GetAckTimeout (
void)
const;
402 Time GetBasicBlockAckTimeout ()
const;
403 Time GetCompressedBlockAckTimeout ()
const;
404 Time GetCtsTimeout (
void)
const;
405 Time GetSifs (
void)
const;
406 Time GetSlotTime (
void)
const;
407 Time GetPifs (
void)
const;
498 uint16_t startingSeq);
516 void SetTxRadio (
bool isTx);
517 bool IsTxRadio (
void);
518 void SetRxRadio (
bool isRx);
519 bool IsRxRadio (
void);
522 void CancelAllEvents (
void);
523 uint32_t GetAckSize (
void)
const;
524 uint32_t GetBlockAckSize (
enum BlockAckType type)
const;
525 uint32_t GetRtsSize (
void)
const;
526 uint32_t GetCtsSize (
void)
const;
528 Time NowUs (
void)
const;
543 void DoNavResetNow (
Time duration);
544 bool DoNavStartNow (
Time duration);
545 bool IsNavZero (
void)
const;
546 void NotifyAckTimeoutStartNow (
Time duration);
547 void NotifyAckTimeoutResetNow ();
548 void NotifyCtsTimeoutStartNow (
Time duration);
549 void NotifyCtsTimeoutResetNow ();
550 void MaybeCancelPrevious (
void);
552 void NavCounterResetCtsMissed (
Time rtsEndRxTime);
553 void NormalAckTimeout (
void);
554 void FastAckTimeout (
void);
555 void SuperFastAckTimeout (
void);
556 void FastAckFailedTimeout (
void);
557 void BlockAckTimeout (
void);
558 void CtsTimeout (
void);
562 void WaitSifsAfterEndTx (
void);
563 void EndTxNoAck (
void);
565 void SendRtsForPacket (
void);
566 void SendDataPacket (
void);
567 void SendCurrentTxPacket (
void);
568 void StartDataTxTimers (
void);
623 typedef std::vector<MacLowDcfListener *>::const_iterator DcfListenersCI;
624 typedef std::vector<MacLowDcfListener *> DcfListeners;
625 DcfListeners m_dcfListeners;
627 EventId m_normalAckTimeoutEvent;
629 EventId m_superFastAckTimeoutEvent;
630 EventId m_fastAckFailedTimeoutEvent;
631 EventId m_blockAckTimeoutEvent;
638 EventId m_navCounterResetCtsMissed;
647 Time m_basicBlockAckTimeout;
648 Time m_compressedBlockAckTimeout;
655 Time m_lastNavDuration;
667 typedef std::pair<Ptr<Packet>,
WifiMacHeader> BufferedPacket;
668 typedef std::list<BufferedPacket>::iterator BufferedPacketI;
670 typedef std::pair<Mac48Address, uint8_t> AgreementKey;
671 typedef std::pair<BlockAckAgreement, std::list<BufferedPacket> > AgreementValue;
673 typedef std::map<AgreementKey, AgreementValue> Agreements;
674 typedef std::map<AgreementKey, AgreementValue>::iterator AgreementsI;
676 typedef std::map<AgreementKey, BlockAckCache> BlockAckCaches;
677 typedef std::map<AgreementKey, BlockAckCache>::iterator BlockAckCachesI;
679 Agreements m_bAckAgreements;
680 BlockAckCaches m_bAckCaches;
682 typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
683 QueueListeners m_edcaListeners;
bool MustSendRts(void) const
virtual void GotAck(double snr, WifiMode txMode)=0
void EnableBasicBlockAck(void)
virtual void MissedAck(void)=0
virtual void BlockAckInactivityTimeout(Mac48Address originator, uint8_t tid)=0
bool HasDurationId(void) const
void SetRxCallback(Callback< void, Ptr< Packet >, const WifiMacHeader * > callback)
listen to events coming from ns3::MacLow.
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
bool MustWaitFastAck(void) const
control how a packet is transmitted.The ns3::MacLow::StartTransmission method expects an instance of ...
void DestroyBlockAckAgreement(Mac48Address originator, uint8_t tid)
void CreateBlockAckAgreement(const MgtAddBaResponseHeader *respHdr, Mac48Address originator, uint16_t startingSeq)
void EnableSuperFastAck(void)
virtual void StartNext(void)=0
virtual void EndTxNoAck(void)=0
virtual void GotCts(double snr, WifiMode txMode)=0
bool MustWaitMultiTidBlockAck(void) const
uint32_t GetNextPacketSize(void) const
bool HasNextPacket(void) const
void RegisterDcfListener(MacLowDcfListener *listener)
void NotifySwitchingStartNow(Time duration)
void StartTransmission(Ptr< const Packet > packet, const WifiMacHeader *hdr, MacLowTransmissionParameters parameters, MacLowTransmissionListener *listener)
std::ostream & operator<<(std::ostream &os, const Angles &a)
virtual void NavStart(Time duration)=0
void EnableCompressedBlockAck(void)
listen for block ack events.
Time CalculateTransmissionTime(Ptr< const Packet > packet, const WifiMacHeader *hdr, const MacLowTransmissionParameters ¶meters) const
bool MustWaitBasicBlockAck(void) const
bool MustWaitCompressedBlockAck(void) const
virtual void Cancel(void)=0
void NotifyNav(const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble)
listen to NAV eventsThis class is typically connected to an instance of ns3::Dcf and calls to its met...
void EnableMultiTidBlockAck(void)
void RxCompleteBufferedPacketsWithSmallerSequence(uint16_t seq, Mac48Address originator, uint8_t tid)
Time GetDurationId(void) const
virtual void MissedBlockAck(void)
void ReceiveError(Ptr< const Packet > packet, double rxSnr)
handle RTS/CTS/DATA/ACK transactions.
virtual void MissedCts(void)=0
virtual void DoDispose(void)
bool MustWaitSuperFastAck(void) const
Maintains information for a block ack agreement.
an identifier for simulation events.
virtual void NavReset(Time duration)=0
virtual void GotBlockAck(const CtrlBAckResponseHeader *blockAck, Mac48Address source)
void NotifySensingStartNow(Time duration)
void EnableOverrideDurationId(Time durationId)
void EnableNextData(uint32_t size)
void DisableOverrideDurationId(void)
void DisableNextData(void)
a base class which provides memory management and object aggregation
void ReceiveOk(Ptr< Packet > packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
bool MustWaitAck(void) const
void RegisterBlockAckListenerForAc(enum AcIndex ac, MacLowBlockAckEventListener *listener)
bool MustWaitNormalAck(void) const
void RxCompleteBufferedPacketsUntilFirstLost(Mac48Address originator, uint8_t tid)