src/spectrum/model/non-communicating-net-device.h
author Vedran Miletić <rivanvx@gmail.com>
Sat, 01 Sep 2012 20:57:21 +0200
changeset 9063 32755d0516f4
parent 7353 09fccf6195ea
permissions -rw-r--r--
Bug 1237 - code cleanups related to includes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6349
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     2
/*
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2010
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     4
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     8
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    13
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    17
 *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    18
 * Author: Nicola Baldo <nbaldo@cttc.es>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    19
 */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    20
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    21
#ifndef NON_COMMUNICATING_NET_DEVICE_H
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    22
#define NON_COMMUNICATING_NET_DEVICE_H
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    23
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7353
diff changeset
    24
#include <cstring>
6349
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    25
#include <ns3/node.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    26
#include <ns3/address.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    27
#include <ns3/net-device.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    28
#include <ns3/callback.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    29
#include <ns3/packet.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    30
#include <ns3/traced-callback.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    31
#include <ns3/ptr.h>
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    32
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    33
namespace ns3 {
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    34
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    35
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    36
class SpectrumChannel;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    37
class Channel;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    38
class SpectrumErrorModel;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    39
class Queue;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    40
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    41
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    42
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    43
/**
7241
0a7a16b599e8 Make some more modules show up on doxygen modules page
Mitch Watrous <watrous@u.washington.edu>
parents: 7142
diff changeset
    44
 * \ingroup spectrum
0a7a16b599e8 Make some more modules show up on doxygen modules page
Mitch Watrous <watrous@u.washington.edu>
parents: 7142
diff changeset
    45
 *
6349
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    46
 * This class implements a device which does not communicate, in the
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    47
 * sense that it does not interact with the above protocol stack. The
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    48
 * purpose of this NetDevice is to be used for devices such as
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    49
 * microwave ovens, waveform generators and spectrum
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    50
 * analyzers. Since the ns-3 channel API is strongly based on the presence of
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    51
 * NetDevice class instances, it is convenient to provide a NetDevice that can
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    52
 * be used with such non-communicating devices.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    53
 */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    54
class NonCommunicatingNetDevice : public NetDevice
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    55
{
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    56
public:
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    57
  static TypeId GetTypeId (void);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    58
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    59
  NonCommunicatingNetDevice ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    60
  virtual ~NonCommunicatingNetDevice ();
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    61
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    62
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    63
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    64
   * This class doesn't talk directly with the underlying channel (a
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    65
   * dedicated PHY class is expected to do it), however the NetDevice
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    66
   * specification features a GetChannel() method. This method here
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    67
   * is therefore provide to allow NonCommunicatingNetDevice::GetChannel() to have
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    68
   * something meaningful to return.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    69
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    70
   * @param c the underlying channel
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    71
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    72
  void SetChannel (Ptr<Channel> c);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    73
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    74
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    75
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    76
   * Set the Phy object which is attached to this device.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    77
   * This object is needed so that we can set/get attributes and
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    78
   * connect to trace sources of the PHY from the net device.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    79
   *
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    80
   * @param phy the Phy object embedded within this device.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    81
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    82
  void SetPhy (Ptr<Object> phy);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    83
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    84
  /**
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    85
   * @return a reference to the PHY object embedded in this NetDevice.
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    86
   */
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    87
  Ptr<Object> GetPhy () const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    88
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    89
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    90
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    91
  // inherited from NetDevice
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    92
  virtual void SetIfIndex (const uint32_t index);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    93
  virtual uint32_t GetIfIndex (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    94
  virtual Ptr<Channel> GetChannel (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    95
  virtual bool SetMtu (const uint16_t mtu);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    96
  virtual uint16_t GetMtu (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    97
  virtual void SetAddress (Address address);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    98
  virtual Address GetAddress (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    99
  virtual bool IsLinkUp (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   100
  virtual void AddLinkChangeCallback (Callback<void> callback);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   101
  virtual bool IsBroadcast (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   102
  virtual Address GetBroadcast (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   103
  virtual bool IsMulticast (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   104
  virtual bool IsPointToPoint (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   105
  virtual bool IsBridge (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   106
  virtual bool Send (Ptr<Packet> packet, const Address& dest,
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   107
                     uint16_t protocolNumber);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   108
  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest,
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   109
                         uint16_t protocolNumber);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   110
  virtual Ptr<Node> GetNode (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   111
  virtual void SetNode (Ptr<Node> node);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   112
  virtual bool NeedsArp (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   113
  virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   114
  virtual Address GetMulticast (Ipv4Address addr) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   115
  virtual Address GetMulticast (Ipv6Address addr) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   116
  virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   117
  virtual bool SupportsSendFrom (void) const;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   118
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   119
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   120
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   121
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   122
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   123
private:
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   124
  virtual void DoDispose (void);
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   125
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   126
  Ptr<Node>    m_node;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   127
  Ptr<Channel> m_channel;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   128
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   129
  uint32_t m_ifIndex;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   130
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   131
  Ptr<Object> m_phy;
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   132
};
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   133
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   134
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   135
} // namespace ns3
4bab6b10a034 merged spectrum framework
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   136
7353
09fccf6195ea bug 1203: Inconsistently named ifndef/define macros in ns-3 headers
Vedran Miletic <rivanvx@gmail.com>
parents: 7241
diff changeset
   137
#endif /* NON_COMMUNICATING_NET_DEVICE_H */