22 #include "ns3/assert.h"
23 #include "ns3/address-utils.h"
24 #include "wifi-mac-header.h"
28 NS_OBJECT_ENSURE_REGISTERED (WifiMacHeader);
39 SUBTYPE_CTL_BACKREQ = 8,
40 SUBTYPE_CTL_BACKRESP = 9,
46 WifiMacHeader::WifiMacHeader ()
54 WifiMacHeader::~WifiMacHeader ()
59 WifiMacHeader::SetDsFrom (
void)
64 WifiMacHeader::SetDsNotFrom (
void)
69 WifiMacHeader::SetDsTo (
void)
74 WifiMacHeader::SetDsNotTo (
void)
80 WifiMacHeader::SetAddr1 (Mac48Address address)
85 WifiMacHeader::SetAddr2 (Mac48Address address)
90 WifiMacHeader::SetAddr3 (Mac48Address address)
95 WifiMacHeader::SetAddr4 (Mac48Address address)
100 WifiMacHeader::SetAssocReq (
void)
102 m_ctrlType = TYPE_MGT;
106 WifiMacHeader::SetAssocResp (
void)
108 m_ctrlType = TYPE_MGT;
112 WifiMacHeader::SetProbeReq (
void)
114 m_ctrlType = TYPE_MGT;
118 WifiMacHeader::SetProbeResp (
void)
120 m_ctrlType = TYPE_MGT;
124 WifiMacHeader::SetBeacon (
void)
126 m_ctrlType = TYPE_MGT;
130 WifiMacHeader::SetBlockAckReq (
void)
132 m_ctrlType = TYPE_CTL;
136 WifiMacHeader::SetBlockAck (
void)
138 m_ctrlType = TYPE_CTL;
143 WifiMacHeader::SetTypeData (
void)
145 m_ctrlType = TYPE_DATA;
149 WifiMacHeader::SetAction (
void)
151 m_ctrlType = TYPE_MGT;
152 m_ctrlSubtype = 0x0D;
155 WifiMacHeader::SetMultihopAction (
void)
157 m_ctrlType = TYPE_MGT;
158 m_ctrlSubtype = 0x0F;
161 WifiMacHeader::SetType (
enum WifiMacType type)
165 case WIFI_MAC_CTL_BACKREQ:
166 m_ctrlType = TYPE_CTL;
167 m_ctrlSubtype = SUBTYPE_CTL_BACKREQ;
169 case WIFI_MAC_CTL_BACKRESP:
170 m_ctrlType = TYPE_CTL;
171 m_ctrlSubtype = SUBTYPE_CTL_BACKRESP;
173 case WIFI_MAC_CTL_RTS:
174 m_ctrlType = TYPE_CTL;
175 m_ctrlSubtype = SUBTYPE_CTL_RTS;
177 case WIFI_MAC_CTL_CTS:
178 m_ctrlType = TYPE_CTL;
179 m_ctrlSubtype = SUBTYPE_CTL_CTS;
181 case WIFI_MAC_CTL_ACK:
182 m_ctrlType = TYPE_CTL;
183 m_ctrlSubtype = SUBTYPE_CTL_ACK;
185 case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
186 m_ctrlType = TYPE_MGT;
189 case WIFI_MAC_MGT_ASSOCIATION_RESPONSE:
190 m_ctrlType = TYPE_MGT;
193 case WIFI_MAC_MGT_REASSOCIATION_REQUEST:
194 m_ctrlType = TYPE_MGT;
197 case WIFI_MAC_MGT_REASSOCIATION_RESPONSE:
198 m_ctrlType = TYPE_MGT;
201 case WIFI_MAC_MGT_PROBE_REQUEST:
202 m_ctrlType = TYPE_MGT;
205 case WIFI_MAC_MGT_PROBE_RESPONSE:
206 m_ctrlType = TYPE_MGT;
209 case WIFI_MAC_MGT_BEACON:
210 m_ctrlType = TYPE_MGT;
213 case WIFI_MAC_MGT_DISASSOCIATION:
214 m_ctrlType = TYPE_MGT;
217 case WIFI_MAC_MGT_AUTHENTICATION:
218 m_ctrlType = TYPE_MGT;
221 case WIFI_MAC_MGT_DEAUTHENTICATION:
222 m_ctrlType = TYPE_MGT;
224 case WIFI_MAC_MGT_ACTION:
225 m_ctrlType = TYPE_MGT;
227 case WIFI_MAC_MGT_ACTION_NO_ACK:
228 m_ctrlType = TYPE_MGT;
230 case WIFI_MAC_MGT_MULTIHOP_ACTION:
231 m_ctrlType = TYPE_MGT;
236 m_ctrlType = TYPE_DATA;
239 case WIFI_MAC_DATA_CFACK:
240 m_ctrlType = TYPE_DATA;
243 case WIFI_MAC_DATA_CFPOLL:
244 m_ctrlType = TYPE_DATA;
247 case WIFI_MAC_DATA_CFACK_CFPOLL:
248 m_ctrlType = TYPE_DATA;
251 case WIFI_MAC_DATA_NULL:
252 m_ctrlType = TYPE_DATA;
255 case WIFI_MAC_DATA_NULL_CFACK:
256 m_ctrlType = TYPE_DATA;
259 case WIFI_MAC_DATA_NULL_CFPOLL:
260 m_ctrlType = TYPE_DATA;
263 case WIFI_MAC_DATA_NULL_CFACK_CFPOLL:
264 m_ctrlType = TYPE_DATA;
267 case WIFI_MAC_QOSDATA:
268 m_ctrlType = TYPE_DATA;
271 case WIFI_MAC_QOSDATA_CFACK:
272 m_ctrlType = TYPE_DATA;
275 case WIFI_MAC_QOSDATA_CFPOLL:
276 m_ctrlType = TYPE_DATA;
279 case WIFI_MAC_QOSDATA_CFACK_CFPOLL:
280 m_ctrlType = TYPE_DATA;
283 case WIFI_MAC_QOSDATA_NULL:
284 m_ctrlType = TYPE_DATA;
287 case WIFI_MAC_QOSDATA_NULL_CFPOLL:
288 m_ctrlType = TYPE_DATA;
291 case WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL:
292 m_ctrlType = TYPE_DATA;
300 WifiMacHeader::SetRawDuration (uint16_t duration)
302 m_duration = duration;
305 WifiMacHeader::SetDuration (Time duration)
307 int64_t duration_us = duration.GetMicroSeconds ();
308 NS_ASSERT (duration_us >= 0 && duration_us <= 0x7fff);
309 m_duration =
static_cast<uint16_t
> (duration_us);
312 void WifiMacHeader::SetId (uint16_t
id)
316 void WifiMacHeader::SetSequenceNumber (uint16_t seq)
320 void WifiMacHeader::SetFragmentNumber (uint8_t frag)
324 void WifiMacHeader::SetNoMoreFragments (
void)
328 void WifiMacHeader::SetMoreFragments (
void)
332 void WifiMacHeader::SetRetry (
void)
336 void WifiMacHeader::SetNoRetry (
void)
340 void WifiMacHeader::SetQosTid (uint8_t tid)
344 void WifiMacHeader::SetQosEosp ()
348 void WifiMacHeader::SetQosNoEosp ()
352 void WifiMacHeader::SetQosAckPolicy (
enum QosAckPolicy policy)
362 case NO_EXPLICIT_ACK:
371 WifiMacHeader::SetQosNormalAck ()
376 WifiMacHeader::SetQosBlockAck ()
381 WifiMacHeader::SetQosNoAck ()
385 void WifiMacHeader::SetQosAmsdu (
void)
389 void WifiMacHeader::SetQosNoAmsdu (
void)
393 void WifiMacHeader::SetQosTxopLimit (uint8_t txop)
399 WifiMacHeader::GetAddr1 (
void)
const
404 WifiMacHeader::GetAddr2 (
void)
const
409 WifiMacHeader::GetAddr3 (
void)
const
414 WifiMacHeader::GetAddr4 (
void)
const
420 WifiMacHeader::GetType (
void)
const
425 switch (m_ctrlSubtype)
428 return WIFI_MAC_MGT_ASSOCIATION_REQUEST;
431 return WIFI_MAC_MGT_ASSOCIATION_RESPONSE;
434 return WIFI_MAC_MGT_REASSOCIATION_REQUEST;
437 return WIFI_MAC_MGT_REASSOCIATION_RESPONSE;
440 return WIFI_MAC_MGT_PROBE_REQUEST;
443 return WIFI_MAC_MGT_PROBE_RESPONSE;
446 return WIFI_MAC_MGT_BEACON;
449 return WIFI_MAC_MGT_DISASSOCIATION;
452 return WIFI_MAC_MGT_AUTHENTICATION;
455 return WIFI_MAC_MGT_DEAUTHENTICATION;
458 return WIFI_MAC_MGT_ACTION;
461 return WIFI_MAC_MGT_ACTION_NO_ACK;
464 return WIFI_MAC_MGT_MULTIHOP_ACTION;
470 switch (m_ctrlSubtype)
472 case SUBTYPE_CTL_BACKREQ:
473 return WIFI_MAC_CTL_BACKREQ;
475 case SUBTYPE_CTL_BACKRESP:
476 return WIFI_MAC_CTL_BACKRESP;
478 case SUBTYPE_CTL_RTS:
479 return WIFI_MAC_CTL_RTS;
481 case SUBTYPE_CTL_CTS:
482 return WIFI_MAC_CTL_CTS;
484 case SUBTYPE_CTL_ACK:
485 return WIFI_MAC_CTL_ACK;
490 switch (m_ctrlSubtype)
493 return WIFI_MAC_DATA;
496 return WIFI_MAC_DATA_CFACK;
499 return WIFI_MAC_DATA_CFPOLL;
502 return WIFI_MAC_DATA_CFACK_CFPOLL;
505 return WIFI_MAC_DATA_NULL;
508 return WIFI_MAC_DATA_NULL_CFACK;
511 return WIFI_MAC_DATA_NULL_CFPOLL;
514 return WIFI_MAC_DATA_NULL_CFACK_CFPOLL;
517 return WIFI_MAC_QOSDATA;
520 return WIFI_MAC_QOSDATA_CFACK;
523 return WIFI_MAC_QOSDATA_CFPOLL;
526 return WIFI_MAC_QOSDATA_CFACK_CFPOLL;
529 return WIFI_MAC_QOSDATA_NULL;
532 return WIFI_MAC_QOSDATA_NULL_CFPOLL;
535 return WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL;
543 return (
enum WifiMacType)-1;
546 WifiMacHeader::IsFromDs (
void)
const
548 return m_ctrlFromDs == 1;
551 WifiMacHeader::IsToDs (
void)
const
553 return m_ctrlToDs == 1;
557 WifiMacHeader::IsData (
void)
const
559 return (m_ctrlType == TYPE_DATA);
563 WifiMacHeader::IsQosData (
void)
const
565 return (m_ctrlType == TYPE_DATA && (m_ctrlSubtype & 0x08));
568 WifiMacHeader::IsCtl (
void)
const
570 return (m_ctrlType == TYPE_CTL);
573 WifiMacHeader::IsMgt (
void)
const
575 return (m_ctrlType == TYPE_MGT);
578 WifiMacHeader::IsCfpoll (
void)
const
582 case WIFI_MAC_DATA_CFPOLL:
583 case WIFI_MAC_DATA_CFACK_CFPOLL:
584 case WIFI_MAC_DATA_NULL_CFPOLL:
585 case WIFI_MAC_DATA_NULL_CFACK_CFPOLL:
586 case WIFI_MAC_QOSDATA_CFPOLL:
587 case WIFI_MAC_QOSDATA_CFACK_CFPOLL:
588 case WIFI_MAC_QOSDATA_NULL_CFPOLL:
589 case WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL:
598 WifiMacHeader::IsRts (
void)
const
600 return (GetType () == WIFI_MAC_CTL_RTS);
603 WifiMacHeader::IsCts (
void)
const
605 return (GetType () == WIFI_MAC_CTL_CTS);
608 WifiMacHeader::IsAck (
void)
const
610 return (GetType () == WIFI_MAC_CTL_ACK);
613 WifiMacHeader::IsAssocReq (
void)
const
615 return (GetType () == WIFI_MAC_MGT_ASSOCIATION_REQUEST);
618 WifiMacHeader::IsAssocResp (
void)
const
620 return (GetType () == WIFI_MAC_MGT_ASSOCIATION_RESPONSE);
623 WifiMacHeader::IsReassocReq (
void)
const
625 return (GetType () == WIFI_MAC_MGT_REASSOCIATION_REQUEST);
628 WifiMacHeader::IsReassocResp (
void)
const
630 return (GetType () == WIFI_MAC_MGT_REASSOCIATION_RESPONSE);
633 WifiMacHeader::IsProbeReq (
void)
const
635 return (GetType () == WIFI_MAC_MGT_PROBE_REQUEST);
638 WifiMacHeader::IsProbeResp (
void)
const
640 return (GetType () == WIFI_MAC_MGT_PROBE_RESPONSE);
643 WifiMacHeader::IsBeacon (
void)
const
645 return (GetType () == WIFI_MAC_MGT_BEACON);
648 WifiMacHeader::IsDisassociation (
void)
const
650 return (GetType () == WIFI_MAC_MGT_DISASSOCIATION);
653 WifiMacHeader::IsAuthentication (
void)
const
655 return (GetType () == WIFI_MAC_MGT_AUTHENTICATION);
658 WifiMacHeader::IsDeauthentication (
void)
const
660 return (GetType () == WIFI_MAC_MGT_DEAUTHENTICATION);
663 WifiMacHeader::IsAction (
void)
const
665 return (GetType () == WIFI_MAC_MGT_ACTION);
668 WifiMacHeader::IsMultihopAction (
void)
const
670 return (GetType () == WIFI_MAC_MGT_MULTIHOP_ACTION);
673 WifiMacHeader::IsBlockAckReq (
void)
const
675 return (GetType () == WIFI_MAC_CTL_BACKREQ) ?
true :
false;
678 WifiMacHeader::IsBlockAck (
void)
const
680 return (GetType () == WIFI_MAC_CTL_BACKRESP) ?
true :
false;
685 WifiMacHeader::GetRawDuration (
void)
const
690 WifiMacHeader::GetDuration (
void)
const
695 WifiMacHeader::GetSequenceControl (
void)
const
697 return (m_seqSeq << 4) | m_seqFrag;
700 WifiMacHeader::GetSequenceNumber (
void)
const
705 WifiMacHeader::GetFragmentNumber (
void)
const
710 WifiMacHeader::IsRetry (
void)
const
712 return (m_ctrlRetry == 1);
715 WifiMacHeader::IsMoreFragments (
void)
const
717 return (m_ctrlMoreFrag == 1);
720 WifiMacHeader::IsQosBlockAck (
void)
const
723 return (m_qosAckPolicy == 3);
726 WifiMacHeader::IsQosNoAck (
void)
const
729 return (m_qosAckPolicy == 1);
732 WifiMacHeader::IsQosAck (
void)
const
735 return (m_qosAckPolicy == 0);
738 WifiMacHeader::IsQosEosp (
void)
const
741 return (m_qosEosp == 1);
744 WifiMacHeader::IsQosAmsdu (
void)
const
747 return (m_amsduPresent == 1);
750 WifiMacHeader::GetQosTid (
void)
const
755 enum WifiMacHeader::QosAckPolicy
756 WifiMacHeader::GetQosAckPolicy (
void)
const
758 switch (m_qosAckPolicy)
767 return NO_EXPLICIT_ACK;
775 return (
enum QosAckPolicy)-1;
779 WifiMacHeader::GetQosTxopLimit (
void)
const
786 WifiMacHeader::GetFrameControl (
void)
const
789 val |= (m_ctrlType << 2) & (0x3 << 2);
790 val |= (m_ctrlSubtype << 4) & (0xf << 4);
791 val |= (m_ctrlToDs << 8) & (0x1 << 8);
792 val |= (m_ctrlFromDs << 9) & (0x1 << 9);
793 val |= (m_ctrlMoreFrag << 10) & (0x1 << 10);
794 val |= (m_ctrlRetry << 11) & (0x1 << 11);
795 val |= (m_ctrlMoreData << 13) & (0x1 << 13);
796 val |= (m_ctrlWep << 14) & (0x1 << 14);
797 val |= (m_ctrlOrder << 15) & (0x1 << 15);
802 WifiMacHeader::GetQosControl (
void)
const
806 val |= m_qosEosp << 4;
807 val |= m_qosAckPolicy << 5;
808 val |= m_amsduPresent << 7;
809 val |= m_qosStuff << 8;
814 WifiMacHeader::SetFrameControl (uint16_t ctrl)
816 m_ctrlType = (ctrl >> 2) & 0x03;
817 m_ctrlSubtype = (ctrl >> 4) & 0x0f;
818 m_ctrlToDs = (ctrl >> 8) & 0x01;
819 m_ctrlFromDs = (ctrl >> 9) & 0x01;
820 m_ctrlMoreFrag = (ctrl >> 10) & 0x01;
821 m_ctrlRetry = (ctrl >> 11) & 0x01;
822 m_ctrlMoreData = (ctrl >> 13) & 0x01;
823 m_ctrlWep = (ctrl >> 14) & 0x01;
824 m_ctrlOrder = (ctrl >> 15) & 0x01;
827 WifiMacHeader::SetSequenceControl (uint16_t seq)
829 m_seqFrag = seq & 0x0f;
830 m_seqSeq = (seq >> 4) & 0x0fff;
833 WifiMacHeader::SetQosControl (uint16_t qos)
835 m_qosTid = qos & 0x000f;
836 m_qosEosp = (qos >> 4) & 0x0001;
837 m_qosAckPolicy = (qos >> 5) & 0x0003;
838 m_amsduPresent = (qos >> 7) & 0x0001;
839 m_qosStuff = (qos >> 8) & 0x00ff;
843 WifiMacHeader::GetSize (
void)
const
849 size = 2 + 2 + 6 + 6 + 6 + 2;
852 switch (m_ctrlSubtype)
854 case SUBTYPE_CTL_RTS:
855 size = 2 + 2 + 6 + 6;
857 case SUBTYPE_CTL_CTS:
858 case SUBTYPE_CTL_ACK:
861 case SUBTYPE_CTL_BACKREQ:
862 case SUBTYPE_CTL_BACKRESP:
863 size = 2 + 2 + 6 + 6;
868 size = 2 + 2 + 6 + 6 + 6 + 2;
869 if (m_ctrlToDs && m_ctrlFromDs)
873 if (m_ctrlSubtype & 0x08)
882 WifiMacHeader::GetTypeString (
void)
const
885 case WIFI_MAC_ ## x: \
898 FOO (MGT_ASSOCIATION_REQUEST);
899 FOO (MGT_ASSOCIATION_RESPONSE);
900 FOO (MGT_DISASSOCIATION);
901 FOO (MGT_REASSOCIATION_REQUEST);
902 FOO (MGT_REASSOCIATION_RESPONSE);
903 FOO (MGT_PROBE_REQUEST);
904 FOO (MGT_PROBE_RESPONSE);
905 FOO (MGT_AUTHENTICATION);
906 FOO (MGT_DEAUTHENTICATION);
908 FOO (MGT_ACTION_NO_ACK);
909 FOO (MGT_MULTIHOP_ACTION);
914 FOO (DATA_CFACK_CFPOLL);
916 FOO (DATA_NULL_CFACK);
917 FOO (DATA_NULL_CFPOLL);
918 FOO (DATA_NULL_CFACK_CFPOLL);
921 FOO (QOSDATA_CFPOLL);
922 FOO (QOSDATA_CFACK_CFPOLL);
924 FOO (QOSDATA_NULL_CFPOLL);
925 FOO (QOSDATA_NULL_CFACK_CFPOLL);
935 WifiMacHeader::GetTypeId (
void)
937 static TypeId tid = TypeId (
"ns3::WifiMacHeader")
938 .SetParent<Header> ()
939 .AddConstructor<WifiMacHeader> ()
951 WifiMacHeader::PrintFrameControl (std::ostream &os)
const
953 os <<
"ToDS=" << std::hex << (int) m_ctrlToDs <<
", FromDS=" << std::hex << (
int) m_ctrlFromDs
954 << ", MoreFrag=" << std::hex << (
int) m_ctrlMoreFrag << ", Retry=" << std::hex << (
int) m_ctrlRetry
955 << ", MoreData=" << std::hex << (
int) m_ctrlMoreData << std::dec
962 os << GetTypeString () <<
" ";
965 case WIFI_MAC_CTL_RTS:
966 os <<
"Duration/ID=" << m_duration <<
"us"
967 <<
", RA=" << m_addr1 <<
", TA=" << m_addr2;
969 case WIFI_MAC_CTL_CTS:
970 case WIFI_MAC_CTL_ACK:
971 os <<
"Duration/ID=" << m_duration <<
"us"
972 <<
", RA=" << m_addr1;
974 case WIFI_MAC_CTL_BACKREQ:
976 case WIFI_MAC_CTL_BACKRESP:
979 case WIFI_MAC_MGT_BEACON:
980 case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
981 case WIFI_MAC_MGT_ASSOCIATION_RESPONSE:
982 case WIFI_MAC_MGT_DISASSOCIATION:
983 case WIFI_MAC_MGT_REASSOCIATION_REQUEST:
984 case WIFI_MAC_MGT_REASSOCIATION_RESPONSE:
985 case WIFI_MAC_MGT_PROBE_REQUEST:
986 case WIFI_MAC_MGT_PROBE_RESPONSE:
987 case WIFI_MAC_MGT_AUTHENTICATION:
988 case WIFI_MAC_MGT_DEAUTHENTICATION:
989 PrintFrameControl (os);
990 os <<
" Duration/ID=" << m_duration <<
"us"
991 <<
", DA=" << m_addr1 <<
", SA=" << m_addr2
992 <<
", BSSID=" << m_addr3 <<
", FragNumber=" << std::hex << (int) m_seqFrag << std::dec
993 <<
", SeqNumber=" << m_seqSeq;
995 case WIFI_MAC_MGT_ACTION:
996 case WIFI_MAC_MGT_ACTION_NO_ACK:
997 PrintFrameControl (os);
998 os <<
" Duration/ID=" << m_duration <<
"us"
999 <<
"DA=" << m_addr1 <<
", SA=" << m_addr2 <<
", BSSID=" << m_addr3
1000 <<
", FragNumber=" << std::hex << (int) m_seqFrag << std::dec <<
", SeqNumber=" << m_seqSeq;
1001 case WIFI_MAC_MGT_MULTIHOP_ACTION:
1002 os <<
" Duration/ID=" << m_duration <<
"us"
1003 <<
"RA=" << m_addr1 <<
", TA=" << m_addr2 <<
", DA=" << m_addr3
1004 <<
", FragNumber=" << std::hex << (int) m_seqFrag << std::dec <<
", SeqNumber=" << m_seqSeq;
1006 PrintFrameControl (os);
1007 os <<
" Duration/ID=" << m_duration <<
"us";
1008 if (!m_ctrlToDs && !m_ctrlFromDs)
1010 os <<
"DA=" << m_addr1 <<
", SA=" << m_addr2 <<
", BSSID=" << m_addr3;
1012 else if (!m_ctrlToDs && m_ctrlFromDs)
1014 os <<
"DA=" << m_addr1 <<
", SA=" << m_addr3 <<
", BSSID=" << m_addr2;
1016 else if (m_ctrlToDs && !m_ctrlFromDs)
1018 os <<
"DA=" << m_addr3 <<
", SA=" << m_addr2 <<
", BSSID=" << m_addr1;
1020 else if (m_ctrlToDs && m_ctrlFromDs)
1022 os <<
"DA=" << m_addr3 <<
", SA=" << m_addr4 <<
", RA=" << m_addr1 <<
", TA=" << m_addr2;
1028 os <<
", FragNumber=" << std::hex << (int) m_seqFrag << std::dec
1029 <<
", SeqNumber=" << m_seqSeq;
1031 case WIFI_MAC_DATA_CFACK:
1032 case WIFI_MAC_DATA_CFPOLL:
1033 case WIFI_MAC_DATA_CFACK_CFPOLL:
1034 case WIFI_MAC_DATA_NULL:
1035 case WIFI_MAC_DATA_NULL_CFACK:
1036 case WIFI_MAC_DATA_NULL_CFPOLL:
1037 case WIFI_MAC_DATA_NULL_CFACK_CFPOLL:
1038 case WIFI_MAC_QOSDATA:
1039 case WIFI_MAC_QOSDATA_CFACK:
1040 case WIFI_MAC_QOSDATA_CFPOLL:
1041 case WIFI_MAC_QOSDATA_CFACK_CFPOLL:
1042 case WIFI_MAC_QOSDATA_NULL:
1043 case WIFI_MAC_QOSDATA_NULL_CFPOLL:
1044 case WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL:
1058 WriteTo (i, m_addr1);
1062 WriteTo (i, m_addr2);
1063 WriteTo (i, m_addr3);
1067 switch (m_ctrlSubtype)
1069 case SUBTYPE_CTL_RTS:
1070 WriteTo (i, m_addr2);
1072 case SUBTYPE_CTL_CTS:
1073 case SUBTYPE_CTL_ACK:
1075 case SUBTYPE_CTL_BACKREQ:
1076 case SUBTYPE_CTL_BACKRESP:
1077 WriteTo (i, m_addr2);
1087 WriteTo (i, m_addr2);
1088 WriteTo (i, m_addr3);
1090 if (m_ctrlToDs && m_ctrlFromDs)
1092 WriteTo (i, m_addr4);
1094 if (m_ctrlSubtype & 0x08)
1110 SetFrameControl (frame_control);
1112 ReadFrom (i, m_addr1);
1116 ReadFrom (i, m_addr2);
1117 ReadFrom (i, m_addr3);
1121 switch (m_ctrlSubtype)
1123 case SUBTYPE_CTL_RTS:
1124 ReadFrom (i, m_addr2);
1126 case SUBTYPE_CTL_CTS:
1127 case SUBTYPE_CTL_ACK:
1129 case SUBTYPE_CTL_BACKREQ:
1130 case SUBTYPE_CTL_BACKRESP:
1131 ReadFrom (i, m_addr2);
1136 ReadFrom (i, m_addr2);
1137 ReadFrom (i, m_addr3);
1139 if (m_ctrlToDs && m_ctrlFromDs)
1141 ReadFrom (i, m_addr4);
1143 if (m_ctrlSubtype & 0x08)
#define NS_ASSERT(condition)
uint32_t GetDistanceFrom(Iterator const &o) const
#define NS_FATAL_ERROR(msg)
fatal error handling
iterator in a Buffer instance
void WriteHtolsbU16(uint16_t data)
uint16_t ReadLsbtohU16(void)
Time MicroSeconds(uint64_t us)
create ns3::Time instances in units of microseconds.