--- 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;