src/wifi/model/ht-capabilities.h
author Ghada Badawy <gbadawy@gmail.com>
Tue, 13 Aug 2013 22:05:25 -0700
changeset 10139 17a71cd49da3
child 10140 7e83801e8734
permissions -rw-r--r--
partial 802.11n support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     2
/*
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     3
 * Copyright (c) 2013
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     4
 *
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     8
 *
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    12
 * GNU General Public License for more details.
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    13
 *
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    17
 *
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    18
 * Author: Ghada Badawy <gbadawy@gmail.com>
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    19
 */
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    20
#ifndef HT_CAPABILITIES_H
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    21
#define HT_CAPABILITIES_H
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    22
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    23
#include <stdint.h>
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    24
#include "ns3/buffer.h"
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    25
#include "ns3/attribute-helper.h"
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    26
#include "ns3/wifi-information-element.h"
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    27
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    28
/**
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    29
 * This defines the maximum number of supported MCSs that a STA is
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    30
 * allowed to have. Currently this number is set for IEEE 802.11n
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    31
 */
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    32
#define MAX_SUPPORTED_MCS  (77)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    33
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    34
namespace ns3 {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    35
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    36
/**
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    37
 * \brief The Ht Capabilities Information Element
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    38
 * \ingroup wifi
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    39
 *
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    40
 * This class knows how to serialise and deserialise the Ht Capabilities Information Element
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    41
 */
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    42
class HtCapabilities: public WifiInformationElement
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    43
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    44
public:
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    45
   HtCapabilities ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    46
  void SetLdpc (uint8_t ldpc);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    47
  void SetSupportedChannelWidth (uint8_t supportedchannelwidth);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    48
  void SetGreenfield (uint8_t greenfield);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    49
  void SetShortGuardInterval20(uint8_t shortguardinterval);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    50
  void SetHtCapabilitiesInfo(uint16_t ctrl);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    51
  void SetAmpduParameters (uint8_t ctrl);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    52
  void SetSupportedMcsSet (uint64_t ctrl1, uint64_t ctrl2);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    53
  void SetHtSupported(uint8_t htsupported);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    54
  void SetRxMcsBitmask(uint8_t index);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    55
  bool IsSupportedMcs (uint8_t mcs);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    56
  //returns the HT Capabilties info field in the HT Capabilities information element
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    57
  uint16_t GetHtCapabilitiesInfo (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    58
  //returns the Ampdu parameters field in the HT Capabilities information element
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    59
  uint8_t GetAmpduParameters (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    60
  //returns the first 64bytes of the Supported MCS field in the HT Capabilities information element
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    61
  uint64_t GetSupportedMcsSet1 (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    62
  //returns the first 64bytes of the Supported MCS field in the HT Capabilities information element
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    63
  uint64_t GetSupportedMcsSet2 (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    64
  uint8_t GetLdpc (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    65
  uint8_t GetGreenfield (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    66
  uint8_t GetShortGuardInterval20 (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    67
  uint8_t GetSupportedChannelWidth (void) const; //2040 supported or not
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    68
  uint8_t ConvertToUint8 () const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    69
  uint8_t* GetRxMcsBitmask();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    70
  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    71
  WifiInformationElementId ElementId () const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    72
  uint8_t GetInformationFieldSize () const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    73
  void SerializeInformationField (Buffer::Iterator start) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    74
  uint8_t DeserializeInformationField (Buffer::Iterator start,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    75
                                       uint8_t length);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    76
 /*
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    77
   * This information element is a bit special in that it is only
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    78
   * included if the STA is an HT STA. To support this we
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    79
   * override the Serialize and GetSerializedSize methods of
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    80
   * WifiInformationElement.
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    81
   */
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    82
  Buffer::Iterator Serialize (Buffer::Iterator start) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    83
  uint16_t GetSerializedSize () const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    84
 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    85
private:
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    86
  uint8_t m_ldpc;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    87
  uint8_t m_supportedChannelWidth;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    88
  uint8_t m_smPowerSave;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    89
  uint8_t m_greenField;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    90
  uint8_t m_shortGuardInterval20; 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    91
  uint8_t m_shortGuardInterval40;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    92
  uint8_t m_txStbc;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    93
  uint8_t m_rxStbc;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    94
  uint8_t m_htDelayedBlockAck;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    95
  uint8_t m_maxAmsduLength;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    96
  uint8_t m_dssMode40;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    97
  uint8_t m_reserved;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    98
  uint8_t m_fortyMhzIntolerant;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
    99
  uint8_t m_lsigProtectionSupport;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   100
  uint8_t m_maxAmpduLength;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   101
  uint8_t m_minMpduStartSpace;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   102
  uint8_t m_ampduReserved;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   103
  uint8_t m_reservedMcsSet1;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   104
  uint16_t m_rxHighestSupportedDataRate;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   105
  uint8_t m_reservedMcsSet2;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   106
  uint8_t m_txMcsSetDefined;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   107
  uint8_t m_txRxMcsSetUnequal;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   108
  uint8_t m_txMaxNSpatialStreams;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   109
  uint8_t m_txUnequalModulation;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   110
  uint32_t m_reservedMcsSet3; 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   111
  uint8_t m_rxMcsBitmask[MAX_SUPPORTED_MCS];
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   112
  //this is used to decide if this element should be added to the frame or not
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   113
  uint8_t m_htSupported;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   114
};
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   115
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   116
std::ostream &operator << (std::ostream &os, const HtCapabilities &htcapabilities);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   117
std::istream &operator >> (std::istream &is, HtCapabilities &htcapabilities);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   118
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   119
ATTRIBUTE_HELPER_HEADER (HtCapabilities)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   120
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   121
} // namespace ns3
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   122
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents:
diff changeset
   123
#endif /* HT_CAPABILITY_H */