src/devices/p2p/p2p-net-device.h
changeset 1258 33d510db1e37
parent 1257 acc7b6c14087
parent 1223 5b7938fa0e20
child 1259 67584d6fc928
--- a/src/devices/p2p/p2p-net-device.h	Wed Aug 08 16:29:26 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,313 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 University of Washington
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Craig Dowell <craigdo@ee.washington.edu>
- */
-
-#ifndef POINT_TO_POINT_NET_DEVICE_H
-#define POINT_TO_POINT_NET_DEVICE_H
-
-#include <string.h>
-#include "ns3/mac-address.h"
-#include "ns3/node.h"
-#include "ns3/net-device.h"
-#include "ns3/callback.h"
-#include "ns3/packet.h"
-#include "ns3/callback-trace-source.h"
-#include "ns3/nstime.h"
-#include "ns3/data-rate.h"
-#include "ns3/ptr.h"
-
-namespace ns3 {
-
-class Queue;
-class PointToPointChannel;
-
-/**
- * \class PointToPointNetDevice
- * \brief A Device for a Point to Point Network Link.
- *
- * Ns-3 takes a four-layer view of a protocol stack.  This is the same model
- * that TCP uses.  In this view, layers 5-7 of the OSI reference model are
- * grouped together into an application layer; layer four (transport / TCP) is
- * broken out; layer three (network / IP) is broken out; and layers 1-2 are
- * grouped together.  We call this grouping of layers one and two a NetDevice
- * and represent it as a class in the system.
- *
- * The NetDevice class is specialized according to the needs of the specific
- * kind of network link.  In this case, the link is a PointToPoint link.  The
- * PointToPoint link is a family of classes that includes this class, the
- * PointToPointNetDevice, a PointToPointChannel class that represents the 
- * actual medium across which bits are sent, a PointToPointIpv4Interface class
- * that provides the hook to tie a general purpose node to this specific
- * link, and finally, a PointToPointTopology object that is responsible for
- * putting all of the pieces together.
- *
- * This is the PointToPointNetDevice class that represents, essentially, the
- * PC card that is used to connect to the PointToPoint network.
- */
-class PointToPointNetDevice : public NetDevice {
-public:
-  /**
-   * Enumeration of the types of traces supported in the class.
-   *
-   */
-  enum TraceType {
-    QUEUE, /**< Trace queue events on the attached queue */
-    RX,    /**< Trace packet reception events (from the channel) */
-  };
-  /**
-   * Construct a PointToPointNetDevice
-   *
-   * This is the constructor for the PointToPointNetDevice.  It takes as a
-   * parameter the Node to which this device is connected.  Ownership of the
-   * Node pointer is not implied and the node must not be deleded.
-   *
-   * @see PointToPointTopology::AddPointToPointLink ()
-   * @param node the Node to which this device is connected.
-   */
-  PointToPointNetDevice (Ptr<Node> node);
-  /**
-   * Copy Construct a PointToPointNetDevice
-   *
-   * This is the copy constructor for the PointToPointNetDevice.  This is
-   * primarily used in topology creation.
-   *
-   * @see PointToPointTopology::AddPointToPointLink ()
-   * @param nd the object to be copied
-   */
-  PointToPointNetDevice (const PointToPointNetDevice& nd);
-  /**
-   * Destroy a PointToPointNetDevice
-   *
-   * This is the destructor for the PointToPointNetDevice.
-   */
-  virtual ~PointToPointNetDevice();
-  /**
-   * Assignment Operator for a PointToPointNetDevice
-   *
-   * This is the assignment operator for the PointToPointNetDevice.  This is
-   * to allow
-   *
-   * @param nd the object to be copied
-   */
-  PointToPointNetDevice& operator= (PointToPointNetDevice nd);
-  /**
-   * Set the Data Rate used for transmission of packets.  The data rate is
-   * set in the Attach () method from the corresponding field in the channel
-   * to which the device is attached.  It can be overridden using this method.
-   *
-   * @see Attach ()
-   * @param bps the data rate at which this object operates
-   */
-  void SetDataRate(DataRate bps);
-  /**
-   * Set the inteframe gap used to separate packets.  The interframe gap
-   * defines the minimum space required between packets sent by this device.
-   * It is usually set in the Attach () method based on the speed of light
-   * delay of the channel to which the device is attached.  It can be 
-   * overridden using this method if desired.
-   *
-   * @see Attach ()
-   * @param t the interframe gap time
-   */
-  void SetInterframeGap(Time t);
-  /**
-   * Attach the device to a channel.
-   *
-   * The PointToPointTopology object creates a PointToPointChannel and two
-   * PointtoPointNetDevices.  In order to introduce these components to each
-   * other, the topology object calls Attach () on each PointToPointNetDevice.
-   * Inside this method, the Net Device calls out to the PointToPointChannel
-   * to introduce itself.
-   *
-   * @see PointToPointTopology::AddPointToPointLink ()
-   * @see SetDataRate ()
-   * @see SetInterframeGap ()
-   * @param ch a pointer to the channel to which this object is being attached.
-   */
-  bool Attach(Ptr<PointToPointChannel> ch);
-  /**
-   * Attach a queue to the PointToPointNetDevice.
-   *
-   * The PointToPointNetDevice "owns" a queue.  This queue is created by the
-   * PointToPointTopology object and implements a queueing method such as
-   * DropTail or RED.  The PointToPointNetDevice assumes ownership of this
-   * queue and must delete it when the device is destroyed.
-   *
-   * @see PointToPointTopology::AddPointToPointLink ()
-   * @see Queue
-   * @see DropTailQueue
-   * @param queue a pointer to the queue for which object is assuming
-   *        ownership.
-   */
-  void AddQueue(Ptr<Queue> queue);
-  /**
-   * Receive a packet from a connected PointToPointChannel.
-   *
-   * The PointToPointNetDevice receives packets from its connected channel
-   * and forwards them up the protocol stack.  This is the public method
-   * used by the channel to indicate that the last bit of a packet has 
-   * arrived at the device.
-   *
-   * @see PointToPointChannel
-   * @param p a reference to the received packet
-   */
-  void Receive (Packet& p);
-protected:
-  virtual void DoDispose (void);
-  /**
-   * Get a copy of the attached Queue.
-   *
-   * This method is provided for any derived class that may need to get
-   * direct access to the underlying queue.
-   *
-   * @see PointToPointTopology
-   * @returns a pointer to the queue.
-   */
-  Ptr<Queue> GetQueue(void) const; 
-  /**
-   * Get a copy of the attached Channel
-   *
-   * This method is provided for any derived class that may need to get
-   * direct access to the connected channel
-   *
-   * @see PointToPointChannel
-   * @returns a pointer to the channel
-   */
-  virtual Ptr<Channel> DoGetChannel(void) const;
-private:
-  /**
-   * Send a Packet Down the Wire.
-   *
-   * The SendTo method is defined as the standard way that the level three
-   * protocol uses to tell a NetDevice to send a packet.  SendTo is declared
-   * as abstract in the NetDevice class and we declare it here.
-   *
-   * @see NetDevice
-   * @param p a reference to the packet to send
-   * @param dest a reference to the MacAddress of the destination device
-   * @returns true if success, false on failure
-   */
-  virtual bool SendTo (Packet& p, const MacAddress& dest);
-  /**
-   * Start Sending a Packet Down the Wire.
-   *
-   * The TransmitStart method is the method that is used internally in the
-   * PointToPointNetDevice to begin the process of sending a packet out on
-   * the channel.  The corresponding method is called on the channel to let
-   * it know that the physical device this class represents has virually
-   * started sending signals.  An event is scheduled for the time at which
-   * the bits have been completely transmitted.
-   *
-   * @see PointToPointChannel::TransmitStart ()
-   * @see TransmitCompleteEvent ()
-   * @param p a reference to the packet to send
-   * @returns true if success, false on failure
-   */
-  bool TransmitStart (Packet &p);
-  /**
-   * Stop Sending a Packet Down the Wire and Begin the Interframe Gap.
-   *
-   * The TransmitCompleteEvent method is used internally to finish the process
-   * of sending a packet out on the channel.  During execution of this method
-   * the TransmitEnd method is called on the channel to let it know that the
-   * physical device this class represents has virually finished sending 
-   * signals.  The channel uses this event to begin its speed of light delay
-   * timer after which it notifies the Net Device at the other end of the 
-   * link that the bits have arrived.  During this method, the net device 
-   * also schedules the TransmitReadyEvent at which time the transmitter 
-   * becomes ready to send the next packet.
-   *
-   * @see PointToPointChannel::TransmitEnd ()
-   * @see TransmitReadyEvent ()
-   * @returns true if success, false on failure
-   */
-  void TransmitCompleteEvent (void);
-  /**
-   * Cause the Transmitter to Become Ready to Send Another Packet.
-   *
-   * The TransmitReadyEvent method is used internally to re-enable the 
-   * transmit machine of the net device.  It is scheduled after a suitable
-   * interframe gap after the completion of the previous transmission.
-   * The queue is checked at this time, and if there is a packet waiting on
-   * the queue, the transmission process is begun.
-   *
-   * @see TransmitStart ()
-   */
-  void TransmitReadyEvent (void);
-  /**
-   * Create a Trace Resolver for events in the net device.
-   *
-   * @see class TraceResolver
-   */
-  virtual TraceResolver *DoCreateTraceResolver (TraceContext const &context);
-  virtual bool DoNeedsArp (void) const;
-  /**
-   * Enumeration of the states of the transmit machine of the net device.
-   */
-  enum TxMachineState
-    {
-      READY, /**< The transmitter is ready to begin transmission of a packet */
-      BUSY,  /**< The transmitter is busy transmitting a packet */
-      GAP    /**< The transmitter is in the interframe gap time */
-    };
-  /**
-   * The state of the Net Device transmit state machine.
-   * @see TxMachineState
-   */
-  TxMachineState m_txMachineState;
-  /**
-   * The data rate that the Net Device uses to simulate packet transmission
-   * timing.
-   * @see class DataRate
-   */
-  DataRate       m_bps;
-  /**
-   * The interframe gap that the Net Device uses to throttle packet
-   * transmission
-   * @see class Time
-   */
-  Time           m_tInterframeGap;
-  /**
-   * The PointToPointChannel to which this PointToPointNetDevice has been
-   * attached.
-   * @see class PointToPointChannel
-   */
-  Ptr<PointToPointChannel> m_channel;
-  /**
-   * The Queue which this PointToPointNetDevice uses as a packet source.
-   * Management of this Queue has been delegated to the PointToPointNetDevice
-   * and it has the responsibility for deletion.
-   * @see class Queue
-   * @see class DropTailQueue
-   */
-  Ptr<Queue> m_queue;
-  /**
-   * The trace source for the packet reception events that the device can
-   * fire.
-   *
-   * @see class CallBackTraceSource
-   * @see class TraceResolver
-   */
-  CallbackTraceSource<Packet &> m_rxTrace;
-};
-
-}; // namespace ns3
-
-#endif // POINT_TO_POINT_NET_DEVICE_H
-