Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(275)

Unified Diff: src/wifi/model/wifi-mac-header.cc

Issue 333660043: 802.11 PCF implementation
Patch Set: Fix wifi-blockack example in previous patchset Created 5 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/wifi/model/wifi-mac-header.cc
===================================================================
--- a/src/wifi/model/wifi-mac-header.cc
+++ b/src/wifi/model/wifi-mac-header.cc
@@ -44,7 +44,9 @@
SUBTYPE_CTL_BACKRESP = 9,
SUBTYPE_CTL_RTS = 11,
SUBTYPE_CTL_CTS = 12,
- SUBTYPE_CTL_ACK = 13
+ SUBTYPE_CTL_ACK = 13,
+ SUBTYPE_CTL_END = 14,
+ SUBTYPE_CTL_END_ACK = 15
};
WifiMacHeader::WifiMacHeader ()
@@ -108,7 +110,7 @@
}
void
-WifiMacHeader::SetType (WifiMacType type)
+WifiMacHeader::SetType (WifiMacType type, bool resetToDsFromDs)
{
switch (type)
{
@@ -136,6 +138,14 @@
m_ctrlType = TYPE_CTL;
m_ctrlSubtype = SUBTYPE_CTL_ACK;
break;
+ case WIFI_MAC_CTL_END:
+ m_ctrlType = TYPE_CTL;
+ m_ctrlSubtype = SUBTYPE_CTL_END;
+ break;
+ case WIFI_MAC_CTL_END_ACK:
+ m_ctrlType = TYPE_CTL;
+ m_ctrlSubtype = SUBTYPE_CTL_END_ACK;
+ break;
case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
m_ctrlType = TYPE_MGT;
m_ctrlSubtype = 0;
@@ -249,8 +259,17 @@
m_ctrlSubtype = 15;
break;
}
- m_ctrlToDs = 0;
- m_ctrlFromDs = 0;
+ if (resetToDsFromDs)
+ {
+ m_ctrlToDs = 0;
+ m_ctrlFromDs = 0;
+ }
+}
+
+void
+WifiMacHeader::SetRawDuration (uint16_t duration)
+{
+ m_duration = duration;
}
void
@@ -443,6 +462,10 @@
return WIFI_MAC_CTL_CTS;
case SUBTYPE_CTL_ACK:
return WIFI_MAC_CTL_ACK;
+ case SUBTYPE_CTL_END:
+ return WIFI_MAC_CTL_END;
+ case SUBTYPE_CTL_END_ACK:
+ return WIFI_MAC_CTL_END_ACK;
}
break;
case TYPE_DATA:
@@ -524,7 +547,7 @@
}
bool
-WifiMacHeader::IsCfpoll (void) const
+WifiMacHeader::IsCfPoll (void) const
{
switch (GetType ())
{
@@ -543,6 +566,55 @@
}
bool
+WifiMacHeader::IsCfEnd (void) const
+{
+ switch (GetType ())
+ {
+ case WIFI_MAC_CTL_END:
+ case WIFI_MAC_CTL_END_ACK:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool
+WifiMacHeader::IsCfAck (void) const
+{
+ switch (GetType ())
+ {
+ case WIFI_MAC_DATA_CFACK:
+ case WIFI_MAC_DATA_CFACK_CFPOLL:
+ case WIFI_MAC_DATA_NULL_CFACK:
+ case WIFI_MAC_DATA_NULL_CFACK_CFPOLL:
+ case WIFI_MAC_CTL_END_ACK:
+ return true;
+ default:
+ return false;
+ break;
+ }
+}
+
+bool
+WifiMacHeader::HasData (void) const
+{
+ switch (GetType ())
+ {
+ case WIFI_MAC_DATA:
+ case WIFI_MAC_DATA_CFACK:
+ case WIFI_MAC_DATA_CFPOLL:
+ case WIFI_MAC_DATA_CFACK_CFPOLL:
+ case WIFI_MAC_QOSDATA:
+ case WIFI_MAC_QOSDATA_CFACK:
+ case WIFI_MAC_QOSDATA_CFPOLL:
+ case WIFI_MAC_QOSDATA_CFACK_CFPOLL:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool
WifiMacHeader::IsRts (void) const
{
return (GetType () == WIFI_MAC_CTL_RTS);
@@ -644,6 +716,12 @@
return (GetType () == WIFI_MAC_CTL_BACKRESP) ? true : false;
}
+uint16_t
+WifiMacHeader::GetRawDuration (void) const
+{
+ return m_duration;
+}
+
Time
WifiMacHeader::GetDuration (void) const
{
@@ -792,16 +870,16 @@
switch (m_ctrlSubtype)
{
case SUBTYPE_CTL_RTS:
+ case SUBTYPE_CTL_BACKREQ:
+ case SUBTYPE_CTL_BACKRESP:
+ case SUBTYPE_CTL_END:
+ case SUBTYPE_CTL_END_ACK:
size = 2 + 2 + 6 + 6;
break;
case SUBTYPE_CTL_CTS:
case SUBTYPE_CTL_ACK:
size = 2 + 2 + 6;
break;
- case SUBTYPE_CTL_BACKREQ:
- case SUBTYPE_CTL_BACKRESP:
- size = 2 + 2 + 6 + 6;
- break;
case SUBTYPE_CTL_CTLWRAPPER:
size = 2 + 2 + 6 + 2 + 4;
break;
@@ -837,6 +915,8 @@
FOO (CTL_ACK);
FOO (CTL_BACKREQ);
FOO (CTL_BACKRESP);
+ FOO (CTL_END);
+ FOO (CTL_END_ACK);
FOO (MGT_BEACON);
FOO (MGT_ASSOCIATION_REQUEST);
@@ -916,10 +996,6 @@
os << "Duration/ID=" << m_duration << "us"
<< ", RA=" << m_addr1;
break;
- case WIFI_MAC_CTL_BACKREQ:
- case WIFI_MAC_CTL_BACKRESP:
- case WIFI_MAC_CTL_CTLWRAPPER:
- break;
case WIFI_MAC_MGT_BEACON:
case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
case WIFI_MAC_MGT_ASSOCIATION_RESPONSE:
@@ -974,6 +1050,11 @@
os << ", FragNumber=" << std::hex << (int) m_seqFrag << std::dec
<< ", SeqNumber=" << m_seqSeq;
break;
+ case WIFI_MAC_CTL_BACKREQ:
+ case WIFI_MAC_CTL_BACKRESP:
+ case WIFI_MAC_CTL_CTLWRAPPER:
+ case WIFI_MAC_CTL_END:
+ case WIFI_MAC_CTL_END_ACK:
case WIFI_MAC_DATA_CFACK:
case WIFI_MAC_DATA_CFPOLL:
case WIFI_MAC_DATA_CFACK_CFPOLL:
@@ -988,6 +1069,7 @@
case WIFI_MAC_QOSDATA_NULL:
case WIFI_MAC_QOSDATA_NULL_CFPOLL:
case WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL:
+ default:
break;
}
}
@@ -1015,15 +1097,15 @@
switch (m_ctrlSubtype)
{
case SUBTYPE_CTL_RTS:
+ case SUBTYPE_CTL_BACKREQ:
+ case SUBTYPE_CTL_BACKRESP:
+ case SUBTYPE_CTL_END:
+ case SUBTYPE_CTL_END_ACK:
WriteTo (i, m_addr2);
break;
case SUBTYPE_CTL_CTS:
case SUBTYPE_CTL_ACK:
break;
- case SUBTYPE_CTL_BACKREQ:
- case SUBTYPE_CTL_BACKRESP:
- WriteTo (i, m_addr2);
- break;
default:
//NOTREACHED
NS_ASSERT (false);
@@ -1070,15 +1152,15 @@
switch (m_ctrlSubtype)
{
case SUBTYPE_CTL_RTS:
+ case SUBTYPE_CTL_BACKREQ:
+ case SUBTYPE_CTL_BACKRESP:
+ case SUBTYPE_CTL_END:
+ case SUBTYPE_CTL_END_ACK:
ReadFrom (i, m_addr2);
break;
case SUBTYPE_CTL_CTS:
case SUBTYPE_CTL_ACK:
break;
- case SUBTYPE_CTL_BACKREQ:
- case SUBTYPE_CTL_BACKRESP:
- ReadFrom (i, m_addr2);
- break;
}
break;
case TYPE_DATA:

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b