src/devices/wifi/wifi-net-device.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 22 Feb 2008 23:34:53 +0100
changeset 2350 0b54480c4fd1
parent 2284 14b682d28918
child 2503 e667dc0f350e
permissions -rw-r--r--
Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#ifndef WIFI_NET_DEVICE_H
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#define WIFI_NET_DEVICE_H
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/net-device.h"
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/packet.h"
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include "ns3/callback-trace-source.h"
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include "ns3/mac48-address.h"
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include "ssid.h"
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
#include <string>
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
namespace ns3 {
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
class WifiChannel;
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
    34
class WifiPhy;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
class MacStations;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
class MacLow;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
class MacRxMiddle;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
class MacTxMiddle;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
class MacParameters;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
class DcaTxop;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
class MacHighAdhoc;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
class MacHighNqsta;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
class MacHighNqap;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
    44
class DcfManager;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    46
/**
2053
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    47
 * \brief hold the type of trace event generated by 
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    48
 * a WifiNetDevice.
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    49
 */
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    50
class WifiNetDeviceTraceType : public TraceContextElement
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    51
{
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    52
public:
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    53
  enum Type {
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    54
    RX,
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    55
    TX
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    56
  };
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    57
  WifiNetDeviceTraceType ();
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    58
  WifiNetDeviceTraceType (enum Type type);
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    59
  /**
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    60
   * \returns the type of event
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    61
   */
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    62
  enum Type Get (void) const;
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    63
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    64
  static uint16_t GetUid (void);
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    65
  void Print (std::ostream &os) const;
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    66
  std::string GetTypeName (void) const;
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    67
private:
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    68
  enum Type m_type;
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    69
};
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    70
012487e16e31 basic tracing support
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2029
diff changeset
    71
/**
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    72
 * \brief the base class for 802.11 network interfaces
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    73
 *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    74
 */
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
class WifiNetDevice : public NetDevice {
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
public:
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
  virtual ~WifiNetDevice ();
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    79
  /**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    80
   * \param channel the channel to connect this 802.11 
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    81
   *        interface to.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    82
   */
2169
06af4e3c25a2 ConnectTo -> Attach
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2168
diff changeset
    83
  void Attach (Ptr<WifiChannel> channel);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    85
  /**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    86
   * \returns the Mac48Address of this 802.11 interface.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    87
   *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    88
   * This method is equivalent to NetDevice::GetAddress. The only
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    89
   * difference is its return type.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    90
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1899
diff changeset
    91
  Mac48Address GetSelfAddress (void) const;
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    92
  /**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    93
   * \returns the bssid of this 802.11 interface.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    94
   */
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
  virtual Mac48Address GetBssid (void) const = 0;
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    96
  /**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    97
   * \returns the ssid of this 802.11 interface.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
    98
   */
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
  virtual Ssid GetSsid (void) const = 0;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   101
private:
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
   102
  class PhyListener;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
   103
  class NavListener;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
   104
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   105
  // inherited from NetDevice
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   106
  virtual bool DoNeedsArp (void) const;
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   107
  virtual Ptr<Channel> DoGetChannel (void) const;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   108
  virtual bool SendTo (Ptr<Packet> packet, const Address &to, uint16_t protocolNumber);
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   109
  // defined for children
2169
06af4e3c25a2 ConnectTo -> Attach
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2168
diff changeset
   110
  virtual void NotifyAttached (void) = 0;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   111
  virtual bool DoSendTo (Ptr<const Packet> packet, const Mac48Address &to) = 0;
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   112
  // private helper
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   113
  void Construct (void);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   115
  CallbackTraceSource<Ptr<const Packet>, Mac48Address> m_rxLogger;
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   116
  CallbackTraceSource<Ptr<const Packet>, Mac48Address> m_txLogger;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
protected:
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   118
  // inherited from Object
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   119
  virtual Ptr<TraceResolver> GetTraceResolver (void) const;
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   120
  WifiNetDevice (Ptr<Node> node);
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   121
  WifiNetDevice (Ptr<Node> node, Mac48Address self);
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   122
  void DoForwardUp (Ptr<Packet> packet, const Mac48Address &from);
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   123
  Ptr<DcaTxop> CreateDca (uint32_t minCw, uint32_t maxCw, uint32_t aifsn) const;
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   124
  // inherited from Object
1998
41cd4e5694c2 dispose the channel from WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1978
diff changeset
   125
  virtual void DoDispose (void);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   127
  Ptr<WifiChannel> m_channel;
2054
ba8e810bae4c derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2053
diff changeset
   128
  Ptr<WifiPhy> m_phy;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  MacStations *m_stations;
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   130
  Ptr<MacLow> m_low;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  MacRxMiddle *m_rxMiddle;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
  MacTxMiddle *m_txMiddle;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
  MacParameters *m_parameters;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
   134
  DcfManager *m_manager;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
   135
  PhyListener *m_phyListener;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2089
diff changeset
   136
  NavListener *m_navListener;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
};
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   139
/**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   140
 * \brief a 802.11 adhoc network interface
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   141
 *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   142
 * This network interface is a very simple pass-through 
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   143
 * from the higher layers down to the MAC DCF layer.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   144
 */
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   145
class AdhocWifiNetDevice : public WifiNetDevice {
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
public:
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   147
  AdhocWifiNetDevice (Ptr<Node> node);
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   148
  AdhocWifiNetDevice (Ptr<Node> node, Mac48Address self);
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   149
  virtual ~AdhocWifiNetDevice ();
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
  virtual Mac48Address GetBssid (void) const;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
  virtual Ssid GetSsid (void) const;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
  void SetSsid (Ssid ssid);
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
2002
32903f9a7315 add dispose methods in subclasses of WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1998
diff changeset
   155
protected:
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   156
  // inherited from Object
2002
32903f9a7315 add dispose methods in subclasses of WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1998
diff changeset
   157
  virtual void DoDispose (void);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
private:
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   159
  void DoConstruct (void);
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   160
  void ForwardUp (void);
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   161
  // inherited from WifiNetDefice
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   162
  virtual bool DoSendTo (Ptr<const Packet> packet, Mac48Address const & to);
2169
06af4e3c25a2 ConnectTo -> Attach
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2168
diff changeset
   163
  virtual void NotifyAttached (void);
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   164
  virtual Ptr<TraceResolver> GetTraceResolver (void) const;
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1954
diff changeset
   165
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
  Ssid m_ssid;
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   167
  Ptr<DcaTxop> m_dca;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
  MacHighAdhoc *m_high;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
};
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   171
/**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   172
 * \brief a 802.11 STA network interface 
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   173
 *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   174
 * This network interface implements the MAC-level STA 
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   175
 * active probing, association, and disassociation prototols.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   176
 *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   177
 * By default, it starts a new probing phase whenever a new 
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   178
 * data packet must be sent and the STA is not yet associated
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   179
 * to the AP.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   180
 */
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   181
class NqstaWifiNetDevice : public WifiNetDevice 
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   182
{
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
public:
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   184
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   185
   * The ssid is initialized from \valueref{WifiSsid}.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   186
   */
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   187
  NqstaWifiNetDevice (Ptr<Node> node);
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   188
  NqstaWifiNetDevice (Ptr<Node> node, Mac48Address self);
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   189
  virtual ~NqstaWifiNetDevice ();
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
  virtual Mac48Address GetBssid (void) const;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
  virtual Ssid GetSsid (void) const;
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   193
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   194
  /**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   195
   * \param ssid the ssid we want to associate with
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   196
   *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   197
   * Start a new active probing phase with the specified
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   198
   * ssid.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   199
   */
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
  void StartActiveAssociation (Ssid ssid);
2002
32903f9a7315 add dispose methods in subclasses of WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1998
diff changeset
   201
protected:
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   202
  // inherited from Object
2002
32903f9a7315 add dispose methods in subclasses of WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1998
diff changeset
   203
  virtual void DoDispose (void);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
private:
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   205
  void DoConstruct (void);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
  void Associated (void);
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
  void DisAssociated (void);
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   208
  // inherited from WifiNetDefice
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   209
  virtual bool DoSendTo (Ptr<const Packet> packet, Mac48Address const & to);
2169
06af4e3c25a2 ConnectTo -> Attach
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2168
diff changeset
   210
  virtual void NotifyAttached (void);
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   211
  virtual Ptr<TraceResolver> GetTraceResolver (void) const;
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   212
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
  Ssid m_ssid;
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   214
  Ptr<DcaTxop> m_dca;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
  MacHighNqsta *m_high;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
};
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
2029
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   218
/**
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   219
 * \brief a 802.11 AP network interface
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   220
 *
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   221
 * This network interface implements the MAC-level
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   222
 * AP-side of the beacon, probing, and, association
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   223
 * protocols. By default, every STA which tries
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   224
 * to associate is accepted.
234f9a8c49af basic doxygen documentation for users
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2002
diff changeset
   225
 */
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   226
class NqapWifiNetDevice : public WifiNetDevice 
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   227
{
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
public:
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   229
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   230
   * The ssid is initialized from \valueref{WifiSsid}.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   231
   */
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   232
  NqapWifiNetDevice (Ptr<Node> node);
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   233
  NqapWifiNetDevice (Ptr<Node> node, Mac48Address self);
1954
d1fde26bcb1c add WifiNetDevice to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
   234
  virtual ~NqapWifiNetDevice ();
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
  virtual Mac48Address GetBssid (void) const;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
  virtual Ssid GetSsid (void) const;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
  void SetSsid (Ssid ssid);
2089
f6d8dea92b39 implement AP beaconing
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   239
  void StartBeaconing (void);
2002
32903f9a7315 add dispose methods in subclasses of WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1998
diff changeset
   240
protected:
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   241
  // inherited from Object
2002
32903f9a7315 add dispose methods in subclasses of WifiNetDevice
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1998
diff changeset
   242
  virtual void DoDispose (void);
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
private:
2151
7c63780653f2 add constructors to specify the address of a device
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   244
  void DoConstruct (void);
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   245
  // inherited from WifiNetDefice
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2151
diff changeset
   246
  virtual bool DoSendTo (Ptr<const Packet> packet, Mac48Address const & to);
2169
06af4e3c25a2 ConnectTo -> Attach
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2168
diff changeset
   247
  virtual void NotifyAttached (void);
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   248
  virtual Ptr<TraceResolver> GetTraceResolver (void) const;
2284
14b682d28918 add a few comments here and there
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2169
diff changeset
   249
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
  Ssid m_ssid;
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   251
  Ptr<DcaTxop> m_dca;
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2284
diff changeset
   252
  Ptr<DcaTxop> m_beaconDca;
1899
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
  MacHighNqap *m_high;
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
};
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
} // namespace ns3
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
f601585e8e89 add missing header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
#endif /* WIFI_NET_DEVICE_H */