src/devices/wifi/mgt-headers.h
changeset 5949 66f939e7aaec
parent 5824 5abf274b52d4
child 6393 f7e1f9dfa08d
--- a/src/devices/wifi/mgt-headers.h	Wed Feb 03 20:34:48 2010 +0100
+++ b/src/devices/wifi/mgt-headers.h	Wed Feb 03 20:34:48 2010 +0100
@@ -1,6 +1,7 @@
 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2006 INRIA
+ * Copyright (c) 2009 MIRKO BANCHI
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as 
@@ -16,6 +17,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
 #ifndef MGT_HEADERS_H
 #define MGT_HEADERS_H
@@ -134,6 +136,10 @@
 
 class MgtBeaconHeader : public MgtProbeResponseHeader {};
 
+/****************************
+*     Action frames
+*****************************/
+
 /**
  * \brief See IEEE 802.11 chapter 7.3.1.11
  *
@@ -148,6 +154,7 @@
   /* Compatible with open80211s implementation */
   enum CategoryValue //table 7-24 staring from 4
   {
+    BLOCK_ACK = 3,
     MESH_PEERING_MGT = 30,
     MESH_LINK_METRIC = 31,
     MESH_PATH_SELECTION = 32,
@@ -189,6 +196,12 @@
     TBTT_ADJUSTMENT_REQUEST,
     MESH_CHANNEL_SWITCH_ANNOUNCEMENT,
   };
+  enum BlockAckActionValue
+  {
+    BLOCK_ACK_ADDBA_REQUEST = 0,
+    BLOCK_ACK_ADDBA_RESPONSE = 1,
+    BLOCK_ACK_DELBA = 2
+  };
   typedef union
   {
     enum PeerLinkMgtActionValue peerLink;
@@ -196,6 +209,7 @@
     enum PathSelectionActionValue pathSelection;
     enum InterworkActionValue interwork;
     enum ResourceCoordinationActionValue resourceCoordination;
+    enum BlockAckActionValue blockAck;
   } ActionValue;
   void   SetAction (enum CategoryValue type,ActionValue action);
 
@@ -212,6 +226,115 @@
   uint8_t m_actionValue;
 };
 
+class MgtAddBaRequestHeader : public Header {
+public:
+  
+  MgtAddBaRequestHeader ();
+
+  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);
+
+  void SetDelayedBlockAck ();
+  void SetImmediateBlockAck ();
+  void SetTid (uint8_t tid);
+  void SetTimeout (uint16_t timeout);
+  void SetBufferSize (uint16_t size);
+  void SetStartingSequence (uint16_t seq);
+  void SetAmsduSupport (bool supported);
+  
+  uint16_t GetStartingSequence (void) const;
+  uint8_t GetTid (void) const;
+  bool IsImmediateBlockAck (void) const;
+  uint16_t GetTimeout (void) const;
+  uint16_t GetBufferSize (void) const;
+  bool IsAmsduSupported (void) const;
+  
+private:
+  uint16_t GetParameterSet (void) const;
+  void SetParameterSet (uint16_t params);
+  uint16_t GetStartingSequenceControl (void) const;
+  void SetStartingSequenceControl (uint16_t seqControl);
+  
+  uint8_t m_dialogToken; /* Not used for now */
+  uint8_t m_amsduSupport;
+  uint8_t m_policy;
+  uint8_t m_tid;
+  uint16_t m_bufferSize;
+  uint16_t m_timeoutValue;
+  uint16_t m_startingSeq;
+};
+ 
+class MgtAddBaResponseHeader : public Header {
+public:
+
+  MgtAddBaResponseHeader ();
+
+  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);
+
+  void SetDelayedBlockAck ();
+  void SetImmediateBlockAck ();
+  void SetTid (uint8_t tid);
+  void SetTimeout (uint16_t timeout);
+  void SetBufferSize (uint16_t size);
+  void SetStatusCode (StatusCode code);
+  void SetAmsduSupport (bool supported);
+
+  StatusCode GetStatusCode (void) const;
+  uint8_t GetTid (void) const;
+  bool IsImmediateBlockAck (void) const;
+  uint16_t GetTimeout (void) const;
+  uint16_t GetBufferSize (void) const;
+  bool IsAmsduSupported (void) const;
+
+private:
+  uint16_t GetParameterSet (void) const;
+  void SetParameterSet (uint16_t params);
+  
+  uint8_t m_dialogToken; /* Not used for now */
+  StatusCode m_code;
+  uint8_t m_amsduSupport;
+  uint8_t m_policy;
+  uint8_t m_tid;
+  uint16_t m_bufferSize;
+  uint16_t m_timeoutValue;
+};
+
+class MgtDelBaHeader : public Header {
+public:
+  MgtDelBaHeader ();
+
+  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);
+
+  bool IsByOriginator (void) const;
+  uint8_t GetTid (void) const;
+  void SetTid (uint8_t);
+  void SetByOriginator (void);
+  void SetByRecipient (void);
+
+private:
+  uint16_t GetParameterSet (void) const;
+  void SetParameterSet (uint16_t params);
+
+  uint16_t m_initiator;
+  uint16_t m_tid;
+  /* Not used for now.
+     Always set to 1: "Unspecified reason" */
+  uint16_t m_reasonCode;
+};
 
 } // namespace ns3