src/devices/wifi/qadhoc-wifi-mac.h
changeset 6673 ec22aa763e2d
parent 6672 53d7c5aaa720
child 6674 52f8688d6d01
equal deleted inserted replaced
6672:53d7c5aaa720 6673:ec22aa763e2d
     1 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
       
     2 /*
       
     3  * Copyright (c) 2006, 2009 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 QADHOC_WIFI_MAC_H
       
    23 #define QADHOC_WIFI_MAC_H
       
    24 
       
    25 #include "ns3/mac48-address.h"
       
    26 #include "ns3/callback.h"
       
    27 #include "ns3/packet.h"
       
    28 
       
    29 #include "wifi-mac.h"
       
    30 #include "qos-utils.h"
       
    31 #include "amsdu-subframe-header.h"
       
    32 
       
    33 namespace ns3 {
       
    34 
       
    35 class EdcaTxopN;
       
    36 class WifiMacHeader;
       
    37 class WifiPhy;
       
    38 class DcfManager;
       
    39 class MacLow;
       
    40 class MacRxMiddle;
       
    41 class MgtAddBaRequestHeader;
       
    42 
       
    43 class QadhocWifiMac : public WifiMac
       
    44 {
       
    45 public:
       
    46   static TypeId GetTypeId (void);
       
    47 
       
    48   QadhocWifiMac ();
       
    49   ~QadhocWifiMac ();
       
    50 
       
    51   // all inherited from WifiMac base class.
       
    52   virtual void SetSlot (Time slotTime);
       
    53   virtual void SetSifs (Time sifs);
       
    54   virtual void SetEifsNoDifs (Time eifsNoDifs);
       
    55   virtual void SetAckTimeout (Time ackTimeout);
       
    56   virtual void SetCtsTimeout (Time ctsTimeout);
       
    57   virtual void SetPifs (Time pifs);
       
    58   virtual Time GetSlot (void) const;
       
    59   virtual Time GetSifs (void) const;
       
    60   virtual Time GetEifsNoDifs (void) const;
       
    61   virtual Time GetAckTimeout (void) const;
       
    62   virtual Time GetCtsTimeout (void) const;
       
    63   virtual Time GetPifs (void) const;
       
    64   virtual void SetWifiPhy (Ptr<WifiPhy> phy);
       
    65   virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
       
    66   virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
       
    67   virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to);
       
    68   virtual bool SupportsSendFrom (void) const;
       
    69   virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> upCallback);
       
    70   virtual void SetLinkUpCallback (Callback<void> linkUp);
       
    71   virtual void SetLinkDownCallback (Callback<void> linkDown);
       
    72   virtual Mac48Address GetAddress (void) const;
       
    73   virtual Ssid GetSsid (void) const;
       
    74   virtual void SetAddress (Mac48Address address);
       
    75   virtual void SetSsid (Ssid ssid);
       
    76   virtual Mac48Address GetBssid (void) const;
       
    77   virtual void SetBasicBlockAckTimeout (Time blockAckTimeout);
       
    78   virtual void SetCompressedBlockAckTimeout (Time blockAckTimeout);
       
    79   virtual Time GetBasicBlockAckTimeout (void) const;
       
    80   virtual Time GetCompressedBlockAckTimeout (void) const;
       
    81 
       
    82 
       
    83 private:
       
    84   Callback<void, Ptr<Packet>, Mac48Address, Mac48Address> m_forwardUp;
       
    85   virtual void DoDispose (void);
       
    86   void DoStart ();
       
    87   void Receive (Ptr<Packet> packet, const WifiMacHeader *hdr);
       
    88   void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
       
    89   QadhocWifiMac &operator = (const QadhocWifiMac &);
       
    90   QadhocWifiMac (const QadhocWifiMac &);
       
    91   void SendAddBaResponse (const MgtAddBaRequestHeader *reqHdr, Mac48Address originator);
       
    92   
       
    93   /**
       
    94   * When an A-MSDU is received, is deaggregated by this method and all extracted packets are
       
    95   * forwarded up.
       
    96   */
       
    97   void DeaggregateAmsduAndForward (Ptr<Packet> aggregatedPacket, const WifiMacHeader *hdr);
       
    98 
       
    99   typedef std::map<AcIndex, Ptr<EdcaTxopN> > Queues;
       
   100   typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> > DeaggregatedMsdus;
       
   101   typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator DeaggregatedMsdusCI;
       
   102 
       
   103   virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
       
   104   void SetQueue (enum AcIndex ac);
       
   105   Ptr<EdcaTxopN> GetVOQueue (void) const;
       
   106   Ptr<EdcaTxopN> GetVIQueue (void) const;
       
   107   Ptr<EdcaTxopN> GetBEQueue (void) const;
       
   108   Ptr<EdcaTxopN> GetBKQueue (void) const;
       
   109 
       
   110   Queues m_queues;
       
   111   Ptr<MacLow> m_low;
       
   112   Ptr<WifiPhy> m_phy;
       
   113   Ptr<WifiRemoteStationManager> m_stationManager;
       
   114   MacRxMiddle *m_rxMiddle;
       
   115   MacTxMiddle *m_txMiddle;
       
   116   DcfManager *m_dcfManager;
       
   117   Ssid m_ssid;
       
   118   Time m_eifsNoDifs;
       
   119 };
       
   120 
       
   121 } //namespace ns3
       
   122 
       
   123 #endif /* QADHOC_WIFI_MAC_H */