src/wifi/model/monitor-mac-high.h
author Ashwin Narayan
Sat, 16 Jul 2011 08:54:00 -0400
changeset 7328 141f8d6ccb03
parent 7314 09a2de14b1ad
permissions -rw-r--r--
Cleaning up code for review
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     2
/*
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     3
 * Copyright (c) 2008 INRIA
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     4
 *
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     7
 * published by the Free Software Foundation;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     8
 *
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    12
 * GNU General Public License for more details.
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    13
 *
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    17
 *
7328
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>, Ashwin Narayan <ashwin.narayan89@gmail.com>
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    19
 */
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    20
#ifndef MONITOR_MAC_HIGH_H
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    21
#define MONITOR_MAC_HIGH_H
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    22
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    23
#include "ns3/wifi-mac.h"
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    24
#include "ns3/radiotap-header.h"
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    25
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    26
#include "dca-txop.h"
7314
09a2de14b1ad Fixing MonitorMacHigh
Ashwin Narayan
parents: 7313
diff changeset
    27
#include "edca-txop-n.h"
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    28
#include "wifi-remote-station-manager.h"
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    29
#include "ssid.h"
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    30
#include "qos-utils.h"
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    31
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    32
#include <map>
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    33
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    34
namespace ns3 {
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    35
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    36
class Dcf;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    37
class MacLow;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    38
class MacRxMiddle;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    39
class MacTxMiddle;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    40
class DcfManager;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    41
7328
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    42
/**
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    43
 * \brief base class for Monitor Wifi Mac objects.
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    44
 *
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    45
 * This class is essentially a copy of the non-QoS
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    46
 * functionality of RegularWifiMac
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    47
 *
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    48
 */
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
    49
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    50
class MonitorMacHigh : public WifiMac
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    51
{
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    52
public:
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    53
  static TypeId GetTypeId (void);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    54
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    55
  MonitorMacHigh ();
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    56
  virtual ~MonitorMacHigh ();
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    57
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    58
  void SetSlot (Time slotTime);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    59
  void SetSifs (Time sifs);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    60
  void SetEifsNoDifs (Time eifsNoDifs);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    61
  void SetPifs (Time pifs);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    62
  void SetCtsTimeout (Time ctsTimeout);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    63
  void SetAckTimeout (Time ackTimeout);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    64
  Time GetPifs (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    65
  Time GetSifs (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    66
  Time GetSlot (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    67
  Time GetEifsNoDifs (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    68
  Time GetCtsTimeout (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    69
  Time GetAckTimeout (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    70
  virtual Mac48Address GetAddress (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    71
  virtual Ssid GetSsid (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    72
  virtual void SetAddress (Mac48Address address);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    73
  virtual void SetSsid (Ssid ssid);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    74
  virtual void SetBssid (Mac48Address bssid);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    75
  virtual Mac48Address GetBssid (void) const;
7314
09a2de14b1ad Fixing MonitorMacHigh
Ashwin Narayan
parents: 7313
diff changeset
    76
  virtual void SetPromisc (void);
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    77
  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    78
  virtual bool SupportsSendFrom (void) const;
7314
09a2de14b1ad Fixing MonitorMacHigh
Ashwin Narayan
parents: 7313
diff changeset
    79
  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to);
09a2de14b1ad Fixing MonitorMacHigh
Ashwin Narayan
parents: 7313
diff changeset
    80
  virtual void SetWifiPhy (Ptr<WifiPhy> phy);
09a2de14b1ad Fixing MonitorMacHigh
Ashwin Narayan
parents: 7313
diff changeset
    81
  virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    82
  typedef Callback<void, Ptr<Packet>, Mac48Address, Mac48Address> ForwardUpCallback;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    83
  virtual void SetForwardUpCallback (ForwardUpCallback upCallback);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    84
  virtual void SetLinkUpCallback (Callback<void> linkUp);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    85
  virtual void SetLinkDownCallback (Callback<void> linkDown);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    86
  virtual void SetBasicBlockAckTimeout (Time blockAckTimeout);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    87
  virtual Time GetBasicBlockAckTimeout (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    88
  virtual void SetCompressedBlockAckTimeout (Time blockAckTimeout);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    89
  virtual Time GetCompressedBlockAckTimeout (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    90
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    91
protected:
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    92
  virtual void DoStart ();
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    93
  virtual void DoDispose ();
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    94
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    95
  MacRxMiddle *m_rxMiddle;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    96
  MacTxMiddle *m_txMiddle;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    97
  Ptr<MacLow> m_low;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    98
  DcfManager *m_dcfManager;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
    99
  Ptr<WifiPhy> m_phy;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   100
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   101
  Ptr<WifiRemoteStationManager> m_stationManager;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   102
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   103
  ForwardUpCallback m_forwardUp;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   104
  Callback<void> m_linkUp;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   105
  Callback<void> m_linkDown;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   106
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   107
  Ssid m_ssid;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   108
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   109
  Ptr<DcaTxop> m_dca;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   110
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   111
  virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   112
7328
141f8d6ccb03 Cleaning up code for review
Ashwin Narayan
parents: 7314
diff changeset
   113
  virtual void Receive (Ptr<Packet> packet, const WifiMacHeader *hdr, const RadiotapHeader *radiotaphdr);
7312
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   114
  virtual void TxOk (const WifiMacHeader &hdr);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   115
  virtual void TxFailed (const WifiMacHeader &hdr);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   116
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   117
  void ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   118
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   119
  virtual void DeaggregateAmsduAndForward (Ptr<Packet> aggregatedPacket,
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   120
                                           const WifiMacHeader *hdr);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   121
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   122
  virtual void SendAddBaResponse (const MgtAddBaRequestHeader *reqHdr,
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   123
                                  Mac48Address originator);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   124
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   125
  bool m_qosSupported;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   126
  void SetQosSupported (bool enable);
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   127
  bool GetQosSupported () const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   128
private:
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   129
  Ptr<DcaTxop> GetDcaTxop (void) const;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   130
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   131
  TracedCallback<const WifiMacHeader &> m_txOkCallback;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   132
  TracedCallback<const WifiMacHeader &> m_txErrCallback;
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   133
};
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   134
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   135
} // namespace ns3
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   136
07b41e471dd8 MonitorMacHigh changes
Ashwin Narayan
parents:
diff changeset
   137
#endif /* MONITOR_MAC_HIGH_H */