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 SetDsFrom (void);
126  void SetDsNotFrom (void);
130  void SetDsTo (void);
134  void SetDsNotTo (void);
165  void SetType (WifiMacType type);
172  void SetDuration (Time duration);
178  void SetId (uint16_t id);
184  void SetSequenceNumber (uint16_t seq);
190  void SetFragmentNumber (uint8_t frag);
194  void SetNoMoreFragments (void);
198  void SetMoreFragments (void);
202  void SetRetry (void);
206  void SetNoRetry (void);
212  void SetQosTid (uint8_t tid);
216  void SetQosEosp ();
220  void SetQosNoEosp ();
226  void SetQosAckPolicy (QosAckPolicy policy);
230  void SetQosAmsdu (void);
234  void SetQosNoAmsdu (void);
240  void SetQosTxopLimit (uint8_t txop);
244  void SetQosMeshControlPresent ();
252  void SetOrder (void);
256  void SetNoOrder (void);
257 
263  Mac48Address GetAddr1 (void) const;
269  Mac48Address GetAddr2 (void) const;
275  Mac48Address GetAddr3 (void) const;
281  Mac48Address GetAddr4 (void) const;
287  WifiMacType GetType (void) const;
291  bool IsFromDs (void) const;
295  bool IsToDs (void) const;
303  bool IsData (void) const;
310  bool IsQosData (void) const;
316  bool IsCtl (void) const;
322  bool IsMgt (void) const;
328  bool IsCfpoll (void) const;
334  bool IsRts (void) const;
340  bool IsCts (void) const;
346  bool IsAck (void) const;
352  bool IsBlockAckReq (void) const;
358  bool IsBlockAck (void) const;
364  bool IsAssocReq (void) const;
370  bool IsAssocResp (void) const;
376  bool IsReassocReq (void) const;
382  bool IsReassocResp (void) const;
388  bool IsProbeReq (void) const;
394  bool IsProbeResp (void) const;
400  bool IsBeacon (void) const;
406  bool IsDisassociation (void) const;
412  bool IsAuthentication (void) const;
418  bool IsDeauthentication (void) const;
424  bool IsAction () const;
431  bool IsMultihopAction () const;
437  Time GetDuration (void) const;
443  uint16_t GetSequenceControl (void) const;
449  uint16_t GetSequenceNumber (void) const;
455  uint8_t GetFragmentNumber (void) const;
461  bool IsRetry (void) const;
467  bool IsMoreFragments (void) const;
473  bool IsQosBlockAck (void) const;
479  bool IsQosNoAck (void) const;
485  bool IsQosAck (void) const;
491  bool IsQosEosp (void) const;
498  bool IsQosAmsdu (void) const;
504  uint8_t GetQosTid (void) const;
510  uint8_t GetQosTxopLimit (void) const;
517  uint32_t GetSize (void) const;
523  const char * GetTypeString (void) const;
524 
530  typedef void (* TracedCallback)(const WifiMacHeader &header);
531 
532 
533 private:
539  uint16_t GetFrameControl (void) const;
545  uint16_t GetQosControl (void) const;
551  void SetFrameControl (uint16_t control);
557  void SetSequenceControl (uint16_t seq);
563  void SetQosControl (uint16_t qos);
569  void PrintFrameControl (std::ostream &os) const;
570 
571  uint8_t m_ctrlType;
572  uint8_t m_ctrlSubtype;
573  uint8_t m_ctrlToDs;
574  uint8_t m_ctrlFromDs;
575  uint8_t m_ctrlMoreFrag;
576  uint8_t m_ctrlRetry;
577  uint8_t m_ctrlMoreData;
578  uint8_t m_ctrlWep;
579  uint8_t m_ctrlOrder;
580  uint16_t m_duration;
584  uint8_t m_seqFrag;
585  uint16_t m_seqSeq;
587  uint8_t m_qosTid;
588  uint8_t m_qosEosp;
589  uint8_t m_qosAckPolicy;
590  uint8_t m_amsduPresent;
591  uint8_t m_qosStuff;
592 };
593 
594 } //namespace ns3
595 
596 #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 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.
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 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.
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.
uint8_t m_seqFrag
sequence fragment
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 GetFragmentNumber(void) const
Return the fragment number of the header.
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
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.
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.
uint8_t m_qosStuff
QOS stuff.
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 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
uint8_t m_ctrlRetry
control retry
void SetQosTxopLimit(uint8_t txop)
Set TXOP limit in the QoS control field.
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.
WifiMacType GetType(void) const
Return the type (enum WifiMacType)
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
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.
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.
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.