src/fd-net-device/model/fd-net-device.h
author Tom Henderson <tomh@tomh.org>
Mon, 28 Sep 2015 20:27:25 -0700
changeset 11676 05ea1489e509
parent 11606 98fa74311b21
permissions -rw-r--r--
bug 2184: Integer overflow in MacLow
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     2
/*
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     3
 * Copyright (c) 2012 INRIA, 2012 University of Washington
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     4
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     7
 * published by the Free Software Foundation;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     8
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    12
 * GNU General Public License for more details.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    13
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    17
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    18
 * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    19
 *         Claudio Freire <klaussfreire@sourceforge.net>
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    20
 */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    21
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    22
#ifndef FD_NET_DEVICE_H
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    23
#define FD_NET_DEVICE_H
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    24
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    25
#include "ns3/address.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    26
#include "ns3/callback.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    27
#include "ns3/data-rate.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    28
#include "ns3/event-id.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    29
#include "ns3/mac48-address.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    30
#include "ns3/net-device.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    31
#include "ns3/node.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    32
#include "ns3/packet.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    33
#include "ns3/ptr.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    34
#include "ns3/system-condition.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    35
#include "ns3/traced-callback.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    36
#include "ns3/unix-fd-reader.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    37
#include "ns3/system-mutex.h"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    38
11547
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
    39
#include <utility>
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
    40
#include <queue>
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    41
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    42
namespace ns3 {
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    43
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    44
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    45
/**
10407
ea97f1c81af5 Fix doxygen module references
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10401
diff changeset
    46
 * \defgroup fd-net-device File Descriptor Network Device
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    47
 * This section documents the API of the ns-3 fd-net-device module.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    48
 * For a generic functional description, please refer to the ns-3 manual.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    49
 */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    50
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    51
/**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    52
 * \ingroup fd-net-device
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    53
 * \brief This class performs the actual data reading from the sockets.
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    54
 */
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    55
class FdNetDeviceFdReader : public FdReader
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    56
{
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    57
public:
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    58
  FdNetDeviceFdReader ();
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    59
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    60
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    61
   * Set size of the read buffer.
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    62
   */
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    63
  void SetBufferSize (uint32_t bufferSize);
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    64
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    65
private:
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    66
  FdReader::Data DoRead (void);
11547
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
    67
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    68
  uint32_t m_bufferSize; //!< size of the read buffer
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    69
};
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    70
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    71
class Node;
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    72
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    73
/**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    74
 * \ingroup fd-net-device
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    75
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    76
 * \brief a NetDevice to read/write network traffic from/into a file descriptor.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    77
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    78
 * A FdNetDevice object will read and write frames/packets from/to a file descriptor.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    79
 * This file descriptor might be associated to a Linux TAP/TUN device, to a socket
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    80
 * or to a user space process, allowing the simulation to exchange traffic with the
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    81
 * "outside-world"
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    82
 *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    83
 */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    84
class FdNetDevice : public NetDevice
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    85
{
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    86
public:
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    87
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    88
   * \brief Get the type ID.
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    89
   * \return the object TypeId
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
    90
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    91
  static TypeId GetTypeId (void);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    92
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    93
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    94
   * Enumeration of the types of frames supported in the class.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    95
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    96
  enum EncapsulationMode
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    97
  {
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    98
    DIX,         /**< DIX II / Ethernet II packet */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
    99
    LLC,         /**< 802.2 LLC/SNAP Packet*/
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   100
    DIXPI,       /**< When using TAP devices, if flag
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   101
                      IFF_NO_PI is not set on the device,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   102
                      IP packets will have an extra header:
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   103
                      Flags [2 bytes]
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   104
                      Proto [2 bytes]
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   105
                      Raw protocol(IP, IPv6, etc) frame. */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   106
  };
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   107
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   108
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   109
   * Constructor for the FdNetDevice.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   110
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   111
  FdNetDevice ();
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   112
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   113
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   114
   * Destructor for the FdNetDevice.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   115
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   116
  virtual ~FdNetDevice ();
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   117
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   118
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   119
   * Set the link layer encapsulation mode of this device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   120
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   121
   * \param mode The link layer encapsulation mode of this device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   122
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   123
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   124
  void SetEncapsulationMode (FdNetDevice::EncapsulationMode mode);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   125
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   126
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   127
   * Get the link layer encapsulation mode of this device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   128
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   129
   * \returns The link layer encapsulation mode of this device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   130
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   131
  FdNetDevice::EncapsulationMode GetEncapsulationMode (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   132
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   133
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   134
   * Set the associated file descriptor.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   135
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   136
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   137
  void SetFileDescriptor (int fd);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   138
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   139
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   140
   * Set a start time for the device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   141
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   142
   * @param tStart the start time
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   143
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   144
  void Start (Time tStart);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   145
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   146
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   147
   * Set a stop time for the device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   148
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   149
   * @param tStop the stop time
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   150
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   151
  void Stop (Time tStop);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   152
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   153
  // inherited from NetDevice base class.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   154
  virtual void SetIfIndex (const uint32_t index);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   155
  virtual uint32_t GetIfIndex (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   156
  virtual Ptr<Channel> GetChannel (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   157
  virtual void SetAddress (Address address);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   158
  virtual Address GetAddress (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   159
  virtual bool SetMtu (const uint16_t mtu);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   160
  virtual uint16_t GetMtu (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   161
  virtual bool IsLinkUp (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   162
  virtual void AddLinkChangeCallback (Callback<void> callback);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   163
  virtual bool IsBroadcast (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   164
  virtual Address GetBroadcast (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   165
  virtual bool IsMulticast (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   166
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   167
  virtual bool IsPointToPoint (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   168
  virtual bool IsBridge (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   169
  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   170
  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   171
  virtual Ptr<Node> GetNode (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   172
  virtual void SetNode (Ptr<Node> node);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   173
  virtual bool NeedsArp (void) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   174
  virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   175
  virtual void SetPromiscReceiveCallback (NetDevice::PromiscReceiveCallback cb);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   176
  virtual bool SupportsSendFrom () const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   177
  virtual Address GetMulticast (Ipv6Address addr) const;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   178
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   179
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   180
   * Set if the NetDevice is able to send Broadcast messages
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   181
   * \param broadcast true if the NetDevice can send Broadcast
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   182
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   183
  virtual void SetIsBroadcast (bool broadcast);
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   184
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   185
   * Set if the NetDevice is able to send Multicast messages
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   186
   * \param multicast true if the NetDevice can send Multicast
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   187
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   188
  virtual void SetIsMulticast (bool multicast);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   189
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   190
protected:
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   191
  virtual void DoDispose (void);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   192
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   193
private:
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   194
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   195
   * \brief Copy constructor
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   196
   *
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   197
   * Defined and unimplemented to avoid misuse as suggested in
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   198
   * http://www.nsnam.org/wiki/NS-3_Python_Bindings#.22invalid_use_of_incomplete_type.22
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   199
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   200
  FdNetDevice (FdNetDevice const &);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   201
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   202
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   203
   * Spin up the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   204
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   205
  void StartDevice (void);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   206
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   207
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   208
   * Tear down the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   209
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   210
  void StopDevice (void);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   211
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   212
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   213
   * Callback to invoke when a new frame is received
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   214
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   215
  void ReceiveCallback (uint8_t *buf, ssize_t len);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   216
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   217
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   218
   * Forward the frame to the appropriate callback for processing
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   219
   */
11547
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
   220
  void ForwardUp (void);
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   221
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   222
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   223
   * Start Sending a Packet Down the Wire.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   224
   * @param p packet to send
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   225
   * @returns true if success, false on failure
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   226
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   227
  bool TransmitStart (Ptr<Packet> p);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   228
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   229
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   230
   * Notify that the link is up and ready
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   231
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   232
  void NotifyLinkUp (void);
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   233
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   234
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   235
   * The ns-3 node associated to the net device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   236
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   237
  Ptr<Node> m_node;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   238
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   239
  /**
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   240
   * a copy of the node id so the read thread doesn't have to GetNode() in
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   241
   * in order to find the node ID.  Thread unsafe reference counting in
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   242
   * multithreaded apps is not a good thing.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   243
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   244
  uint32_t m_nodeId;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   245
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   246
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   247
   * The ns-3 interface index (in the sense of net device index) that has been assigned to this network device.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   248
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   249
  uint32_t m_ifIndex;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   250
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   251
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   252
   * The MTU associated to the file descriptor technology
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   253
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   254
  uint16_t m_mtu;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   255
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   256
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   257
   * The file descriptor used for receive/send network traffic.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   258
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   259
  int m_fd;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   260
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   261
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   262
   * Reader for the file descriptor.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   263
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   264
  Ptr<FdNetDeviceFdReader> m_fdReader;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   265
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   266
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   267
   * The net device mac address.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   268
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   269
  Mac48Address m_address;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   270
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   271
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   272
   * The typ of encapsulation of the received/transmited frames.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   273
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   274
  EncapsulationMode m_encapMode;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   275
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   276
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   277
   * Flag indicating whether or not the link is up.  In this case,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   278
   * whether or not the device is connected to a channel.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   279
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   280
  bool m_linkUp;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   281
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   282
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   283
   * Callbacks to fire if the link changes state (up or down).
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   284
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   285
  TracedCallback<> m_linkChangeCallbacks;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   286
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   287
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   288
   * Flag indicating whether or not the underlying net device supports
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   289
   * broadcast.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   290
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   291
  bool m_isBroadcast;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   292
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   293
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   294
   * Flag indicating whether or not the underlying net device supports
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   295
   * multicast.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   296
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   297
  bool m_isMulticast;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   298
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   299
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   300
   * Number of packets that were received and scheduled for read but not yeat read.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   301
   */
11547
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
   302
  std::queue< std::pair<uint8_t *, ssize_t> > m_pendingQueue;
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
   303
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   304
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   305
   * Maximum number of packets that can be received and scheduled for read but not yeat read.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   306
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   307
  uint32_t m_maxPendingReads;
11547
941beab1b849 bug 2119: Fixing memory leaks in FdNetDevice test with DefaultSimulatorImpl due to non-executed events when simulation ends
Alina Quereilhac <alina.quereilhac@inria.fr>
parents: 11410
diff changeset
   308
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   309
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   310
   * Mutex to increase pending read counter.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   311
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   312
  SystemMutex m_pendingReadMutex;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   313
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   314
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   315
   * Time to start spinning up the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   316
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   317
  Time m_tStart;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   318
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   319
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   320
   * Time to start tearing down the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   321
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   322
  Time m_tStop;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   323
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   324
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   325
   * NetDevice start event
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   326
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   327
  EventId m_startEvent;
11407
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   328
  /**
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   329
   * NetDevice stop event
c175567f535a [Doxygen] fd-net-device module fixes
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11045
diff changeset
   330
   */
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   331
  EventId m_stopEvent;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   332
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   333
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   334
   * The callback used to notify higher layers that a packet has been received.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   335
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   336
  NetDevice::ReceiveCallback m_rxCallback;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   337
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   338
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   339
   * The callback used to notify higher layers that a packet has been received in promiscuous mode.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   340
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   341
  NetDevice::PromiscReceiveCallback m_promiscRxCallback;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   342
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   343
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   344
   * The trace source fired when packets come into the "top" of the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   345
   * at the L3/L2 transition, before being queued for transmission.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   346
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   347
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   348
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   349
  TracedCallback<Ptr<const Packet> > m_macTxTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   350
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   351
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   352
   * The trace source fired when packets coming into the "top" of the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   353
   * at the L3/L2 transition are dropped before being queued for transmission.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   354
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   355
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   356
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   357
  TracedCallback<Ptr<const Packet> > m_macTxDropTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   358
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   359
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   360
   * The trace source fired for packets successfully received by the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   361
   * immediately before being forwarded up to higher layers (at the L2/L3
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   362
   * transition).  This is a promiscuous trace.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   363
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   364
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   365
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   366
  TracedCallback<Ptr<const Packet> > m_macPromiscRxTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   367
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   368
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   369
   * The trace source fired for packets successfully received by the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   370
   * immediately before being forwarded up to higher layers (at the L2/L3
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   371
   * transition).  This is a non-promiscuous trace.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   372
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   373
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   374
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   375
  TracedCallback<Ptr<const Packet> > m_macRxTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   376
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   377
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   378
   * The trace source fired for packets successfully received by the device
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   379
   * but which are dropped before being forwarded up to higher layers (at the
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   380
   * L2/L3 transition).
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   381
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   382
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   383
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   384
  TracedCallback<Ptr<const Packet> > m_macRxDropTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   385
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   386
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   387
   * The trace source fired when the phy layer drops a packet as it tries
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   388
   * to transmit it.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   389
   *
11606
98fa74311b21 [doxygen] Revise TracedCallback function signatures for const.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11547
diff changeset
   390
   * \todo Remove: this TracedCallback is never invoked.
98fa74311b21 [doxygen] Revise TracedCallback function signatures for const.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11547
diff changeset
   391
   *
9271
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   392
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   393
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   394
  TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   395
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   396
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   397
   * The trace source fired when the phy layer drops a packet it has received.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   398
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   399
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   400
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   401
  TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   402
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   403
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   404
   * A trace source that emulates a non-promiscuous protocol sniffer connected
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   405
   * to the device.  Unlike your average everyday sniffer, this trace source
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   406
   * will not fire on PACKET_OTHERHOST events.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   407
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   408
   * On the transmit size, this trace hook will fire after a packet is dequeued
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   409
   * from the device queue for transmission.  In Linux, for example, this would
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   410
   * correspond to the point just before a device hard_start_xmit where
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   411
   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   412
   * ETH_P_ALL handlers.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   413
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   414
   * On the receive side, this trace hook will fire when a packet is received,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   415
   * just before the receive callback is executed.  In Linux, for example,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   416
   * this would correspond to the point at which the packet is dispatched to
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   417
   * packet sniffers in netif_receive_skb.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   418
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   419
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   420
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   421
  TracedCallback<Ptr<const Packet> > m_snifferTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   422
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   423
  /**
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   424
   * A trace source that emulates a promiscuous mode protocol sniffer connected
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   425
   * to the device.  This trace source fire on packets destined for any host
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   426
   * just like your average everyday packet sniffer.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   427
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   428
   * On the transmit size, this trace hook will fire after a packet is dequeued
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   429
   * from the device queue for transmission.  In Linux, for example, this would
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   430
   * correspond to the point just before a device hard_start_xmit where
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   431
   * dev_queue_xmit_nit is called to dispatch the packet to the PF_PACKET
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   432
   * ETH_P_ALL handlers.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   433
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   434
   * On the receive side, this trace hook will fire when a packet is received,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   435
   * just before the receive callback is executed.  In Linux, for example,
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   436
   * this would correspond to the point at which the packet is dispatched to
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   437
   * packet sniffers in netif_receive_skb.
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   438
   *
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   439
   * \see class CallBackTraceSource
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   440
   */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   441
  TracedCallback<Ptr<const Packet> > m_promiscSnifferTrace;
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   442
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   443
};
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   444
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   445
} // namespace ns3
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   446
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   447
#endif /* FD_NET_DEVICE_H */
85e753b6676c Merge fd-net-device into ns-3-dev
alina
parents:
diff changeset
   448