1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ 2 /* 3 * Copyright (c) 2008 INRIA 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation; 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 * 18 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> 19 */ 20 #ifndef SIMPLE_CHANNEL_H 21 #define SIMPLE_CHANNEL_H 22 23 #include "ns3/channel.h" 24 #include "ns3/nstime.h" 25 #include "mac48-address.h" 26 #include <vector> 27 #include <map> 28 29 namespace ns3 { 30 31 class SimpleNetDevice; 32 class Packet; 33 34 /** 35 * \ingroup channel 36 * \brief A simple channel, for simple things and testing. 37 * 38 * This channel doesn't check for packet collisions and it 39 * does not introduce any error. 40 * By default, it does not add any delay to the packets. 41 * Furthermore, it assumes that the associated NetDevices 42 * are using 48-bit MAC addresses. 43 * 44 * This channel is meant to be used by ns3::SimpleNetDevices. 45 */ 46 class SimpleChannel : public Channel 47 { 48 public: 49 /** 50 * \brief Get the type ID. 51 * \return the object TypeId 52 */ 53 static TypeId GetTypeId (void); 54 SimpleChannel (); 55 56 /** 57 * A packet is sent by a net device. A receive event will be 58 * scheduled for all net device connected to the channel other 59 * than the net device who sent the packet 60 * 61 * \param p packet to be sent 62 * \param protocol protocol number 63 * \param to address to send packet to 64 * \param from address the packet is coming from 65 * \param sender netdevice who sent the packet 66 * 67 */ 68 virtual void Send (Ptr<Packet> p, uint16_t protocol, Mac48Address to, Mac48Address from, 69 Ptr<SimpleNetDevice> sender); 70 71 /** 72 * Attached a net device to the channel. 73 * 74 * \param device the device to attach to the channel 75 */ 76 virtual void Add (Ptr<SimpleNetDevice> device); 77 78 /** 79 * Blocks the communications from a NetDevice to another NetDevice. 80 * The block is unidirectional 81 * 82 * \param from the device to BlackList 83 * \param to the device wanting to block the other one 84 */ 85 virtual void BlackList (Ptr<SimpleNetDevice> from, Ptr<SimpleNetDevice> to); 86 87 /** 88 * Un-Blocks the communications from a NetDevice to another NetDevice. 89 * The block is unidirectional 90 * 91 * \param from the device to BlackList 92 * \param to the device wanting to block the other one 93 */ 94 virtual void UnBlackList (Ptr<SimpleNetDevice> from, Ptr<SimpleNetDevice> to); 95 96 // inherited from ns3::Channel 97 virtual std::size_t GetNDevices (void) const; 98 virtual Ptr<NetDevice> GetDevice (std::size_t i) const; 99 100 private: 101 Time m_delay; //!< The assigned speed-of-light delay of the channel 102 std::vector<Ptr<SimpleNetDevice> > m_devices; //!< devices connected by the channel 103 std::map<Ptr<SimpleNetDevice>, std::vector<Ptr<SimpleNetDevice> > > m_blackListedDevices; //!< devices blocked on a device 104 }; 105 106 } // namespace ns3 107 108 #endif /* SIMPLE_CHANNEL_H */ 109