A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
mac-low.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005, 2006 INRIA
4  * Copyright (c) 2009 MIRKO BANCHI
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20  * Author: Mirko Banchi <mk.banchi@gmail.com>
21  */
22 #ifndef MAC_LOW_H
23 #define MAC_LOW_H
24 
25 #include <vector>
26 #include <stdint.h>
27 #include <ostream>
28 #include <map>
29 
30 #include "wifi-mac-header.h"
31 #include "wifi-mode.h"
32 #include "wifi-preamble.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"
44 #include "wifi-tx-vector.h"
45 
46 namespace ns3 {
47 
48 class WifiPhy;
49 class WifiMac;
50 class EdcaTxopN;
51 
57 {
58 public:
60  virtual ~MacLowTransmissionListener ();
61 
69  virtual void GotCts (double snr, WifiMode txMode) = 0;
74  virtual void MissedCts (void) = 0;
84  virtual void GotAck (double snr, WifiMode txMode) = 0;
89  virtual void MissedAck (void) = 0;
102  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source);
112  virtual void MissedBlockAck (void);
119  virtual void StartNext (void) = 0;
120 
127  virtual void Cancel (void) = 0;
128 
134  virtual void EndTxNoAck (void) = 0;
135 
136 };
137 
138 
148 {
149 public:
151  virtual ~MacLowDcfListener ();
155  virtual void NavStart (Time duration) = 0;
159  virtual void NavReset (Time duration) = 0;
160  virtual void AckTimeoutStart (Time duration) = 0;
161  virtual void AckTimeoutReset () = 0;
162  virtual void CtsTimeoutStart (Time duration) = 0;
163  virtual void CtsTimeoutReset () = 0;
164 };
165 
171 {
172 public:
174  virtual ~MacLowBlockAckEventListener ();
184  virtual void BlockAckInactivityTimeout (Mac48Address originator, uint8_t tid) = 0;
185 };
186 
196 {
197 public:
199 
205  void EnableAck (void);
219  void EnableFastAck (void);
226  void EnableSuperFastAck (void);
230  void EnableBasicBlockAck (void);
234  void EnableCompressedBlockAck (void);
238  void EnableMultiTidBlockAck (void);
245  void EnableRts (void);
255  void EnableNextData (uint32_t size);
256 
264  void EnableOverrideDurationId (Time durationId);
265 
270  void DisableAck (void);
274  void DisableRts (void);
278  void DisableNextData (void);
284  void DisableOverrideDurationId (void);
285 
293  bool MustWaitAck (void) const;
300  bool MustWaitNormalAck (void) const;
307  bool MustWaitFastAck (void) const;
314  bool MustWaitSuperFastAck (void) const;
320  bool MustWaitBasicBlockAck (void) const;
326  bool MustWaitCompressedBlockAck (void) const;
332  bool MustWaitMultiTidBlockAck (void) const;
337  bool MustSendRts (void) const;
342  bool HasDurationId (void) const;
346  Time GetDurationId (void) const;
350  bool HasNextPacket (void) const;
354  uint32_t GetNextPacketSize (void) const;
355 
356 private:
357  friend std::ostream &operator << (std::ostream &os, const MacLowTransmissionParameters &params);
358  uint32_t m_nextSize;
359  enum
360  {
368  } m_waitAck;
369  bool m_sendRts;
371 };
372 
373 std::ostream &operator << (std::ostream &os, const MacLowTransmissionParameters &params);
374 
375 
380 class MacLow : public Object
381 {
382 public:
384 
385  MacLow ();
386  virtual ~MacLow ();
387 
388  void SetPhy (Ptr<WifiPhy> phy);
390 
391  void SetAddress (Mac48Address ad);
392  void SetAckTimeout (Time ackTimeout);
393  void SetBasicBlockAckTimeout (Time blockAckTimeout);
394  void SetCompressedBlockAckTimeout (Time blockAckTimeout);
395  void SetCtsToSelfSupported (bool enable);
396  void SetCtsTimeout (Time ctsTimeout);
397  void SetSifs (Time sifs);
398  void SetRifs (Time rifs);
399  void SetSlotTime (Time slotTime);
400  void SetPifs (Time pifs);
401  void SetBssid (Mac48Address ad);
402  void SetPromisc (void);
403  bool GetCtsToSelfSupported () const;
404  Mac48Address GetAddress (void) const;
405  Time GetAckTimeout (void) const;
406  Time GetBasicBlockAckTimeout () const;
408  Time GetCtsTimeout (void) const;
409  Time GetSifs (void) const;
410  Time GetSlotTime (void) const;
411  Time GetPifs (void) const;
412  Time GetRifs (void) const;
413  Mac48Address GetBssid (void) const;
414 
421  void SetRxCallback (Callback<void,Ptr<Packet>,const WifiMacHeader *> callback);
426  void RegisterDcfListener (MacLowDcfListener *listener);
427 
437  const WifiMacHeader* hdr,
438  const MacLowTransmissionParameters& parameters) const;
439 
450  const WifiMacHeader* hdr,
451  MacLowTransmissionParameters parameters,
452  MacLowTransmissionListener *listener);
453 
463  void ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble);
471  void ReceiveError (Ptr<const Packet> packet, double rxSnr);
479  void NotifySwitchingStartNow (Time duration);
495  void CreateBlockAckAgreement (const MgtAddBaResponseHeader *respHdr,
496  Mac48Address originator,
497  uint16_t startingSeq);
506  void DestroyBlockAckAgreement (Mac48Address originator, uint8_t tid);
515 private:
516  void CancelAllEvents (void);
517  uint32_t GetAckSize (void) const;
518  uint32_t GetBlockAckSize (enum BlockAckType type) const;
519  uint32_t GetRtsSize (void) const;
520  uint32_t GetCtsSize (void) const;
521  uint32_t GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
522  void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
523  WifiTxVector txVector, WifiPreamble preamble);
524  WifiTxVector GetRtsTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
525  WifiTxVector GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
526  WifiTxVector GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const;
527  WifiTxVector GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
528  WifiTxVector GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
529 
531 
534 
535  Time GetCtsDuration (WifiTxVector ctsTxVector) const;
536  Time GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const;
537  Time GetAckDuration (WifiTxVector ackTxVector) const;
538  Time GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const;
539  Time GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const;
540 
541  bool NeedCtsToSelf (void);
542 
544  const WifiMacHeader* hdr,
545  const MacLowTransmissionParameters &params) const;
546  void NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble);
547  void DoNavResetNow (Time duration);
548  bool DoNavStartNow (Time duration);
549  bool IsNavZero (void) const;
550  void NotifyAckTimeoutStartNow (Time duration);
551  void NotifyAckTimeoutResetNow ();
552  void NotifyCtsTimeoutStartNow (Time duration);
553  void NotifyCtsTimeoutResetNow ();
554 
555  void NavCounterResetCtsMissed (Time rtsEndRxTime);
556  void NormalAckTimeout (void);
557  void FastAckTimeout (void);
558  void SuperFastAckTimeout (void);
559  void FastAckFailedTimeout (void);
560  void BlockAckTimeout (void);
561  void CtsTimeout (void);
562  void SendCtsToSelf (void);
563  void SendCtsAfterRts (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
564  void SendAckAfterData (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
565  void SendDataAfterCts (Mac48Address source, Time duration, WifiMode txMode);
566  void WaitSifsAfterEndTx (void);
567  void EndTxNoAck (void);
568 
569  void SendRtsForPacket (void);
570  void SendDataPacket (void);
571  void StartDataTxTimers (WifiTxVector dataTxVector);
572  virtual void DoDispose (void);
581  void RxCompleteBufferedPacketsWithSmallerSequence (uint16_t seq, Mac48Address originator, uint8_t tid);
594  void RxCompleteBufferedPacketsUntilFirstLost (Mac48Address originator, uint8_t tid);
595  /*
596  * This method checks if exists a valid established block ack agreement.
597  * If there is, store the packet without pass it up to WifiMac. The packet is buffered
598  * in order of increasing sequence control field. All comparison are performed
599  * circularly modulo 2^12.
600  */
601  bool StoreMpduIfNeeded (Ptr<Packet> packet, WifiMacHeader hdr);
602  /*
603  * Invoked after that a block ack request has been received. Looks for corresponding
604  * block ack agreement and creates block ack bitmap on a received packets basis.
605  */
607  Time duration, WifiMode blockAckReqTxMode);
608  /*
609  * This method creates block ack frame with header equals to <i>blockAck</i> and start its transmission.
610  */
611  void SendBlockAckResponse (const CtrlBAckResponseHeader* blockAck, Mac48Address originator, bool immediate,
612  Time duration, WifiMode blockAckReqTxMode);
613  /*
614  * Every time that a block ack request or a packet with ack policy equals to <i>block ack</i>
615  * are received, if a relative block ack agreement exists and the value of inactivity timeout
616  * is not 0, the timer is reset.
617  * see section 11.5.3 in IEEE802.11e for more details.
618  */
620 
622 
626  typedef std::vector<MacLowDcfListener *>::const_iterator DcfListenersCI;
627  typedef std::vector<MacLowDcfListener *> DcfListeners;
629 
643 
658 
661 
662  bool m_promisc;
663 
664  // Listerner needed to monitor when a channel switching occurs.
666 
667  /*
668  * BlockAck data structures.
669  */
670  typedef std::pair<Ptr<Packet>, WifiMacHeader> BufferedPacket;
671  typedef std::list<BufferedPacket>::iterator BufferedPacketI;
672 
673  typedef std::pair<Mac48Address, uint8_t> AgreementKey;
674  typedef std::pair<BlockAckAgreement, std::list<BufferedPacket> > AgreementValue;
675 
676  typedef std::map<AgreementKey, AgreementValue> Agreements;
677  typedef std::map<AgreementKey, AgreementValue>::iterator AgreementsI;
678 
679  typedef std::map<AgreementKey, BlockAckCache> BlockAckCaches;
680  typedef std::map<AgreementKey, BlockAckCache>::iterator BlockAckCachesI;
681 
684 
685  typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
688 };
689 
690 } // namespace ns3
691 
692 #endif /* MAC_LOW_H */
bool MustSendRts(void) const
Definition: mac-low.cc:183
Time GetPifs(void) const
Definition: mac-low.cc:533
uint32_t GetAckSize(void) const
Definition: mac-low.cc:901
virtual ~MacLowDcfListener()
Definition: mac-low.cc:64
void SetPifs(Time pifs)
Definition: mac-low.cc:473
Time m_ctsTimeout
Definition: mac-low.h:653
keep track of time values and allow control of global simulation resolution
Definition: nstime.h:81
EventId m_navCounterResetCtsMissed
Definition: mac-low.h:641
void ResetBlockAckInactivityTimerIfNeeded(BlockAckAgreement &agreement)
Definition: mac-low.cc:2040
virtual void CtsTimeoutReset()=0
EventId m_blockAckTimeoutEvent
Definition: mac-low.h:634
Time GetBlockAckDuration(Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const
Definition: mac-low.cc:952
Callback template class.
Definition: callback.h:920
virtual ~MacLowTransmissionListener()
Definition: mac-low.cc:49
Time GetAckDuration(WifiTxVector ackTxVector) const
Definition: mac-low.cc:942
enum ns3::MacLowTransmissionParameters::@87 m_waitAck
virtual void GotAck(double snr, WifiMode txMode)=0
void SetPromisc(void)
Definition: mac-low.cc:488
EventId m_waitSifsEvent
Definition: mac-low.h:639
void SendDataAfterCts(Mac48Address source, Time duration, WifiMode txMode)
Definition: mac-low.cc:1639
void DoNavResetNow(Time duration)
Definition: mac-low.cc:1169
EventId m_fastAckTimeoutEvent
Definition: mac-low.h:631
Time m_pifs
Definition: mac-low.h:656
void FastAckFailedTimeout(void)
Definition: mac-low.cc:1693
bool DoNavStartNow(Time duration)
Definition: mac-low.cc:1179
Mac48Address GetBssid(void) const
Definition: mac-low.cc:538
void SetSifs(Time sifs)
Definition: mac-low.cc:463
virtual void MissedAck(void)=0
std::pair< Mac48Address, uint8_t > AgreementKey
Definition: mac-low.h:673
WifiTxVector GetCtsToSelfTxVector(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Definition: mac-low.cc:1001
void SetupPhyMacLowListener(Ptr< WifiPhy > phy)
Definition: mac-low.cc:312
virtual void BlockAckInactivityTimeout(Mac48Address originator, uint8_t tid)=0
friend std::ostream & operator<<(std::ostream &os, const MacLowTransmissionParameters &params)
Definition: mac-low.cc:210
bool HasDurationId(void) const
Definition: mac-low.cc:188
DcfListeners m_dcfListeners
Definition: mac-low.h:628
virtual void CtsTimeoutStart(Time duration)=0
void SetRxCallback(Callback< void, Ptr< Packet >, const WifiMacHeader * > callback)
Definition: mac-low.cc:544
Time GetCompressedBlockAckTimeout() const
Definition: mac-low.cc:508
Mac48Address m_bssid
Definition: mac-low.h:649
BlockAckType
Definition: ctrl-headers.h:27
EventId m_sendCtsEvent
Definition: mac-low.h:636
MacLowRxCallback m_rxCallback
Definition: mac-low.h:625
Time GetCtsTimeout(void) const
Definition: mac-low.cc:513
EventId m_superFastAckTimeoutEvent
Definition: mac-low.h:632
EventId m_sendAckEvent
Definition: mac-low.h:637
listen to events coming from ns3::MacLow.
Definition: mac-low.h:56
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:91
Time GetCtsDuration(WifiTxVector ctsTxVector) const
Definition: mac-low.cc:977
bool MustWaitFastAck(void) const
Definition: mac-low.cc:158
control how a packet is transmitted.The ns3::MacLow::StartTransmission method expects an instance of ...
Definition: mac-low.h:195
void WaitSifsAfterEndTx(void)
Definition: mac-low.cc:1679
std::vector< MacLowDcfListener * >::const_iterator DcfListenersCI
Definition: mac-low.h:626
void SetCtsToSelfSupported(bool enable)
Definition: mac-low.cc:448
void NormalAckTimeout(void)
Definition: mac-low.cc:1257
void SetBasicBlockAckTimeout(Time blockAckTimeout)
Definition: mac-low.cc:438
BlockAckCaches m_bAckCaches
Definition: mac-low.h:683
WifiPreamble
Definition: wifi-preamble.h:29
void DestroyBlockAckAgreement(Mac48Address originator, uint8_t tid)
Definition: mac-low.cc:1814
Time m_lastNavDuration
Definition: mac-low.h:660
std::pair< Ptr< Packet >, WifiMacHeader > BufferedPacket
Definition: mac-low.h:670
bool m_ctsToSelfSupported
Definition: mac-low.h:687
void SendCtsToSelf(void)
Definition: mac-low.cc:1518
void CreateBlockAckAgreement(const MgtAddBaResponseHeader *respHdr, Mac48Address originator, uint16_t startingSeq)
Definition: mac-low.cc:1772
uint32_t GetBlockAckSize(enum BlockAckType type) const
Definition: mac-low.cc:908
void CtsTimeout(void)
Definition: mac-low.cc:1243
virtual void StartNext(void)=0
void EndTxNoAck(void)
Definition: mac-low.cc:1685
std::map< AgreementKey, BlockAckCache >::iterator BlockAckCachesI
Definition: mac-low.h:680
std::map< AcIndex, MacLowBlockAckEventListener * > QueueListeners
Definition: mac-low.h:685
std::vector< MacLowDcfListener * > DcfListeners
Definition: mac-low.h:627
virtual void EndTxNoAck(void)=0
WifiTxVector GetAckTxVector(Mac48Address to, WifiMode dataTxMode) const
Definition: mac-low.cc:1027
void SetAckTimeout(Time ackTimeout)
Definition: mac-low.cc:433
virtual void GotCts(double snr, WifiMode txMode)=0
void SendBlockAckResponse(const CtrlBAckResponseHeader *blockAck, Mac48Address originator, bool immediate, Time duration, WifiMode blockAckReqTxMode)
Definition: mac-low.cc:1922
Time GetRifs(void) const
Definition: mac-low.cc:523
void NavCounterResetCtsMissed(Time rtsEndRxTime)
Definition: mac-low.cc:1160
Ptr< WifiRemoteStationManager > m_stationManager
Definition: mac-low.h:624
bool MustWaitMultiTidBlockAck(void) const
Definition: mac-low.cc:178
Headers for Block ack response.
Definition: ctrl-headers.h:102
Mac48Address GetAddress(void) const
Definition: mac-low.cc:493
uint32_t GetNextPacketSize(void) const
Definition: mac-low.cc:204
Agreements m_bAckAgreements
Definition: mac-low.h:682
bool HasNextPacket(void) const
Definition: mac-low.cc:199
WifiTxVector GetAckTxVectorForData(Mac48Address to, WifiMode dataTxMode) const
Definition: mac-low.cc:1043
void RegisterDcfListener(MacLowDcfListener *listener)
Definition: mac-low.cc:549
void NotifySwitchingStartNow(Time duration)
Definition: mac-low.cc:627
Time m_slotTime
Definition: mac-low.h:655
bool m_promisc
Definition: mac-low.h:662
void CancelAllEvents(void)
Definition: mac-low.cc:342
void StartTransmission(Ptr< const Packet > packet, const WifiMacHeader *hdr, MacLowTransmissionParameters parameters, MacLowTransmissionListener *listener)
Definition: mac-low.cc:556
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:43
std::list< BufferedPacket >::iterator BufferedPacketI
Definition: mac-low.h:671
void BlockAckTimeout(void)
Definition: mac-low.cc:1287
void NotifyCtsTimeoutStartNow(Time duration)
Definition: mac-low.cc:1212
void SendBlockAckAfterBlockAckRequest(const CtrlBAckRequestHeader reqHdr, Mac48Address originator, Time duration, WifiMode blockAckReqTxMode)
Definition: mac-low.cc:1992
std::map< AgreementKey, BlockAckCache > BlockAckCaches
Definition: mac-low.h:679
virtual void NavStart(Time duration)=0
void SuperFastAckTimeout(void)
Definition: mac-low.cc:1298
void SetBssid(Mac48Address ad)
Definition: mac-low.cc:483
listen for block ack events.
Definition: mac-low.h:170
uint32_t GetRtsSize(void) const
Definition: mac-low.cc:929
Time CalculateTransmissionTime(Ptr< const Packet > packet, const WifiMacHeader *hdr, const MacLowTransmissionParameters &parameters) const
Definition: mac-low.cc:1095
EventId m_normalAckTimeoutEvent
Definition: mac-low.h:630
void StartDataTxTimers(WifiTxVector dataTxVector)
Definition: mac-low.cc:1374
void NotifyCtsTimeoutResetNow()
Definition: mac-low.cc:1220
bool MustWaitBasicBlockAck(void) const
Definition: mac-low.cc:168
bool MustWaitCompressedBlockAck(void) const
Definition: mac-low.cc:173
bool NeedCtsToSelf(void)
Definition: mac-low.cc:607
an EUI-48 address
Definition: mac48-address.h:41
virtual ~MacLowBlockAckEventListener()
Definition: mac-low.cc:71
virtual void Cancel(void)=0
Callback< void, Ptr< Packet >, const WifiMacHeader * > MacLowRxCallback
Definition: mac-low.h:383
Time m_ackTimeout
Definition: mac-low.h:650
virtual void AckTimeoutStart(Time duration)=0
listen to NAV eventsThis class is typically connected to an instance of ns3::Dcf and calls to its met...
Definition: mac-low.h:147
void FastAckTimeout(void)
Definition: mac-low.cc:1270
EventId m_ctsTimeoutEvent
Definition: mac-low.h:635
void RxCompleteBufferedPacketsWithSmallerSequence(uint16_t seq, Mac48Address originator, uint8_t tid)
Definition: mac-low.cc:1830
void SetPhy(Ptr< WifiPhy > phy)
Definition: mac-low.cc:414
Time m_basicBlockAckTimeout
Definition: mac-low.h:651
Time GetDurationId(void) const
Definition: mac-low.cc:193
virtual void MissedBlockAck(void)
Definition: mac-low.cc:58
Time m_sifs
Definition: mac-low.h:654
void ReceiveError(Ptr< const Packet > packet, double rxSnr)
Definition: mac-low.cc:613
Time GetSlotTime(void) const
Definition: mac-low.cc:528
Time m_lastNavStart
Definition: mac-low.h:659
WifiTxVector GetRtsTxVector(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Definition: mac-low.cc:1007
std::map< AgreementKey, AgreementValue > Agreements
Definition: mac-low.h:676
WifiTxVector GetDataTxVector(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Definition: mac-low.cc:1013
handle RTS/CTS/DATA/ACK transactions.
Definition: mac-low.h:380
virtual void MissedCts(void)=0
EventId m_sendDataEvent
Definition: mac-low.h:638
MacLowTransmissionParameters m_txParams
Definition: mac-low.h:646
void SetRifs(Time rifs)
Definition: mac-low.cc:478
virtual void DoDispose(void)
Definition: mac-low.cc:320
void NotifyAckTimeoutResetNow()
Definition: mac-low.cc:1204
bool MustWaitSuperFastAck(void) const
Definition: mac-low.cc:163
Time CalculateOverallTxTime(Ptr< const Packet > packet, const WifiMacHeader *hdr, const MacLowTransmissionParameters &params) const
Definition: mac-low.cc:1050
QueueListeners m_edcaListeners
Definition: mac-low.h:686
WifiTxVector GetBlockAckTxVector(Mac48Address to, WifiMode dataTxMode) const
Definition: mac-low.cc:1032
Mac48Address m_self
Definition: mac-low.h:648
Maintains information for a block ack agreement.
an identifier for simulation events.
Definition: event-id.h:46
EventId m_fastAckFailedTimeoutEvent
Definition: mac-low.h:633
bool IsNavZero(void) const
Definition: mac-low.cc:1506
void NotifyAckTimeoutStartNow(Time duration)
Definition: mac-low.cc:1196
virtual void NavReset(Time duration)=0
void SetSlotTime(Time slotTime)
Definition: mac-low.cc:468
Ptr< Packet > m_currentPacket
Definition: mac-low.h:644
Time GetSifs(void) const
Definition: mac-low.cc:518
void SendCtsAfterRts(Mac48Address source, Time duration, WifiMode txMode, double rtsSnr)
Definition: mac-low.cc:1602
std::map< AgreementKey, AgreementValue >::iterator AgreementsI
Definition: mac-low.h:677
EventId m_endTxNoAckEvent
Definition: mac-low.h:640
virtual void GotBlockAck(const CtrlBAckResponseHeader *blockAck, Mac48Address source)
Definition: mac-low.cc:53
void EnableOverrideDurationId(Time durationId)
Definition: mac-low.cc:93
bool GetCtsToSelfSupported() const
Definition: mac-low.cc:453
void SetCtsTimeout(Time ctsTimeout)
Definition: mac-low.cc:458
void EnableNextData(uint32_t size)
Definition: mac-low.cc:83
Time GetAckTimeout(void) const
Definition: mac-low.cc:498
EventId m_waitRifsEvent
Definition: mac-low.h:642
void SendDataPacket(void)
Definition: mac-low.cc:1444
uint32_t GetCtsSize(void) const
Definition: mac-low.cc:987
WifiMacHeader m_currentHdr
Definition: mac-low.h:645
void SetAddress(Mac48Address ad)
Definition: mac-low.cc:428
a base class which provides memory management and object aggregation
Definition: object.h:63
void ForwardDown(Ptr< const Packet > packet, const WifiMacHeader *hdr, WifiTxVector txVector, WifiPreamble preamble)
Definition: mac-low.cc:1229
void ReceiveOk(Ptr< Packet > packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
Definition: mac-low.cc:643
Time m_compressedBlockAckTimeout
Definition: mac-low.h:652
bool MustWaitAck(void) const
Definition: mac-low.cc:148
Headers for Block ack request.
Definition: ctrl-headers.h:46
virtual void AckTimeoutReset()=0
void RegisterBlockAckListenerForAc(enum AcIndex ac, MacLowBlockAckEventListener *listener)
Definition: mac-low.cc:2061
std::pair< BlockAckAgreement, std::list< BufferedPacket > > AgreementValue
Definition: mac-low.h:674
WifiTxVector GetCtsTxVectorForRts(Mac48Address to, WifiMode rtsTxMode) const
Definition: mac-low.cc:1038
Time GetBasicBlockAckTimeout() const
Definition: mac-low.cc:503
void NotifyNav(Ptr< const Packet > packet, const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble)
Definition: mac-low.cc:1118
Time m_rifs
Definition: mac-low.h:657
void SendAckAfterData(Mac48Address source, Time duration, WifiMode txMode, double rtsSnr)
Definition: mac-low.cc:1703
AcIndex
Definition: qos-utils.h:35
WifiTxVector GetCtsTxVector(Mac48Address to, WifiMode rtsTxMode) const
Definition: mac-low.cc:1022
bool StoreMpduIfNeeded(Ptr< Packet > packet, WifiMacHeader hdr)
Definition: mac-low.cc:1741
bool MustWaitNormalAck(void) const
Definition: mac-low.cc:153
virtual ~MacLow()
Definition: mac-low.cc:306
Ptr< WifiPhy > m_phy
Definition: mac-low.h:623
void SetCompressedBlockAckTimeout(Time blockAckTimeout)
Definition: mac-low.cc:443
void SetWifiRemoteStationManager(Ptr< WifiRemoteStationManager > manager)
Definition: mac-low.cc:422
class PhyMacLowListener * m_phyMacLowListener
Definition: mac-low.h:665
uint32_t GetSize(Ptr< const Packet > packet, const WifiMacHeader *hdr) const
Definition: mac-low.cc:994
MacLowTransmissionListener * m_listener
Definition: mac-low.h:647
void SendRtsForPacket(void)
Definition: mac-low.cc:1317
void RxCompleteBufferedPacketsUntilFirstLost(Mac48Address originator, uint8_t tid)
Definition: mac-low.cc:1890