A Discrete-Event Network Simulator
API
wifi-mac-header.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2006, 2009 INRIA
3  * Copyright (c) 2009 MIRKO BANCHI
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  * Author: Mirko Banchi <mk.banchi@gmail.com>
20  */
21 
22 #ifndef WIFI_MAC_HEADER_H
23 #define WIFI_MAC_HEADER_H
24 
25 #include "ns3/header.h"
26 #include "ns3/mac48-address.h"
27 
28 namespace ns3
29 {
30 
31 class Time;
32 
37 {
47 
57 
71 
87 
89 };
90 
96 class WifiMacHeader : public Header
97 {
98  public:
103  {
105  NO_ACK = 1,
108  };
109 
114  {
118  ADDR4
119  };
120 
121  WifiMacHeader();
128  ~WifiMacHeader() override;
129 
134  static TypeId GetTypeId();
135 
136  TypeId GetInstanceTypeId() const override;
137  void Print(std::ostream& os) const override;
138  uint32_t GetSerializedSize() const override;
139  void Serialize(Buffer::Iterator start) const override;
140  uint32_t Deserialize(Buffer::Iterator start) override;
141 
145  void SetDsFrom();
149  void SetDsNotFrom();
153  void SetDsTo();
157  void SetDsNotTo();
190  void SetType(WifiMacType type, bool resetToDsFromDs = true);
196  void SetRawDuration(uint16_t duration);
203  void SetDuration(Time duration);
209  void SetId(uint16_t id);
215  void SetSequenceNumber(uint16_t seq);
221  void SetFragmentNumber(uint8_t frag);
225  void SetNoMoreFragments();
229  void SetMoreFragments();
233  void SetRetry();
237  void SetNoRetry();
243  void SetQosTid(uint8_t tid);
247  void SetQosEosp();
251  void SetQosNoEosp();
257  void SetQosAckPolicy(QosAckPolicy policy);
261  void SetQosAmsdu();
265  void SetQosNoAmsdu();
271  void SetQosTxopLimit(uint8_t txop);
277  void SetQosQueueSize(uint8_t size);
289  void SetOrder();
293  void SetNoOrder();
294 
300  Mac48Address GetAddr1() const;
306  Mac48Address GetAddr2() const;
312  Mac48Address GetAddr3() const;
318  Mac48Address GetAddr4() const;
324  WifiMacType GetType() const;
328  bool IsFromDs() const;
332  bool IsToDs() const;
340  bool IsData() const;
347  bool IsQosData() const;
354  bool HasData() const;
360  bool IsCtl() const;
366  bool IsMgt() const;
372  bool IsCfPoll() const;
378  bool IsCfAck() const;
384  bool IsCfEnd() const;
390  bool IsRts() const;
396  bool IsCts() const;
402  bool IsAck() const;
408  bool IsBlockAckReq() const;
414  bool IsBlockAck() const;
420  bool IsTrigger() const;
426  bool IsAssocReq() const;
432  bool IsAssocResp() const;
438  bool IsReassocReq() const;
444  bool IsReassocResp() const;
450  bool IsProbeReq() const;
456  bool IsProbeResp() const;
462  bool IsBeacon() const;
468  bool IsDisassociation() const;
474  bool IsAuthentication() const;
480  bool IsDeauthentication() const;
486  bool IsAction() const;
492  bool IsActionNoAck() const;
499  bool IsMultihopAction() const;
505  uint16_t GetRawDuration() const;
511  Time GetDuration() const;
517  uint16_t GetSequenceControl() const;
523  uint16_t GetSequenceNumber() const;
529  uint8_t GetFragmentNumber() const;
535  bool IsRetry() const;
541  bool IsMoreData() const;
547  bool IsMoreFragments() const;
553  bool IsQosBlockAck() const;
559  bool IsQosNoAck() const;
565  bool IsQosAck() const;
571  bool IsQosEosp() const;
578  bool IsQosAmsdu() const;
584  uint8_t GetQosTid() const;
596  uint8_t GetQosQueueSize() const;
603  uint32_t GetSize() const;
609  const char* GetTypeString() const;
610 
616  typedef void (*TracedCallback)(const WifiMacHeader& header);
617 
618  private:
624  uint16_t GetFrameControl() const;
630  uint16_t GetQosControl() const;
636  void SetFrameControl(uint16_t control);
642  void SetSequenceControl(uint16_t seq);
648  void SetQosControl(uint16_t qos);
654  void PrintFrameControl(std::ostream& os) const;
655 
656  uint8_t m_ctrlType;
657  uint8_t m_ctrlSubtype;
658  uint8_t m_ctrlToDs;
659  uint8_t m_ctrlFromDs;
660  uint8_t m_ctrlMoreFrag;
661  uint8_t m_ctrlRetry;
662  uint8_t m_ctrlMoreData;
663  uint8_t m_ctrlWep;
664  uint8_t m_ctrlOrder;
667  uint16_t m_duration;
671  uint8_t m_seqFrag;
672  uint16_t m_seqSeq;
674  uint8_t m_qosTid;
675  uint8_t m_qosEosp;
676  uint8_t m_qosAckPolicy;
677  uint8_t m_amsduPresent;
678  uint8_t m_qosStuff;
679 };
680 
681 } // namespace ns3
682 
683 #endif /* WIFI_MAC_HEADER_H */
iterator in a Buffer instance
Definition: buffer.h:100
Protocol header serialization and deserialization.
Definition: header.h:44
virtual uint32_t Deserialize(Buffer::Iterator start)=0
Deserialize the object from a buffer iterator.
an EUI-48 address
Definition: mac48-address.h:46
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:60
Implements the IEEE 802.11 MAC header.
uint8_t GetQosTid() const
Return the Traffic ID of a QoS header.
bool IsCfAck() const
Return true if the header is a CF-Ack header.
uint8_t m_qosEosp
QoS EOSP.
uint8_t m_ctrlRetry
control retry
uint8_t m_qosTid
QoS TID.
bool IsAssocReq() const
Return true if the header is an Association Request header.
bool IsCfPoll() const
Return true if the Type/Subtype is one of the possible CF-Poll headers.
void SetQosAckPolicy(QosAckPolicy policy)
Set the QoS Ack policy in the QoS control field.
bool IsAck() const
Return true if the header is an Ack header.
AddressType
Address types.
uint16_t GetRawDuration() const
Return the raw duration from the Duration/ID field.
void SetRawDuration(uint16_t duration)
Set the Duration/ID field with the given raw uint16_t value.
bool IsProbeReq() const
Return true if the header is a Probe Request header.
bool IsBlockAckReq() const
Return true if the header is a BlockAckRequest header.
bool IsQosAmsdu() const
Check if the A-MSDU present bit is set in the QoS control field.
bool IsCts() const
Return true if the header is a CTS header.
Mac48Address GetAddr3() const
Return the address in the Address 3 field.
void SetQosAmsdu()
Set that A-MSDU is present.
uint16_t GetFrameControl() const
Return the raw Frame Control field.
Mac48Address GetAddr4() const
Return the address in the Address 4 field.
void SetFrameControl(uint16_t control)
Set the Frame Control field with the given raw value.
bool IsBeacon() const
Return true if the header is a Beacon header.
uint32_t GetSerializedSize() const override
bool IsAssocResp() const
Return true if the header is an Association Response header.
Mac48Address GetAddr1() const
Return the address in the Address 1 field.
uint16_t GetSequenceNumber() const
Return the sequence number of the header.
bool IsDisassociation() const
Return true if the header is a Disassociation header.
Mac48Address m_addr1
address 1
uint16_t m_seqSeq
sequence sequence
bool IsMoreFragments() const
Return if the More Fragment bit is set.
void SetRetry()
Set the Retry bit in the Frame Control field.
uint16_t GetSequenceControl() const
Return the raw Sequence Control field.
bool IsTrigger() const
Return true if the header is a Trigger header.
void SetQosTxopLimit(uint8_t txop)
Set TXOP limit in the QoS control field.
WifiMacType GetType() const
Return the type (enum WifiMacType)
void SetNoMoreFragments()
Un-set the More Fragment bit in the Frame Control Field.
bool IsRetry() const
Return if the Retry bit is set.
bool IsActionNoAck() const
Return true if the header is an Action No Ack header.
bool IsMgt() const
Return true if the Type is Management.
bool IsCtl() const
Return true if the Type is Control.
Time GetDuration() const
Return the duration from the Duration/ID field (Time object).
void SetQosControl(uint16_t qos)
Set the QoS Control field with the given raw value.
uint8_t m_ctrlSubtype
control subtype
void SetSequenceNumber(uint16_t seq)
Set the sequence number of the header.
void SetNoOrder()
Unset order bit in the frame control field.
uint32_t GetSize() const
Return the size of the WifiMacHeader in octets.
uint8_t m_amsduPresent
A-MSDU present.
bool IsCfEnd() const
Return true if the header is a CF-End header.
void SetDsNotFrom()
Un-set the From DS bit in the Frame Control field.
uint16_t GetQosControl() const
Return the raw QoS Control field.
bool IsProbeResp() const
Return true if the header is a Probe Response header.
bool IsAction() const
Return true if the header is an Action header.
void SetMoreFragments()
Set the More Fragment bit in the Frame Control field.
bool IsQosEosp() const
Return if the end of service period (EOSP) is set.
Mac48Address m_addr4
address 4
Mac48Address m_addr2
address 2
void SetAddr1(Mac48Address address)
Fill the Address 1 field with the given address.
void SetOrder()
Set order bit in the frame control field.
void SetSequenceControl(uint16_t seq)
Set the Sequence Control field with the given raw value.
void SetQosQueueSize(uint8_t size)
Set the Queue Size subfield in the QoS control field.
void SetQosNoAmsdu()
Set that A-MSDU is not present.
bool IsBlockAck() const
Return true if the header is a BlockAck header.
void SetType(WifiMacType type, bool resetToDsFromDs=true)
Set Type/Subtype values with the correct values depending on the given type.
void SetAddr4(Mac48Address address)
Fill the Address 4 field with the given address.
uint8_t m_ctrlOrder
control order (set to 1 for QoS Data and Management frames to signify that HT/VHT/HE control field is...
uint8_t m_ctrlFromDs
control from DS
Mac48Address GetAddr2() const
Return the address in the Address 2 field.
uint16_t m_duration
duration
const char * GetTypeString() const
Return a string corresponds to the header type.
uint8_t m_ctrlWep
control WEP
bool HasData() const
Return true if the header type is DATA and is not DATA_NULL.
bool IsReassocReq() const
Return true if the header is a Reassociation Request header.
void SetQosTid(uint8_t tid)
Set the TID for the QoS header.
QosAckPolicy GetQosAckPolicy() const
Return the QoS Ack policy in the QoS control field.
void SetDuration(Time duration)
Set the Duration/ID field with the given duration (Time object).
bool IsData() const
Return true if the Type is DATA.
void SetQosNoEosp()
Un-set the end of service period (EOSP) bit in the QoS control field.
uint8_t m_seqFrag
sequence fragment
uint8_t m_ctrlMoreData
control more data
bool IsReassocResp() const
Return true if the header is a Reassociation Response header.
bool IsRts() const
Return true if the header is a RTS header.
static TypeId GetTypeId()
Get the type ID.
bool IsQosAck() const
Return if the QoS Ack policy is Normal Ack.
void Print(std::ostream &os) const override
bool IsMoreData() const
Return if the More Data bit is set.
void SetQosNoMeshControlPresent()
Clear the Mesh Control Present flag for the QoS header.
void SetDsFrom()
Set the From DS bit in the Frame Control field.
bool IsQosNoAck() const
Return if the QoS Ack policy is No Ack.
uint8_t m_qosStuff
QoS stuff.
void SetDsTo()
Set the To DS bit in the Frame Control field.
void PrintFrameControl(std::ostream &os) const
Print the Frame Control field to the output stream.
uint8_t m_ctrlType
control type
void SetAddr2(Mac48Address address)
Fill the Address 2 field with the given address.
void SetId(uint16_t id)
Set the Duration/ID field with the given ID.
bool IsQosBlockAck() const
Return if the QoS Ack policy is Block Ack.
uint8_t GetFragmentNumber() const
Return the fragment number of the header.
bool IsQosData() const
Return true if the Type is DATA and Subtype is one of the possible values for QoS Data.
void SetQosEosp()
Set the end of service period (EOSP) bit in the QoS control field.
void Serialize(Buffer::Iterator start) const override
uint8_t GetQosQueueSize() const
Get the Queue Size subfield in the QoS control field.
void SetAddr3(Mac48Address address)
Fill the Address 3 field with the given address.
void SetDsNotTo()
Un-set the To DS bit in the Frame Control field.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void SetFragmentNumber(uint8_t frag)
Set the fragment number of the header.
void SetQosMeshControlPresent()
Set the Mesh Control Present flag for the QoS header.
Mac48Address m_addr3
address 3
uint8_t m_ctrlMoreFrag
control more fragments
QosAckPolicy
Ack policy for QoS frames.
bool IsMultihopAction() const
Check if the header is a Multihop action header.
void SetNoRetry()
Un-set the Retry bit in the Frame Control field.
bool IsDeauthentication() const
Return true if the header is a Deauthentication header.
~WifiMacHeader() override
uint8_t m_ctrlToDs
control to DS
bool IsAuthentication() const
Return true if the header is an Authentication header.
uint8_t m_qosAckPolicy
QoS Ack policy.
address
Definition: first.py:40
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:848
Every class exported by the ns3 library is enclosed in the ns3 namespace.
WifiMacType
Combination of valid MAC header type/subtype.
@ WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL
@ WIFI_MAC_EXTENSION_DMG_BEACON
@ WIFI_MAC_CTL_TRIGGER
@ WIFI_MAC_CTL_DMG_SSW_ACK
@ WIFI_MAC_MGT_PROBE_REQUEST
@ WIFI_MAC_CTL_END_ACK
@ WIFI_MAC_DATA_CFACK
@ WIFI_MAC_CTL_BACKREQ
@ WIFI_MAC_DATA_NULL
@ WIFI_MAC_CTL_DMG_POLL
@ WIFI_MAC_CTL_DMG_GRANT_ACK
@ WIFI_MAC_CTL_RTS
@ WIFI_MAC_CTL_DMG_CTS
@ WIFI_MAC_CTL_CTS
@ WIFI_MAC_MGT_AUTHENTICATION
@ WIFI_MAC_MGT_MULTIHOP_ACTION
@ WIFI_MAC_CTL_CTLWRAPPER
@ WIFI_MAC_QOSDATA_CFACK_CFPOLL
@ WIFI_MAC_MGT_BEACON
@ WIFI_MAC_CTL_DMG_GRANT
@ WIFI_MAC_MGT_ACTION
@ WIFI_MAC_MGT_ASSOCIATION_RESPONSE
@ WIFI_MAC_CTL_DMG_SPR
@ WIFI_MAC_CTL_ACK
@ WIFI_MAC_MGT_DISASSOCIATION
@ WIFI_MAC_QOSDATA_NULL_CFPOLL
@ WIFI_MAC_MGT_ASSOCIATION_REQUEST
@ WIFI_MAC_DATA_NULL_CFACK_CFPOLL
@ WIFI_MAC_MGT_REASSOCIATION_REQUEST
@ WIFI_MAC_QOSDATA_CFACK
@ WIFI_MAC_CTL_BACKRESP
@ WIFI_MAC_DATA_CFACK_CFPOLL
@ WIFI_MAC_DATA_CFPOLL
@ WIFI_MAC_CTL_END
@ WIFI_MAC_DATA_NULL_CFACK
@ WIFI_MAC_MGT_ACTION_NO_ACK
@ WIFI_MAC_MGT_DEAUTHENTICATION
@ WIFI_MAC_QOSDATA_NULL
@ WIFI_MAC_CTL_DMG_DTS
@ WIFI_MAC_DATA_NULL_CFPOLL
@ WIFI_MAC_MGT_PROBE_RESPONSE
@ WIFI_MAC_QOSDATA_CFPOLL
@ WIFI_MAC_DATA
@ WIFI_MAC_CTL_DMG_SSW
@ WIFI_MAC_MGT_REASSOCIATION_RESPONSE
@ WIFI_MAC_CTL_DMG_SSW_FBCK
@ WIFI_MAC_QOSDATA