00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MAC_HIGH_NQAP_H
00021 #define MAC_HIGH_NQAP_H
00022
00023 #include <stdint.h>
00024 #include "ns3/mac48-address.h"
00025 #include "ns3/callback.h"
00026 #include "ns3/packet.h"
00027 #include "ns3/nstime.h"
00028 #include "supported-rates.h"
00029 #include "wifi-remote-station-manager.h"
00030 #include "wifi-mac.h"
00031
00032 namespace ns3 {
00033
00034 class WifiMacHeader;
00035 class DcaTxop;
00036 class WifiPhy;
00037 class DcfManager;
00038 class MacRxMiddle;
00039 class MacLow;
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 class NqapWifiMac : public WifiMac
00054 {
00055 public:
00056 static TypeId GetTypeId (void);
00057
00058 NqapWifiMac ();
00059 ~NqapWifiMac ();
00060
00061
00062 virtual void SetSlot (Time slotTime);
00063 virtual void SetSifs (Time sifs);
00064 virtual void SetEifsNoDifs (Time eifsNoDifs);
00065 virtual void SetAckTimeout (Time ackTimeout);
00066 virtual void SetCtsTimeout (Time ctsTimeout);
00067 virtual void SetPifs (Time pifs);
00068 virtual Time GetSlot (void) const;
00069 virtual Time GetSifs (void) const;
00070 virtual Time GetEifsNoDifs (void) const;
00071 virtual Time GetAckTimeout (void) const;
00072 virtual Time GetCtsTimeout (void) const;
00073 virtual Time GetPifs (void) const;
00074 virtual void SetWifiPhy (Ptr<WifiPhy> phy);
00075 virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
00076 virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
00077 virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to);
00078 virtual bool SupportsSendFrom (void) const;
00079 virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> upCallback);
00080 virtual void SetLinkUpCallback (Callback<void> linkUp);
00081 virtual void SetLinkDownCallback (Callback<void> linkDown);
00082 virtual Mac48Address GetAddress (void) const;
00083 virtual Ssid GetSsid (void) const;
00084 virtual void SetAddress (Mac48Address address);
00085 virtual void SetSsid (Ssid ssid);
00086 virtual Mac48Address GetBssid (void) const;
00087
00088
00089
00090
00091 void SetBeaconInterval (Time interval);
00092
00093
00094
00095 Time GetBeaconInterval (void) const;
00096
00097
00098
00099 void StartBeaconing (void);
00100
00101 private:
00102 void Receive (Ptr<Packet> packet, WifiMacHeader const *hdr);
00103 void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
00104 void ForwardDown (Ptr<const Packet> packet, Mac48Address from, Mac48Address to);
00105 void TxOk (WifiMacHeader const &hdr);
00106 void TxFailed (WifiMacHeader const &hdr);
00107 void SendProbeResp (Mac48Address to);
00108 void SendAssocResp (Mac48Address to, bool success);
00109 void SendOneBeacon (void);
00110 SupportedRates GetSupportedRates (void) const;
00111 void SetBeaconGeneration (bool enable);
00112 bool GetBeaconGeneration (void) const;
00113 virtual void DoDispose (void);
00114 NqapWifiMac (const NqapWifiMac & ctor_arg);
00115 NqapWifiMac &operator = (const NqapWifiMac &o);
00116
00117 Ptr<DcaTxop> m_dca;
00118 Ptr<DcaTxop> m_beaconDca;
00119 Ptr<WifiRemoteStationManager> m_stationManager;
00120 Ptr<WifiPhy> m_phy;
00121 Callback<void, Ptr<Packet>,Mac48Address, Mac48Address> m_upCallback;
00122 Time m_beaconInterval;
00123
00124 DcfManager *m_dcfManager;
00125 MacRxMiddle *m_rxMiddle;
00126 Ptr<MacLow> m_low;
00127 Ssid m_ssid;
00128 EventId m_beaconEvent;
00129 Time m_eifsNoDifs;
00130 };
00131
00132 }
00133
00134
00135 #endif