/usr/include/ns3.26/ns3/simple-net-device.h is in libns3-dev 3.26+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2008 INRIA
*
* 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: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#ifndef SIMPLE_NET_DEVICE_H
#define SIMPLE_NET_DEVICE_H
#include <stdint.h>
#include <string>
#include "ns3/traced-callback.h"
#include "ns3/net-device.h"
#include "ns3/queue.h"
#include "ns3/data-rate.h"
#include "ns3/data-rate.h"
#include "ns3/event-id.h"
#include "mac48-address.h"
namespace ns3 {
class SimpleChannel;
class Node;
class ErrorModel;
/**
* \ingroup netdevice
*
* This device assumes 48-bit mac addressing; there is also the possibility to
* add an ErrorModel if you want to force losses on the device.
*
* The device can be installed on a node through the SimpleNetDeviceHelper.
* In case of manual creation, the user is responsible for assigning an unique
* address to the device.
*
* By default the device is in Broadcast mode, with infinite bandwidth.
*
* \brief simple net device for simple things and testing
*/
class SimpleNetDevice : public NetDevice
{
public:
/**
* \brief Get the type ID.
* \return the object TypeId
*/
static TypeId GetTypeId (void);
SimpleNetDevice ();
/**
* Receive a packet from a connected SimpleChannel. The
* SimpleNetDevice receives packets from its connected channel
* and then forwards them by calling its rx callback method
*
* \param packet Packet received on the channel
* \param protocol protocol number
* \param to address packet should be sent to
* \param from address packet was sent from
*/
void Receive (Ptr<Packet> packet, uint16_t protocol, Mac48Address to, Mac48Address from);
/**
* Attach a channel to this net device. This will be the
* channel the net device sends on
*
* \param channel channel to assign to this net device
*
*/
void SetChannel (Ptr<SimpleChannel> channel);
/**
* Attach a queue to the SimpleNetDevice.
*
* \param queue Ptr to the new queue.
*/
void SetQueue (Ptr<Queue> queue);
/**
* Get a copy of the attached Queue.
*
* \returns Ptr to the queue.
*/
Ptr<Queue> GetQueue (void) const;
/**
* Attach a receive ErrorModel to the SimpleNetDevice.
*
* The SimpleNetDevice may optionally include an ErrorModel in
* the packet receive chain.
*
* \see ErrorModel
* \param em Ptr to the ErrorModel.
*/
void SetReceiveErrorModel (Ptr<ErrorModel> em);
// inherited from NetDevice base class.
virtual void SetIfIndex (const uint32_t index);
virtual uint32_t GetIfIndex (void) const;
virtual Ptr<Channel> GetChannel (void) const;
virtual void SetAddress (Address address);
virtual Address GetAddress (void) const;
virtual bool SetMtu (const uint16_t mtu);
virtual uint16_t GetMtu (void) const;
virtual bool IsLinkUp (void) const;
virtual void AddLinkChangeCallback (Callback<void> callback);
virtual bool IsBroadcast (void) const;
virtual Address GetBroadcast (void) const;
virtual bool IsMulticast (void) const;
virtual Address GetMulticast (Ipv4Address multicastGroup) const;
virtual bool IsPointToPoint (void) const;
virtual bool IsBridge (void) const;
virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
virtual Ptr<Node> GetNode (void) const;
virtual void SetNode (Ptr<Node> node);
virtual bool NeedsArp (void) const;
virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
virtual Address GetMulticast (Ipv6Address addr) const;
virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
virtual bool SupportsSendFrom (void) const;
protected:
virtual void DoDispose (void);
private:
Ptr<SimpleChannel> m_channel; //!< the channel the device is connected to
NetDevice::ReceiveCallback m_rxCallback; //!< Receive callback
NetDevice::PromiscReceiveCallback m_promiscCallback; //!< Promiscuous receive callback
Ptr<Node> m_node; //!< Node this netDevice is associated to
uint16_t m_mtu; //!< MTU
uint32_t m_ifIndex; //!< Interface index
Mac48Address m_address; //!< MAC address
Ptr<ErrorModel> m_receiveErrorModel; //!< Receive error model.
/**
* The trace source fired when the phy layer drops a packet it has received
* due to the error model being active. Although SimpleNetDevice doesn't
* really have a Phy model, we choose this trace source name for alignment
* with other trace sources.
*
* \see class CallBackTraceSource
*/
TracedCallback<Ptr<const Packet> > m_phyRxDropTrace;
/**
* The TransmitComplete method is used internally to finish the process
* of sending a packet out on the channel.
*/
void TransmitComplete (void);
bool m_linkUp; //!< Flag indicating whether or not the link is up
/**
* Flag indicating whether or not the NetDevice is a Point to Point model.
* Enabling this will disable Broadcast and Arp.
*/
bool m_pointToPointMode;
Ptr<Queue> m_queue; //!< The Queue for outgoing packets.
DataRate m_bps; //!< The device nominal Data rate. Zero means infinite
EventId TransmitCompleteEvent; //!< the Tx Complete event
/**
* List of callbacks to fire if the link changes state (up or down).
*/
TracedCallback<> m_linkChangeCallbacks;
};
} // namespace ns3
#endif /* SIMPLE_NET_DEVICE_H */
|