--- a/src/devices/wifi/wifi-mac-header.h Wed Feb 25 12:27:00 2009 -0500
+++ b/src/devices/wifi/wifi-mac-header.h Sat Feb 28 14:21:05 2009 +0300
@@ -44,6 +44,8 @@
WIFI_MAC_MGT_PROBE_RESPONSE,
WIFI_MAC_MGT_AUTHENTICATION,
WIFI_MAC_MGT_DEAUTHENTICATION,
+//Mesh management frames:
+ WIFI_MAC_MGT_MULTIHOP_ACTION,
WIFI_MAC_DATA,
WIFI_MAC_DATA_CFACK,
@@ -83,6 +85,7 @@
void SetProbeResp (void);
void SetBeacon (void);
void SetTypeData (void);
+ void SetMultihopAction();
void SetDsFrom (void);
void SetDsNotFrom (void);
void SetDsTo (void);
@@ -129,6 +132,7 @@
bool IsDisassociation (void) const;
bool IsAuthentication (void) const;
bool IsDeauthentication (void) const;
+ bool IsMultihopAction(void) const;
uint16_t GetRawDuration (void) const;
Time GetDuration (void) const;
uint16_t GetSequenceControl (void) const;
@@ -176,7 +180,120 @@
uint8_t m_qosAckPolicy;
uint16_t m_qosStuff;
};
+class WifiMeshHeader : public Header //7.1.3.5b
+{
+ public:
+ WifiMeshHeader ();
+ ~WifiMeshHeader ();
+ static TypeId GetTypeId (void);
+ virtual TypeId GetInstanceTypeId (void) const;
+ virtual void Print (std::ostream &os) const;
+ void SetAddr5 (Mac48Address address);
+ void SetAddr6 (Mac48Address address);
+ void SetAddr7 (Mac48Address address);
+ Mac48Address GetAddr5 ();
+ Mac48Address GetAddr6 ();
+ Mac48Address GetAddr7 ();
+
+ void SetMeshSeqno (uint32_t seqno);
+ uint32_t GetMeshSeqno ();
+
+ void SetMeshTtl (uint8_t TTL);
+ uint8_t GetMeshTtl ();
+
+#define MESH_AE_MASK 0xc0
+#define MESH_AE_SHIFT 6
+ void SetAddressExt (uint8_t num_of_addresses);
+ uint8_t GetAddressExt ();
+
+ virtual uint32_t GetSerializedSize (void) const;
+ virtual void Serialize (Buffer::Iterator start) const;
+ virtual uint32_t Deserialize (Buffer::Iterator start);
+ private:
+ uint8_t m_meshFlags;
+ uint8_t m_meshTtl;
+ uint32_t m_meshSeqno;
+ Mac48Address m_addr5;
+ Mac48Address m_addr6;
+ Mac48Address m_addr7;
+};
+class WifiMeshMultihopActionHeader : public Header //7.2.3.14
+{
+ //Multichop action frame consists of Mesh header, Action, and
+ //the last information. Mesh header is present within all data
+ //frames and multihop action frames, so Mesh header is a
+ //separate structure. Each MultihopAction frames (frames like
+ //PREQ, PREP and other) start form Category field and Action
+ //value field, so the Multihop Action Frame should containt
+ //three fields: Category, Action Value;
+ public:
+ WifiMeshMultihopActionHeader ();
+ ~WifiMeshMultihopActionHeader ();
+ enum CategoryValue //table 7-24 staring from 4
+ {
+ MESH_PEER_LINK_MGT =4,
+ MESH_LINK_METRIC,
+ MESH_PATH_SELECTION,
+ MESH_INTERWORK_ACTION,
+ MESH_RESOURCE_COORDINATION,
+ };
+ enum PeerLinkMgtActionValue
+ {
+ PEER_LINK_OPEN = 0,
+ PEER_LINK_CONFIRM,
+ PEER_LINK_CLOSE,
+ };
+ enum LinkMetricActionValue
+ {
+ LINK_METRIC_REQUEST = 0,
+ LINK_METRIC_REPORT,
+ };
+ enum PathSelectionActionValue
+ {
+ PATH_REQUEST = 0,
+ PATH_REPLY,
+ PATH_ERROR,
+ ROOT_ANNOUNCEMENT,
+ };
+ enum InterworkActionValue
+ {
+ PORTAL_ANNOUNCEMENT = 0,
+ };
+ enum ResourceCoordinationActionValue
+ {
+ CONGESTION_CONTROL_NOTIFICATION = 0,
+ MDA_SETUP_REQUEST,
+ MDA_SETUP_REPLY,
+ MDAOP_ADVERTISMENT_REQUEST,
+ MDAOP_ADVERTISMENTS,
+ MDAOP_SET_TEARDOWN,
+ BEACON_TIMING_REQUEST,
+ BEACON_TIMING_RESPONSE,
+ TBTT_ADJASTMENT_REQUEST,
+ MESH_CHANNEL_SWITCH_ANNOUNCEMENT,
+ };
+ typedef union
+ {
+ enum PeerLinkMgtActionValue peerLink;
+ enum LinkMetricActionValue linkMetrtic;
+ enum PathSelectionActionValue pathSelection;
+ enum InterworkActionValue interwork;
+ enum ResourceCoordinationActionValue resourceCoordination;
+ } ACTION_VALUE;
+ void SetAction(enum CategoryValue type,ACTION_VALUE action);
+ enum CategoryValue GetCategory();
+ ACTION_VALUE GetAction();
+ static TypeId GetTypeId (void);
+ virtual TypeId GetInstanceTypeId (void) const;
+ virtual void Print (std::ostream &os) const;
+ virtual uint32_t GetSerializedSize (void) const;
+ virtual void Serialize (Buffer::Iterator start) const;
+ virtual uint32_t Deserialize (Buffer::Iterator start);
+ private:
+ uint8_t m_category;
+ uint8_t m_actionValue;
+};
} // namespace ns3