src/wifi/model/mac-low.h
changeset 10139 17a71cd49da3
parent 9176 41ab1e874804
child 10202 d32ee5f55fdb
equal deleted inserted replaced
10138:2f8e35b43d11 10139:17a71cd49da3
    39 #include "ns3/event-id.h"
    39 #include "ns3/event-id.h"
    40 #include "ns3/packet.h"
    40 #include "ns3/packet.h"
    41 #include "ns3/nstime.h"
    41 #include "ns3/nstime.h"
    42 #include "qos-utils.h"
    42 #include "qos-utils.h"
    43 #include "block-ack-cache.h"
    43 #include "block-ack-cache.h"
       
    44 #include "wifi-tx-vector.h"
    44 
    45 
    45 namespace ns3 {
    46 namespace ns3 {
    46 
    47 
    47 class WifiPhy;
    48 class WifiPhy;
    48 class WifiMac;
    49 class WifiMac;
   389 
   390 
   390   void SetAddress (Mac48Address ad);
   391   void SetAddress (Mac48Address ad);
   391   void SetAckTimeout (Time ackTimeout);
   392   void SetAckTimeout (Time ackTimeout);
   392   void SetBasicBlockAckTimeout (Time blockAckTimeout);
   393   void SetBasicBlockAckTimeout (Time blockAckTimeout);
   393   void SetCompressedBlockAckTimeout (Time blockAckTimeout);
   394   void SetCompressedBlockAckTimeout (Time blockAckTimeout);
       
   395   void SetCtsToSelfSupported (bool enable);
   394   void SetCtsTimeout (Time ctsTimeout);
   396   void SetCtsTimeout (Time ctsTimeout);
   395   void SetSifs (Time sifs);
   397   void SetSifs (Time sifs);
       
   398   void SetRifs (Time rifs);
   396   void SetSlotTime (Time slotTime);
   399   void SetSlotTime (Time slotTime);
   397   void SetPifs (Time pifs);
   400   void SetPifs (Time pifs);
   398   void SetBssid (Mac48Address ad);
   401   void SetBssid (Mac48Address ad);
   399   void SetPromisc (void);
   402   void SetPromisc (void);
       
   403   bool GetCtsToSelfSupported () const;
   400   Mac48Address GetAddress (void) const;
   404   Mac48Address GetAddress (void) const;
   401   Time GetAckTimeout (void) const;
   405   Time GetAckTimeout (void) const;
   402   Time GetBasicBlockAckTimeout () const;
   406   Time GetBasicBlockAckTimeout () const;
   403   Time GetCompressedBlockAckTimeout () const;
   407   Time GetCompressedBlockAckTimeout () const;
   404   Time GetCtsTimeout (void) const;
   408   Time GetCtsTimeout (void) const;
   405   Time GetSifs (void) const;
   409   Time GetSifs (void) const;
   406   Time GetSlotTime (void) const;
   410   Time GetSlotTime (void) const;
   407   Time GetPifs (void) const;
   411   Time GetPifs (void) const;
       
   412   Time GetRifs (void) const;
   408   Mac48Address GetBssid (void) const;
   413   Mac48Address GetBssid (void) const;
   409 
   414 
   410   /**
   415   /**
   411    * \param callback the callback which receives every incoming packet.
   416    * \param callback the callback which receives every incoming packet.
   412    *
   417    *
   513   uint32_t GetBlockAckSize (enum BlockAckType type) const;
   518   uint32_t GetBlockAckSize (enum BlockAckType type) const;
   514   uint32_t GetRtsSize (void) const;
   519   uint32_t GetRtsSize (void) const;
   515   uint32_t GetCtsSize (void) const;
   520   uint32_t GetCtsSize (void) const;
   516   uint32_t GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
   521   uint32_t GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
   517   Time NowUs (void) const;
   522   Time NowUs (void) const;
   518   void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
   523 void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
   519                     WifiMode txMode);
   524                     WifiTxVector txVector, WifiPreamble preamble);
       
   525   WifiTxVector GetRtsTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
       
   526   WifiTxVector GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
       
   527   WifiTxVector GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const;
       
   528   WifiTxVector GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
       
   529   WifiTxVector GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
       
   530 
       
   531   WifiTxVector GetCtsToSelfTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
       
   532 
       
   533   WifiTxVector GetCtsTxVectorForRts (Mac48Address to, WifiMode rtsTxMode) const;
       
   534   WifiTxVector GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const;
       
   535 
       
   536   Time GetCtsDuration (WifiTxVector ctsTxVector) const;
       
   537   Time GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const;
       
   538   Time GetAckDuration (WifiTxVector ackTxVector) const;
       
   539   Time GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const;
       
   540   Time GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const;
       
   541 
       
   542   bool NeedCtsToSelf (void);
       
   543   
   520   Time CalculateOverallTxTime (Ptr<const Packet> packet,
   544   Time CalculateOverallTxTime (Ptr<const Packet> packet,
   521                                const WifiMacHeader* hdr,
   545                                const WifiMacHeader* hdr,
   522                                const MacLowTransmissionParameters &params) const;
   546                                const MacLowTransmissionParameters &params) const;
   523   WifiMode GetRtsTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
   547   void NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble);
   524   WifiMode GetDataTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
       
   525   WifiMode GetCtsTxModeForRts (Mac48Address to, WifiMode rtsTxMode) const;
       
   526   WifiMode GetAckTxModeForData (Mac48Address to, WifiMode dataTxMode) const;
       
   527 
       
   528   Time GetCtsDuration (Mac48Address to, WifiMode rtsTxMode) const;
       
   529   Time GetAckDuration (Mac48Address to, WifiMode dataTxMode) const;
       
   530   Time GetBlockAckDuration (Mac48Address to, WifiMode blockAckReqTxMode, enum BlockAckType type) const;
       
   531   void NotifyNav (const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble);
       
   532   void DoNavResetNow (Time duration);
   548   void DoNavResetNow (Time duration);
   533   bool DoNavStartNow (Time duration);
   549   bool DoNavStartNow (Time duration);
   534   bool IsNavZero (void) const;
   550   bool IsNavZero (void) const;
   535   void NotifyAckTimeoutStartNow (Time duration);
   551   void NotifyAckTimeoutStartNow (Time duration);
   536   void NotifyAckTimeoutResetNow ();
   552   void NotifyAckTimeoutResetNow ();
   543   void FastAckTimeout (void);
   559   void FastAckTimeout (void);
   544   void SuperFastAckTimeout (void);
   560   void SuperFastAckTimeout (void);
   545   void FastAckFailedTimeout (void);
   561   void FastAckFailedTimeout (void);
   546   void BlockAckTimeout (void);
   562   void BlockAckTimeout (void);
   547   void CtsTimeout (void);
   563   void CtsTimeout (void);
       
   564   void SendCtsToSelf (void);
   548   void SendCtsAfterRts (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
   565   void SendCtsAfterRts (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
   549   void SendAckAfterData (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
   566   void SendAckAfterData (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
   550   void SendDataAfterCts (Mac48Address source, Time duration, WifiMode txMode);
   567   void SendDataAfterCts (Mac48Address source, Time duration, WifiMode txMode);
   551   void WaitSifsAfterEndTx (void);
   568   void WaitSifsAfterEndTx (void);
   552   void EndTxNoAck (void);
   569   void EndTxNoAck (void);
   553 
   570 
   554   void SendRtsForPacket (void);
   571   void SendRtsForPacket (void);
   555   void SendDataPacket (void);
   572   void SendDataPacket (void);
   556   void SendCurrentTxPacket (void);
   573   void SendCurrentTxPacket (void);
   557   void StartDataTxTimers (void);
   574   void StartDataTxTimers (WifiTxVector dataTxVector);
   558   virtual void DoDispose (void);
   575   virtual void DoDispose (void);
   559   /**
   576   /**
   560    * \param originator Address of peer participating in Block Ack mechanism.
   577    * \param originator Address of peer participating in Block Ack mechanism.
   561    * \param tid TID for which Block Ack was created.
   578    * \param tid TID for which Block Ack was created.
   562    * \param seq Starting sequence
   579    * \param seq Starting sequence
   623   EventId m_sendAckEvent;
   640   EventId m_sendAckEvent;
   624   EventId m_sendDataEvent;
   641   EventId m_sendDataEvent;
   625   EventId m_waitSifsEvent;
   642   EventId m_waitSifsEvent;
   626   EventId m_endTxNoAckEvent;
   643   EventId m_endTxNoAckEvent;
   627   EventId m_navCounterResetCtsMissed;
   644   EventId m_navCounterResetCtsMissed;
       
   645   EventId m_waitRifsEvent;
   628 
   646 
   629   Ptr<Packet> m_currentPacket;
   647   Ptr<Packet> m_currentPacket;
   630   WifiMacHeader m_currentHdr;
   648   WifiMacHeader m_currentHdr;
   631   MacLowTransmissionParameters m_txParams;
   649   MacLowTransmissionParameters m_txParams;
   632   MacLowTransmissionListener *m_listener;
   650   MacLowTransmissionListener *m_listener;
   637   Time m_compressedBlockAckTimeout;
   655   Time m_compressedBlockAckTimeout;
   638   Time m_ctsTimeout;
   656   Time m_ctsTimeout;
   639   Time m_sifs;
   657   Time m_sifs;
   640   Time m_slotTime;
   658   Time m_slotTime;
   641   Time m_pifs;
   659   Time m_pifs;
       
   660   Time m_rifs;
   642 
   661 
   643   Time m_lastNavStart;
   662   Time m_lastNavStart;
   644   Time m_lastNavDuration;
   663   Time m_lastNavDuration;
   645 
   664 
   646   bool m_promisc;
   665   bool m_promisc;
   666   Agreements m_bAckAgreements;
   685   Agreements m_bAckAgreements;
   667   BlockAckCaches m_bAckCaches;
   686   BlockAckCaches m_bAckCaches;
   668 
   687 
   669   typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
   688   typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
   670   QueueListeners m_edcaListeners;
   689   QueueListeners m_edcaListeners;
       
   690   bool m_ctsToSelfSupported;
   671 };
   691 };
   672 
   692 
   673 } // namespace ns3
   693 } // namespace ns3
   674 
   694 
   675 #endif /* MAC_LOW_H */
   695 #endif /* MAC_LOW_H */