00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef WIFI_MAC_HEADER_H
00021 #define WIFI_MAC_HEADER_H
00022
00023 #include "ns3/header.h"
00024 #include "ns3/mac48-address.h"
00025 #include "ns3/nstime.h"
00026 #include <stdint.h>
00027
00028 namespace ns3 {
00029
00030 enum WifiMacType_e {
00031 WIFI_MAC_CTL_RTS = 0,
00032 WIFI_MAC_CTL_CTS,
00033 WIFI_MAC_CTL_ACK,
00034 WIFI_MAC_CTL_BACKREQ,
00035 WIFI_MAC_CTL_BACKRESP,
00036
00037 WIFI_MAC_MGT_BEACON,
00038 WIFI_MAC_MGT_ASSOCIATION_REQUEST,
00039 WIFI_MAC_MGT_ASSOCIATION_RESPONSE,
00040 WIFI_MAC_MGT_DISASSOCIATION,
00041 WIFI_MAC_MGT_REASSOCIATION_REQUEST,
00042 WIFI_MAC_MGT_REASSOCIATION_RESPONSE,
00043 WIFI_MAC_MGT_PROBE_REQUEST,
00044 WIFI_MAC_MGT_PROBE_RESPONSE,
00045 WIFI_MAC_MGT_AUTHENTICATION,
00046 WIFI_MAC_MGT_DEAUTHENTICATION,
00047
00048 WIFI_MAC_DATA,
00049 WIFI_MAC_DATA_CFACK,
00050 WIFI_MAC_DATA_CFPOLL,
00051 WIFI_MAC_DATA_CFACK_CFPOLL,
00052 WIFI_MAC_DATA_NULL,
00053 WIFI_MAC_DATA_NULL_CFACK,
00054 WIFI_MAC_DATA_NULL_CFPOLL,
00055 WIFI_MAC_DATA_NULL_CFACK_CFPOLL,
00056 WIFI_MAC_QOSDATA,
00057 WIFI_MAC_QOSDATA_CFACK,
00058 WIFI_MAC_QOSDATA_CFPOLL,
00059 WIFI_MAC_QOSDATA_CFACK_CFPOLL,
00060 WIFI_MAC_QOSDATA_NULL,
00061 WIFI_MAC_QOSDATA_NULL_CFPOLL,
00062 WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL,
00063 };
00064
00065 class WifiMacHeader : public Header
00066 {
00067 public:
00068
00069 WifiMacHeader ();
00070 ~WifiMacHeader ();
00071
00072 static TypeId GetTypeId (void);
00073 virtual TypeId GetInstanceTypeId (void) const;
00074 virtual void Print (std::ostream &os) const;
00075 virtual uint32_t GetSerializedSize (void) const;
00076 virtual void Serialize (Buffer::Iterator start) const;
00077 virtual uint32_t Deserialize (Buffer::Iterator start);
00078
00079
00080 void SetAssocReq (void);
00081 void SetAssocResp (void);
00082 void SetProbeReq (void);
00083 void SetProbeResp (void);
00084 void SetBeacon (void);
00085 void SetTypeData (void);
00086 void SetDsFrom (void);
00087 void SetDsNotFrom (void);
00088 void SetDsTo (void);
00089 void SetDsNotTo (void);
00090 void SetAddr1 (Mac48Address address);
00091 void SetAddr2 (Mac48Address address);
00092 void SetAddr3 (Mac48Address address);
00093 void SetAddr4 (Mac48Address address);
00094 void SetType (enum WifiMacType_e type);
00095 void SetRawDuration (uint16_t duration);
00096 void SetDuration (Time duration);
00097 void SetId (uint16_t id);
00098 void SetSequenceNumber (uint16_t seq);
00099 void SetFragmentNumber (uint8_t frag);
00100 void SetNoMoreFragments (void);
00101 void SetMoreFragments (void);
00102 void SetRetry (void);
00103 void SetNoRetry (void);
00104 void SetQosTid (uint8_t tid);
00105 void SetQosTxopLimit (uint8_t txop);
00106
00107 Mac48Address GetAddr1 (void) const;
00108 Mac48Address GetAddr2 (void) const;
00109 Mac48Address GetAddr3 (void) const;
00110 Mac48Address GetAddr4 (void) const;
00111 enum WifiMacType_e GetType (void) const;
00112 bool IsFromDs (void) const;
00113 bool IsToDs (void) const;
00114 bool IsData (void) const;
00115 bool IsQosData (void) const;
00116 bool IsCtl (void) const;
00117 bool IsMgt (void) const;
00118 bool IsCfpoll (void) const;
00119 bool IsRts (void) const;
00120 bool IsCts (void) const;
00121 bool IsAck (void) const;
00122 bool IsAssocReq (void) const;
00123 bool IsAssocResp (void) const;
00124 bool IsReassocReq (void) const;
00125 bool IsReassocResp (void) const;
00126 bool IsProbeReq (void) const;
00127 bool IsProbeResp (void) const;
00128 bool IsBeacon (void) const;
00129 bool IsDisassociation (void) const;
00130 bool IsAuthentication (void) const;
00131 bool IsDeauthentication (void) const;
00132 uint16_t GetRawDuration (void) const;
00133 Time GetDuration (void) const;
00134 uint16_t GetSequenceControl (void) const;
00135 uint16_t GetSequenceNumber (void) const;
00136 uint16_t GetFragmentNumber (void) const;
00137 bool IsRetry (void) const;
00138 bool IsMoreFragments (void) const;
00139 bool IsQosBlockAck (void) const;
00140 bool IsQosNoAck (void) const;
00141 bool IsQosAck (void) const;
00142 uint8_t GetQosTid (void) const;
00143 uint8_t GetQosTxopLimit (void) const;
00144
00145 uint32_t GetSize (void) const;
00146 char const *GetTypeString (void) const;
00147
00148
00149 private:
00150 uint16_t GetFrameControl (void) const;
00151 uint16_t GetQosControl (void) const;
00152 void SetFrameControl (uint16_t control);
00153 void SetSequenceControl (uint16_t seq);
00154 void SetQosControl (uint16_t qos);
00155 void PrintFrameControl (std::ostream &os) const;
00156
00157 uint8_t m_ctrlType;
00158 uint8_t m_ctrlSubtype;
00159 uint8_t m_ctrlToDs;
00160 uint8_t m_ctrlFromDs;
00161 uint8_t m_ctrlMoreFrag;
00162 uint8_t m_ctrlRetry;
00163 uint8_t m_ctrlPwrMgt;
00164 uint8_t m_ctrlMoreData;
00165 uint8_t m_ctrlWep;
00166 uint8_t m_ctrlOrder;
00167 uint16_t m_duration;
00168 Mac48Address m_addr1;
00169 Mac48Address m_addr2;
00170 Mac48Address m_addr3;
00171 uint8_t m_seqFrag;
00172 uint16_t m_seqSeq;
00173 Mac48Address m_addr4;
00174 uint8_t m_qosTid;
00175 uint8_t m_qosEosp;
00176 uint8_t m_qosAckPolicy;
00177 uint16_t m_qosStuff;
00178 };
00179
00180 }
00181
00182
00183
00184 #endif