add amsdu field
authorMirko Banchi <mk.banchi@gmail.com>
Fri, 24 Apr 2009 09:07:00 +0200
changeset 4401 427cec7079f3
parent 4400 18ba3459e177
child 4402 f6243535620f
add amsdu field
src/devices/wifi/wifi-mac-header.cc
src/devices/wifi/wifi-mac-header.h
--- a/src/devices/wifi/wifi-mac-header.cc	Fri Apr 24 09:04:39 2009 +0200
+++ b/src/devices/wifi/wifi-mac-header.cc	Fri Apr 24 09:07:00 2009 +0200
@@ -1,6 +1,7 @@
 /* -*-  Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2006 INRIA
+ * Copyright (c) 2006, 2009 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>
  */
 #include "ns3/assert.h"
 #include "ns3/address-utils.h"
@@ -43,7 +45,8 @@
   : m_ctrlPwrMgt (0),
     m_ctrlMoreData (0),
     m_ctrlWep (0),
-    m_ctrlOrder (1)
+    m_ctrlOrder (1),
+    m_amsduPresent (0)
 {}
 WifiMacHeader::~WifiMacHeader ()
 {}
@@ -126,7 +129,7 @@
   m_ctrlSubtype = 0;
 }
 void 
-WifiMacHeader::SetType (enum WifiMacType_e type)
+WifiMacHeader::SetType (enum WifiMacType type)
 {
   switch (type) {
   case WIFI_MAC_CTL_BACKREQ:
@@ -299,6 +302,39 @@
 {
   m_qosTid = tid;
 }
+void WifiMacHeader::SetQosEosp ()
+{
+  m_qosEosp = 1;
+}
+void WifiMacHeader::SetQosNoEosp ()
+{
+  m_qosEosp = 0;
+}
+void WifiMacHeader::SetQosAckPolicy (enum QosAckPolicy policy)
+{
+  switch (policy) {
+  case NORMAL_ACK :
+    m_qosAckPolicy = 0;
+    break;
+  case NO_ACK :
+    m_qosAckPolicy = 2;
+    break;
+  case NO_EXPLICIT_ACK :
+    m_qosAckPolicy = 1;
+    break;
+  case BLOCK_ACK :
+    m_qosAckPolicy = 3;
+    break;
+  }
+}
+void WifiMacHeader::SetQosAmsdu (void)
+{
+  m_amsduPresent = 1;
+}
+void WifiMacHeader::SetQosNoAmsdu (void)
+{
+  m_amsduPresent = 0;
+}
 void WifiMacHeader::SetQosTxopLimit (uint8_t txop)
 {
   m_qosStuff = txop;
@@ -324,7 +360,8 @@
 {
   return m_addr4;
 }
-enum WifiMacType_e 
+
+enum WifiMacType 
 WifiMacHeader::GetType (void) const
 {
   switch (m_ctrlType) {
@@ -435,7 +472,7 @@
   }
   // NOTREACHED
   NS_ASSERT (false);
-  return (enum WifiMacType_e)-1;
+  return (enum WifiMacType)-1;
 }
 bool 
 WifiMacHeader::IsFromDs (void) const
@@ -608,12 +645,46 @@
   NS_ASSERT (IsQosData ());
   return (m_qosAckPolicy == 0)?true:false;
 }
+bool
+WifiMacHeader::IsQosEosp (void) const
+{
+  NS_ASSERT (IsQosData ());
+  return (m_qosEosp == 1)?true:false;
+}
+bool
+WifiMacHeader::IsQosAmsdu (void) const
+{
+  NS_ASSERT (IsQosData ());
+  return (m_amsduPresent == 1)?true:false;
+}
 uint8_t
 WifiMacHeader::GetQosTid (void) const
 {
   NS_ASSERT (IsQosData ());
   return m_qosTid;
 }
+enum WifiMacHeader::QosAckPolicy
+WifiMacHeader::GetQosAckPolicy (void) const
+{
+  switch (m_qosAckPolicy) {
+  case 0 :
+    return NORMAL_ACK;
+    break;
+  case 1 :
+    return NO_ACK;
+    break;
+  case 2 :
+    return NO_EXPLICIT_ACK;
+    break;
+  case 3 :
+    return BLOCK_ACK;
+    break;
+  }
+  // NOTREACHED
+  NS_ASSERT (false);
+  return (enum QosAckPolicy)-1;
+}
+
 uint8_t 
 WifiMacHeader::GetQosTxopLimit (void) const
 {
@@ -644,6 +715,7 @@
   val |= m_qosTid;
   val |= m_qosEosp << 4;
   val |= m_qosAckPolicy << 5;
+  val |= m_amsduPresent << 7;
   val |= m_qosStuff << 8;
   return val;
 }
@@ -673,6 +745,7 @@
   m_qosTid = qos & 0x000f;
   m_qosEosp = (qos >> 4) & 0x0001;
   m_qosAckPolicy = (qos >> 5) & 0x0003;
+  m_amsduPresent = (qos >> 7) & 0x0001;
   m_qosStuff = (qos >> 8) & 0x00ff;
 }
 
@@ -770,6 +843,7 @@
     ;
   return tid;
 }
+
 TypeId 
 WifiMacHeader::GetInstanceTypeId (void) const
 {
--- a/src/devices/wifi/wifi-mac-header.h	Fri Apr 24 09:04:39 2009 +0200
+++ b/src/devices/wifi/wifi-mac-header.h	Fri Apr 24 09:07:00 2009 +0200
@@ -1,6 +1,7 @@
 /* -*-  Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2006 INRIA
+ * Copyright (c) 2006, 2009 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 WIFI_MAC_HEADER_H
 #define WIFI_MAC_HEADER_H
@@ -27,7 +29,7 @@
 
 namespace ns3 {
 
-enum WifiMacType_e {
+enum WifiMacType {
   WIFI_MAC_CTL_RTS = 0,
   WIFI_MAC_CTL_CTS,
   WIFI_MAC_CTL_ACK,
@@ -65,6 +67,19 @@
 class WifiMacHeader : public Header 
 {
 public:
+  enum QosAckPolicy {
+    NORMAL_ACK = 0,
+    NO_ACK = 1,
+    NO_EXPLICIT_ACK = 2,
+    BLOCK_ACK = 3,
+  };
+  
+  enum AddressType {
+    ADDR1,	
+    ADDR2,
+    ADDR3,
+    ADDR4
+  };
 
   WifiMacHeader ();
   ~WifiMacHeader ();
@@ -91,7 +106,7 @@
   void SetAddr2 (Mac48Address address);
   void SetAddr3 (Mac48Address address);
   void SetAddr4 (Mac48Address address);
-  void SetType (enum WifiMacType_e type);
+  void SetType (enum WifiMacType type);
   void SetRawDuration (uint16_t duration);
   void SetDuration (Time duration);
   void SetId (uint16_t id);
@@ -102,13 +117,19 @@
   void SetRetry (void);
   void SetNoRetry (void);
   void SetQosTid (uint8_t tid);
+  void SetQosEosp ();
+  void SetQosNoEosp ();
+  void SetQosAckPolicy (enum QosAckPolicy);
+  void SetQosAmsdu (void);
+  void SetQosNoAmsdu (void);
   void SetQosTxopLimit (uint8_t txop);
+ 
 
   Mac48Address GetAddr1 (void) const;
   Mac48Address GetAddr2 (void) const;
   Mac48Address GetAddr3 (void) const;
   Mac48Address GetAddr4 (void) const;
-  enum WifiMacType_e GetType (void) const;
+  enum WifiMacType GetType (void) const;
   bool IsFromDs (void) const;
   bool IsToDs (void) const;
   bool IsData (void) const;
@@ -139,7 +160,10 @@
   bool IsQosBlockAck (void) const;
   bool IsQosNoAck (void) const;
   bool IsQosAck (void) const;
+  bool IsQosEosp (void) const;
+  bool IsQosAmsdu (void) const;
   uint8_t GetQosTid (void) const;
+  enum QosAckPolicy GetQosAckPolicy (void) const;
   uint8_t GetQosTxopLimit (void) const;
 
   uint32_t GetSize (void) const;
@@ -174,6 +198,7 @@
   uint8_t m_qosTid;
   uint8_t m_qosEosp;
   uint8_t m_qosAckPolicy;
+  uint8_t m_amsduPresent;
   uint16_t m_qosStuff;
 };