--- a/src/devices/csma-cd/csma-cd-channel.h Tue Aug 28 11:22:01 2007 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,307 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007 Emmanuelle Laprise
- *
- * 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: Emmanuelle Laprise<emmanuelle.laprise@bluekazoo.ca>
- */
-
-#ifndef CSMA_CD_CHANNEL_H
-#define CSMA_CD_CHANNEL_H
-
-#include "ns3/channel.h"
-#include "ns3/ptr.h"
-#include "ns3/packet.h"
-#include "ns3/nstime.h"
-#include "ns3/data-rate.h"
-
-namespace ns3 {
-
-class CsmaCdNetDevice;
-
- /**
- * \brief CsmaCdNetDevice Record
- *
- * Stores the information related to each net device that is
- * connected to the channel.
- */
- class CsmaCdDeviceRec {
- public:
- Ptr< CsmaCdNetDevice > devicePtr; /// Pointer to the net device
- bool active; /// Is net device enabled to TX/RX
-
- CsmaCdDeviceRec();
- CsmaCdDeviceRec(Ptr< CsmaCdNetDevice > device);
- /*
- * \return If the net device pointed to by the devicePtr is active
- * and ready to RX/TX.
- */
- bool IsActive();
- };
-
- /**
- * Current state of the channel
- */
- enum WireState
- {
- IDLE, /**< Channel is IDLE, no packet is being
- transmitted */
- TRANSMITTING, /**< Channel is BUSY, a packet is being written
- by a net device */
- PROPAGATING /**< Channel is BUSY, packet is propagating to
- all attached net devices */
- };
-
-/**
- * \brief CsmaCd Channel.
- *
- * This class represents a simple Csma/Cd channel that can be used
- * when many nodes are connected to one wire. It uses a single busy
- * flag to indicate if the channel is currently in use. It does not
- * take into account the distances between stations or the speed of
- * light to determine collisions.
- *
- * Each net device must query the state of the channel and make sure
- * that it is IDLE before writing a packet to the channel.
- *
- * When the channel is instaniated, the constructor takes parameters
- * for a single speed, in bits per second, and a speed-of-light delay
- * time as a Time object. When a net device is attached to a channel,
- * it is assigned a device ID, this is in order to facilitate the
- * check that makes sure that a net device that is trying to send a
- * packet to the channel is really connected to this channel
- *
- */
-class CsmaCdChannel : public Channel {
-public:
- /**
- * \brief Create a CsmaCdChannel
- *
- * By default, you get a channel with the name "CsmaCd Channel" that
- * has an "infitely" fast transmission speed and zero delay.
- */
- CsmaCdChannel ();
-
- /**
- * \brief Create a CsmaCdChannel
- *
- * \param bps The bitrate of the channel
- * \param delay Transmission delay through the channel
- */
- CsmaCdChannel (const DataRate& bps, const Time& delay);
-
- /**
- * \brief Create a CsmaCdChannel
- *
- * \param name the name of the channel for identification purposes
- * \param bps The bitrate of the channel
- * \param delay Transmission delay through the channel
- */
- CsmaCdChannel (const std::string& name,
- const DataRate& bps, const Time& delay);
-
- /**
- * \brief Attach a given netdevice to this channel
- *
- * \param device Device pointer to the netdevice to attach to the channel
- * \return The assigned device number
- */
- int32_t Attach (Ptr<CsmaCdNetDevice> device);
- /**
- * \brief Detach a given netdevice from this channel
- *
- * The net device is marked as inactive and it is not allowed to
- * receive or transmit packets
- *
- * \param device Device pointer to the netdevice to detach from the channel
- * \return True if the device is found and attached to the channel,
- * false if the device is not currently connected to the channel or
- * can't be found.
- */
- bool Detach (Ptr<CsmaCdNetDevice> device);
- /**
- * \brief Detach a given netdevice from this channel
- *
- * The net device is marked as inactive and it is not allowed to
- * receive or transmit packets
- *
- * \param deviceId The deviceID assigned to the net device when it
- * was connected to the channel
- * \return True if the device is found and attached to the channel,
- * false if the device is not currently connected to the channel or
- * can't be found.
- */
- bool Detach (uint32_t deviceId);
- /**
- * \brief Reattach a previously detached net device to the channel
- *
- * The net device is marked as active. It is now allowed to receive
- * or transmit packets. The net device must have been previously
- * attached to the channel using the attach function.
- *
- * \param deviceId The device ID assigned to the net device when it
- * was connected to the channel
- * \return True if the device is found and is not attached to the
- * channel, false if the device is currently connected to the
- * channel or can't be found.
- */
- bool Reattach(uint32_t deviceId);
- /**
- * \brief Reattach a previously detached net device to the channel
- *
- * The net device is marked as active. It is now allowed to receive
- * or transmit packets. The net device must have been previously
- * attached to the channel using the attach function.
- *
- * \param device Device pointer to the netdevice to detach from the channel
- * \return True if the device is found and is not attached to the
- * channel, false if the device is currently connected to the
- * channel or can't be found.
- */
- bool Reattach(Ptr<CsmaCdNetDevice> device);
- /**
- * \brief Start transmitting a packet over the channel
- *
- * If the srcId belongs to a net device that is connected to the
- * channel, packet transmission begins, and the channel becomes busy
- * until the packet has completely reached all destinations.
- *
- * \param p A reference to the packet that will be transmitted over
- * the channel
- * \param srcId The device Id of the net device that wants to
- * transmit on the channel.
- * \return True if the channel is not busy and the transmitting net
- * device is currently active.
- */
- bool TransmitStart (Packet& p, uint32_t srcId);
- /**
- * \brief Indicates that the net device has finished transmitting
- * the packet over the channel
- *
- * The channel will stay busy until the packet has completely
- * propagated to all net devices attached to the channel. The
- * TransmitEnd function schedules the PropagationCompleteEvent which
- * will free the channel for further transmissions. Stores the
- * packet p as the m_currentPkt, the packet being currently
- * transmitting.
- *
- * \return Returns true unless the source was detached before it
- * completed its transmission.
- */
- bool TransmitEnd ();
- /**
- * \brief Indicates that the channel has finished propagating the
- * current packet. The channel is released and becomes free.
- *
- * Calls the receive function of every active net device that is
- * attached to the channel.
- */
- void PropagationCompleteEvent();
- /**
- * \return Returns the device number assigned to a net device by the
- * channel
- *
- * \param device Device pointer to the netdevice for which the device
- * number is needed
- */
- int32_t GetDeviceNum (Ptr<CsmaCdNetDevice> device);
- /**
- * \return Returns the state of the channel (IDLE -- free,
- * TRANSMITTING -- busy, PROPAGATING - busy )
- */
- WireState GetState();
-
- /**
- * \brief Indicates if the channel is busy. The channel will only
- * accept new packets for transmission if it is not busy.
- *
- * \return Returns true if the channel is busy and false if it is
- * free.
- */
- bool IsBusy();
-
- /**
- * \brief Indicates if a net device is currently attached or
- * detached from the channel.
- *
- * \param deviceId The ID that was assigned to the net device when
- * it was attached to the channel.
- * \return Returns true if the net device is attached to the
- * channel, false otherwise.
- */
- bool IsActive(uint32_t deviceId);
- /**
- * \return Returns the number of net devices that are currently
- * attached to the channel.
- */
- uint32_t GetNumActDevices (void);
- /**
- * \return Returns the total number of devices including devices
- * that have been detached from the channel.
- */
- virtual uint32_t GetNDevices (void) const;
- /**
- * \param i The deviceId of the net device for which we want the
- * pointer.
- * \return Returns the pointer to the net device that is associated
- * with deviceId i.
- */
- virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
-
- virtual DataRate GetDataRate (void);
- virtual Time GetDelay (void);
-
-private:
- DataRate m_bps; /// Data rate of the channel
- Time m_delay; /// Delay of the channel.
-
- /**
- * List of the net devices that have been or are currently connected
- * to the channel.
- *
- * Devices are nor removed from this list, they are marked as
- * inactive. Otherwise the assigned device IDs will not refer to the
- * correct NetDevice. The DeviceIds are used so that it is possible
- * to have a number to refer to an entry in the list so that the
- * whole list does not have to be searched when making sure that a
- * source is attached to a channel when it is transmitting data.
- */
- std::vector< CsmaCdDeviceRec > m_deviceList;
- /**
- * Packet that is currently being transmitted on the channel (or last
- * packet to have been transmitted on the channel if the channel is
- * free.)
- */
- Packet m_currentPkt;
- /**
- * Device Id of the source that is currently transmitting on the
- * channel. Or last source to have transmitted a packet on the
- * channel, if the channel is currently not busy.
- */
- uint32_t m_currentSrc;
- /**
- * Current state of the channel
- */
- WireState m_state;
- /**
- * Initializes the channel when it is constructed. Resets the
- * deviceList and sets the channel state to IDLE.
- */
- void Init (void);
-};
-
-} // namespace ns3
-
-#endif /* CSMA_CD_CHANNEL_H */