A Discrete-Event Network Simulator
API
wifi-mac-header.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2006, 2009 INRIA
4  * Copyright (c) 2009 MIRKO BANCHI
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
20  * Author: Mirko Banchi <mk.banchi@gmail.com>
21  */
22 
23 #ifndef WIFI_MAC_HEADER_H
24 #define WIFI_MAC_HEADER_H
25 
26 #include "ns3/header.h"
27 #include "ns3/mac48-address.h"
28 #include "ns3/nstime.h"
29 
30 namespace ns3 {
31 
36 {
43 
57 
73 };
74 
80 class WifiMacHeader : public Header
81 {
82 public:
87  {
89  NO_ACK = 1,
91  BLOCK_ACK = 3,
92  };
93 
98  {
103  };
104 
105  WifiMacHeader ();
106  virtual ~WifiMacHeader ();
107 
112  static TypeId GetTypeId (void);
113  TypeId GetInstanceTypeId (void) const;
114  void Print (std::ostream &os) const;
115  uint32_t GetSerializedSize (void) const;
116  void Serialize (Buffer::Iterator start) const;
118 
122  void SetAssocReq (void);
126  void SetAssocResp (void);
130  void SetProbeReq (void);
134  void SetProbeResp (void);
138  void SetBeacon (void);
143  void SetTypeData (void);
147  void SetAction ();
151  void SetBlockAckReq (void);
155  void SetBlockAck (void);
159  void SetMultihopAction ();
163  void SetDsFrom (void);
167  void SetDsNotFrom (void);
171  void SetDsTo (void);
175  void SetDsNotTo (void);
206  void SetType (WifiMacType type);
212  void SetRawDuration (uint16_t duration);
219  void SetDuration (Time duration);
225  void SetId (uint16_t id);
231  void SetSequenceNumber (uint16_t seq);
237  void SetFragmentNumber (uint8_t frag);
241  void SetNoMoreFragments (void);
245  void SetMoreFragments (void);
249  void SetRetry (void);
253  void SetNoRetry (void);
259  void SetQosTid (uint8_t tid);
263  void SetQosEosp ();
267  void SetQosNoEosp ();
273  void SetQosAckPolicy (QosAckPolicy policy);
277  void SetQosNormalAck (void);
281  void SetQosBlockAck (void);
285  void SetQosNoAck (void);
289  void SetQosAmsdu (void);
293  void SetQosNoAmsdu (void);
299  void SetQosTxopLimit (uint8_t txop);
303  void SetQosMeshControlPresent ();
311  void SetOrder (void);
315  void SetNoOrder (void);
316 
322  Mac48Address GetAddr1 (void) const;
328  Mac48Address GetAddr2 (void) const;
334  Mac48Address GetAddr3 (void) const;
340  Mac48Address GetAddr4 (void) const;
346  WifiMacType GetType (void) const;
350  bool IsFromDs (void) const;
354  bool IsToDs (void) const;
362  bool IsData (void) const;
369  bool IsQosData (void) const;
375  bool IsCtl (void) const;
381  bool IsMgt (void) const;
387  bool IsCfpoll (void) const;
393  bool IsRts (void) const;
399  bool IsCts (void) const;
405  bool IsAck (void) const;
411  bool IsBlockAckReq (void) const;
417  bool IsBlockAck (void) const;
423  bool IsAssocReq (void) const;
429  bool IsAssocResp (void) const;
435  bool IsReassocReq (void) const;
441  bool IsReassocResp (void) const;
447  bool IsProbeReq (void) const;
453  bool IsProbeResp (void) const;
459  bool IsBeacon (void) const;
465  bool IsDisassociation (void) const;
471  bool IsAuthentication (void) const;
477  bool IsDeauthentication (void) const;
483  bool IsAction () const;
490  bool IsMultihopAction () const;
496  uint16_t GetRawDuration (void) const;
502  Time GetDuration (void) const;
508  uint16_t GetSequenceControl (void) const;
514  uint16_t GetSequenceNumber (void) const;
520  uint16_t GetFragmentNumber (void) const;
526  bool IsRetry (void) const;
532  bool IsMoreFragments (void) const;
538  bool IsQosBlockAck (void) const;
544  bool IsQosNoAck (void) const;
550  bool IsQosAck (void) const;
556  bool IsQosEosp (void) const;
563  bool IsQosAmsdu (void) const;
569  uint8_t GetQosTid (void) const;
575  QosAckPolicy GetQosAckPolicy (void) const;
581  uint8_t GetQosTxopLimit (void) const;
588  uint32_t GetSize (void) const;
594  const char * GetTypeString (void) const;
595 
601  typedef void (* TracedCallback)(const WifiMacHeader &header);
602 
603 
604 private:
610  uint16_t GetFrameControl (void) const;
616  uint16_t GetQosControl (void) const;
622  void SetFrameControl (uint16_t control);
628  void SetSequenceControl (uint16_t seq);
634  void SetQosControl (uint16_t qos);
640  void PrintFrameControl (std::ostream &os) const;
641 
642  uint8_t m_ctrlType;
643  uint8_t m_ctrlSubtype;
644  uint8_t m_ctrlToDs;
645  uint8_t m_ctrlFromDs;
646  uint8_t m_ctrlMoreFrag;
647  uint8_t m_ctrlRetry;
648  uint8_t m_ctrlMoreData;
649  uint8_t m_ctrlWep;
650  uint8_t m_ctrlOrder;
651  uint16_t m_duration;
655  uint8_t m_seqFrag;
656  uint16_t m_seqSeq;
658  uint8_t m_qosTid;
659  uint8_t m_qosEosp;
660  uint8_t m_qosAckPolicy;
661  uint8_t m_amsduPresent;
662  uint16_t m_qosStuff;
663 };
664 
665 } //namespace ns3
666 
667 #endif /* WIFI_MAC_HEADER_H */
uint8_t m_ctrlMoreData
control more data
Protocol header serialization and deserialization.
Definition: header.h:42
bool IsBeacon(void) const
Return true if the header is a Beacon header.
void SetAction()
Set Type/Subtype values for an action header.
void SetRetry(void)
Set the Retry bit in the Frame Control field.
void SetMoreFragments(void)
Set the More Fragment bit in the Frame Control field.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
uint32_t GetSize(void) const
Return the size of the WifiMacHeader in octets.
uint16_t GetFragmentNumber(void) const
Return the fragment number of the header.
void SetRawDuration(uint16_t duration)
Set the Duration/ID field with the given raw uint16_t value.
void SetFrameControl(uint16_t control)
Set the Frame Control field with the given raw value.
bool IsReassocResp(void) const
Return true if the header is a Reassociation Response header.
void SetType(WifiMacType type)
Set Type/Subtype values with the correct values depending on the given type.
void SetProbeReq(void)
Set Type/Subtype values for a probe request header.
uint16_t GetRawDuration(void) const
Return the raw duration from the Duration/ID field.
void SetDuration(Time duration)
Set the Duration/ID field with the given duration (Time object).
uint8_t m_ctrlType
control type
bool IsAction() const
Return true if the header is an Action header.
def start()
Definition: core.py:1790
Forward calls to a chain of Callback.
Mac48Address m_addr2
address 2
Mac48Address GetAddr3(void) const
Return the address in the Address 3 field.
void SetNoMoreFragments(void)
Un-set the More Fragment bit in the Frame Control Field.
uint8_t m_qosAckPolicy
QOS ack policy.
Mac48Address GetAddr4(void) const
Return the address in the Address 4 field.
uint8_t m_qosEosp
QOS EOSP.
QosAckPolicy GetQosAckPolicy(void) const
Return the QoS ACK Policy of a QoS header.
void SetId(uint16_t id)
Set the Duration/ID field with the given ID.
bool IsAssocReq(void) const
Return true if the header is an Association Request header.
uint16_t GetQosControl(void) const
Return the raw QoS Control field.
bool IsBlockAck(void) const
Return true if the header is a Block ACK header.
bool IsAssocResp(void) const
Return true if the header is an Association Response header.
void SetQosControl(uint16_t qos)
Set the QoS Control field with the given raw value.
uint16_t GetFrameControl(void) const
Return the raw Frame Control field.
bool IsCtl(void) const
Return true if the Type is Control.
void SetProbeResp(void)
Set Type/Subtype values for a probe response header.
uint8_t m_seqFrag
sequence fragment
void SetQosNoAck(void)
Set the QoS ACK policy in the QoS control field to no ACK.
bool IsQosAmsdu(void) const
Check if the A-MSDU present bit is set in the QoS control field.
bool IsProbeResp(void) const
Return true if the header is a Probe Response header.
Mac48Address m_addr1
address 1
Mac48Address m_addr3
address 3
iterator in a Buffer instance
Definition: buffer.h:98
bool IsCfpoll(void) const
Return true if the Type/Subtype is one of the possible CF-Poll headers.
bool IsMoreFragments(void) const
Return if the More Fragment bit is set.
Time GetDuration(void) const
Return the duration from the Duration/ID field (Time object).
uint8_t GetQosTid(void) const
Return the Traffic ID of a QoS header.
bool IsReassocReq(void) const
Return true if the header is a Reassociation Request header.
uint32_t GetSerializedSize(void) const
uint8_t GetQosTxopLimit(void) const
Return the TXOP limit.
void SetAddr1(Mac48Address address)
Fill the Address 1 field with the given address.
uint8_t m_ctrlToDs
control to DS
void SetBeacon(void)
Set Type/Subtype values for a beacon header.
AddressType
Address types.
void SetDsNotTo(void)
Un-set the To DS bit in the Frame Control field.
void SetAddr3(Mac48Address address)
Fill the Address 3 field with the given address.
void SetAddr4(Mac48Address address)
Fill the Address 4 field with the given address.
WifiMacType
Combination of valid MAC header type/subtype.
uint16_t GetSequenceControl(void) const
Return the raw Sequence Control field.
bool IsProbeReq(void) const
Return true if the header is a Probe Request header.
void Print(std::ostream &os) const
void SetOrder(void)
Set order bit in the frame control field.
bool IsAuthentication(void) const
Return true if the header is an Authentication header.
bool IsQosBlockAck(void) const
Return if the QoS ACK policy is Block ACK.
uint8_t m_amsduPresent
AMSDU present.
Mac48Address m_addr4
address 4
uint8_t m_ctrlMoreFrag
control more fragments
uint8_t m_ctrlFromDs
control from DS
bool IsMgt(void) const
Return true if the Type is Management.
void SetAssocReq(void)
Set Type/Subtype values for an association request header.
uint8_t m_ctrlOrder
control order
void SetQosTid(uint8_t tid)
Set the TID for the QoS header.
TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void SetSequenceControl(uint16_t seq)
Set the Sequence Control field with the given raw value.
void SetNoRetry(void)
Un-set the Retry bit in the Frame Control field.
bool IsToDs(void) const
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint16_t m_seqSeq
sequence sequence
bool IsDisassociation(void) const
Return true if the header is a Disassociation header.
void SetAddr2(Mac48Address address)
Fill the Address 2 field with the given address.
QosAckPolicy
ACK policy for QoS frames.
an EUI-48 address
Definition: mac48-address.h:43
void SetBlockAck(void)
Set Type/Subtype values for a Block Ack header.
void PrintFrameControl(std::ostream &os) const
Print the Frame Control field to the output stream.
const char * GetTypeString(void) const
Return a string corresponds to the header type.
uint16_t m_duration
duration
void SetAssocResp(void)
Set Type/Subtype values for an association response header.
uint8_t m_ctrlRetry
control retry
void SetQosTxopLimit(uint8_t txop)
Set TXOP limit in the QoS control field.
uint16_t m_qosStuff
QOS stuff.
void SetSequenceNumber(uint16_t seq)
Set the sequence number of the header.
bool IsData(void) const
Return true if the Type is DATA.
bool IsQosData(void) const
Return true if the Type is DATA and Subtype is one of the possible values for QoS DATA...
bool IsBlockAckReq(void) const
Return true if the header is a Block ACK Request header.
void SetQosNormalAck(void)
Set the QoS ACK policy in the QoS control field to normal ACK.
WifiMacType GetType(void) const
Return the type (enum WifiMacType)
void SetTypeData(void)
Set Type/Subtype values for a data packet with no subtype equal to 0.
void SetQosNoAmsdu(void)
Set that A-MSDU is not present.
void Serialize(Buffer::Iterator start) const
void SetDsTo(void)
Set the To DS bit in the Frame Control field.
bool IsFromDs(void) const
void SetQosEosp()
Set the end of service period (EOSP) bit in the QoS control field.
bool IsQosEosp(void) const
Return if the end of service period (EOSP) is set.
uint32_t Deserialize(Buffer::Iterator start)
void SetDsFrom(void)
Set the From DS bit in the Frame Control field.
void SetNoOrder(void)
Unset order bit in the frame control field.
bool IsMultihopAction() const
Check if the header is a Multihop action header.
bool IsCts(void) const
Return true if the header is a CTS header.
Mac48Address GetAddr1(void) const
Return the address in the Address 1 field.
tuple address
Definition: first.py:37
uint8_t m_qosTid
QOS TID.
void SetQosMeshControlPresent()
Set the Mesh Control Present flag for the QoS header.
void SetQosNoMeshControlPresent()
Clear the Mesh Control Present flag for the QoS header.
uint8_t m_ctrlSubtype
control subtype
void SetMultihopAction()
Set Type/Subtype values for a multihop action header.
bool IsDeauthentication(void) const
Return true if the header is a Deauthentication header.
bool IsRts(void) const
Return true if the header is a RTS header.
void SetQosNoEosp()
Un-set the end of service period (EOSP) bit in the QoS control field.
bool IsAck(void) const
Return true if the header is an ACK header.
static TypeId GetTypeId(void)
Get the type ID.
void SetFragmentNumber(uint8_t frag)
Set the fragment number of the header.
void SetBlockAckReq(void)
Set Type/Subtype values for a Block Ack Request header.
a unique identifier for an interface.
Definition: type-id.h:58
void SetQosAmsdu(void)
Set that A-MSDU is present.
bool IsRetry(void) const
Return if the Retry bit is set.
Implements the IEEE 802.11 MAC header.
Mac48Address GetAddr2(void) const
Return the address in the Address 2 field.
bool IsQosNoAck(void) const
Return if the QoS ACK policy is No ACK.
void SetQosBlockAck(void)
Set the QoS ACK policy in the QoS control field to block ACK.
uint8_t m_ctrlWep
control WEP
bool IsQosAck(void) const
Return if the QoS ACK policy is Normal ACK.
void SetDsNotFrom(void)
Un-set the From DS bit in the Frame Control field.
uint16_t GetSequenceNumber(void) const
Return the sequence number of the header.
void SetQosAckPolicy(QosAckPolicy policy)
Set the QoS ACK policy in the QoS control field.