src/devices/wifi/wifi-mac-header.cc
changeset 4692 f4cd995f1718
parent 4414 44706d4a3c5e
child 4737 5e4fb3918879
child 5133 1e44b8fa74cd
--- a/src/devices/wifi/wifi-mac-header.cc	Thu Jul 16 15:57:19 2009 +0400
+++ b/src/devices/wifi/wifi-mac-header.cc	Thu Jul 16 16:55:20 2009 +0400
@@ -128,6 +128,18 @@
   m_ctrlType = TYPE_DATA;
   m_ctrlSubtype = 0;
 }
+void
+WifiMacHeader::SetAction (void)
+{
+ m_ctrlType = TYPE_MGT;
+ m_ctrlSubtype = 0x0D;
+}
+void
+WifiMacHeader::SetMultihopAction (void)
+{
+ m_ctrlType = TYPE_MGT;
+ m_ctrlSubtype = 0x0F;
+}
 void 
 WifiMacHeader::SetType (enum WifiMacType type)
 {
@@ -191,6 +203,15 @@
   case WIFI_MAC_MGT_DEAUTHENTICATION:
     m_ctrlType = TYPE_MGT;
     m_ctrlSubtype = 12;
+  case WIFI_MAC_MGT_ACTION:
+    m_ctrlType = TYPE_MGT;
+    m_ctrlSubtype = 13;
+  case WIFI_MAC_MGT_ACTION_NO_ACK:
+    m_ctrlType = TYPE_MGT;
+    m_ctrlSubtype = 14;
+  case WIFI_MAC_MGT_MULTIHOP_ACTION:
+    m_ctrlType = TYPE_MGT;
+    m_ctrlSubtype = 15;
     break;
 
   case WIFI_MAC_DATA:
@@ -397,6 +418,15 @@
     case 12:
       return WIFI_MAC_MGT_DEAUTHENTICATION;
       break;
+    case 13:
+      return WIFI_MAC_MGT_ACTION;
+      break;
+    case 14:
+      return WIFI_MAC_MGT_ACTION_NO_ACK;
+      break;
+    case 15:
+      return WIFI_MAC_MGT_MULTIHOP_ACTION;
+      break;
 
     }
     break;
@@ -590,6 +620,16 @@
 {
   return (GetType () == WIFI_MAC_MGT_DEAUTHENTICATION)?true:false;
 }
+bool
+WifiMacHeader::IsAction (void) const
+{
+  return (GetType () == WIFI_MAC_MGT_ACTION)?true:false;
+}
+bool
+WifiMacHeader::IsMultihopAction (void) const
+{
+  return (GetType () == WIFI_MAC_MGT_MULTIHOP_ACTION)?true:false;
+}
 
 
 uint16_t 
@@ -810,6 +850,9 @@
     FOO (MGT_PROBE_RESPONSE);
     FOO (MGT_AUTHENTICATION);
     FOO (MGT_DEAUTHENTICATION);
+    FOO (MGT_ACTION);
+    FOO (MGT_ACTION_NO_ACK);
+    FOO (MGT_MULTIHOP_ACTION);
     
     FOO (DATA);
     FOO (DATA_CFACK);
@@ -895,6 +938,16 @@
          << ", BSSID=" << m_addr3 << ", FragNumber=" << m_seqFrag
          << ", SeqNumber=" << m_seqSeq;
       break;
+    case WIFI_MAC_MGT_ACTION:
+    case WIFI_MAC_MGT_ACTION_NO_ACK:
+      PrintFrameControl (os);
+      os << " Duration/ID=" << m_duration << "us"
+         << "DA=" << m_addr1 << ", SA=" << m_addr2 << ", BSSID=" << m_addr3
+         << ", FragNumber=" << m_seqFrag << ", SeqNumber=" << m_seqSeq;
+    case WIFI_MAC_MGT_MULTIHOP_ACTION:
+      os << " Duration/ID=" << m_duration << "us"
+         << "RA=" << m_addr1 << ", TA=" << m_addr2 << ", DA=" << m_addr3
+         << ", FragNumber=" << m_seqFrag << ", SeqNumber=" << m_seqSeq;
     case WIFI_MAC_DATA:
       PrintFrameControl (os);
       os << " Duration/ID=" << m_duration << "us";
@@ -916,7 +969,7 @@
         }
       else
         {
-          NS_ASSERT (false);
+          NS_FATAL_ERROR ("Impossible ToDs and FromDs flags combination");
         }
       os << ", FragNumber=" << m_seqFrag
          << ", SeqNumber=" << m_seqSeq;